Redis之——搭建高可用及负载均衡的Redis
来源:互联网 发布:取色笔 淘宝 编辑:程序博客网 时间:2024/04/28 11:39
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52578080
之前,给大家介绍了一些关于Redis的文章,大家可以参见博文中有关Redis的文章。今天,我们就一起来学习如何搭建高可用及负载均衡的Redis,好了,不多说了,我们直接进入正题吧。
一、测试环境
1、机器
母机:centos6.5-64
虚拟机:centos6.5-64 单核 1G 独立ip 3个
虚拟机使用VMWare,centos为64位6.5.具体信息如下:
192.168.0.231 Redis-master192.168.0.231 Redis-slave192.168.0.239 Virtual IP
2、软件
Reidis
Keepalived
二、安装前配置
1、虚拟机最小化安装
虚拟机最小化安装,更新系统及安装必须组件
$ yum install -y openssl openssl-devel kernel kernel-devel gcc wget tcl libnl-devel$ yum upgrade$ reboot //重启系统
2、安装Keepalived
安装keepalived 下载地址:http://www.keepalived.org/software/keepalived-1.2.13.tar.gz 安装
$ wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz$ tar -zxvf keepalived-1.2.13.tar.gz$ cd keepalived-1.2.13$ ln -s /usr/src/kernels/`uname -r`-`uname -m`/ /usr/src/linux$ ./configure --prefix=/usr/local/keepalived --sysconf=/etc$ chkconfig --add keepalived//查看是否成功$ service keepalived status
3、安装redis
下载Redis,目前Redis的稳定版本是2.8.17,下载地址Redis-2.8.17
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz$ tar -zxvf redis-2.8.17.tar.gz$ cd redis-2.8.17$ make && make test$ mkdir -p /usr/local/redis/{bin,var,etc}$ cp ./src/{redis-benchmark,redis-cli,redis-server,redis-check-dump,redis-check-aof} /usr/local/redis/bin/$ cp /usr/local/redis/bin/* /usr/local/bin/
三、配置
1、Master配置
先配置好Redis,主从复制成功之后再行配置Keepalived。
Master-Redis配置
$ vim /usr/local/redis/etc/redis.conf
修改如下值
daemonize yespidfile /var/run/redis.pidport 6379tcp-backlog 511timeout 0tcp-keepalive 0loglevel noticelogfile "/usr/local/redis/log/redis.log"databases 16save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump.rdbdir /usr/local/redis/dataslave-serve-stale-data yesslave-read-only norepl-disable-tcp-nodelay noslave-priority 100appendonly yesappendfilename "appendonly.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mblua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10aof-rewrite-incremental-fsync yesMaster-Keepalived配置
global_defs { router_id redis}vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" ###监控脚本 interval 2 ###监控时间 timeout 2 ###超时时间 fall 3 ###重试次数}vrrp_instance redis { state MASTER ###设置为MASTER interface eth0 ###监控网卡 virtual_router_id 52 priority 101 ###权重值 authentication { auth_type PASS ###加密 auth_pass redis ###密码 } track_script { chk_redis ###执行上面定义的chk_redis } virtual_ipaddress { 192.168.0.239 ###VIP } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redsi_stop.sh}也可在本地编辑好后使用
scp
上传到服务器。 Master-keepalived脚本redis_master.sh:#!/bin/bash REDISCLI="/usr/local/redis/bin/redis-cli" LOGFILE="/usr/local/redis/var/keepalived-redis-state.log" echo "[master]" >> $LOGFILE date >> $LOGFILE echo "Being master...." >> $LOGFILE 2>&1 echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI SLAVEOF 192.168.0.232 6379 >> $LOGFILE 2>&1 sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态 echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1Master-keepalived脚本redis_backup.sh:
#!/bin/bash REDISCLI="/usr/local/redis/bin/redis-cli" LOGFILE="/usr/local/redis/log/keepalived-redis-state.log" echo "[backup]" >> $LOGFILE date >> $LOGFILE echo "Being slave...." >> $LOGFILE 2>&1 sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色 echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI SLAVEOF 192.168.0.232 6379 >> $LOGFILE 2>&1
2、Backup配置
同样先配置好Redis,主从复制成功之后再行配置Keepalived。
Backup-Redis配置
$ vim /usr/local/redis/etc/redis.conf修改如下值
daemonize yespidfile /var/run/redis.pidport 6379tcp-backlog 511timeout 0tcp-keepalive 0loglevel noticelogfile "/usr/local/redis/log/redis.log"databases 16save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump.rdbdir /usr/local/redis/dataslave-serve-stale-data yesslave-read-only norepl-disable-tcp-nodelay noslave-priority 100appendonly yesappendfilename "appendonly.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mblua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10aof-rewrite-incremental-fsync yesSLAVEOF 192.168.0.231 6379Backup-Keepalived配置
global_defs { router_id redis}vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" ###监控脚本 interval 2 ###监控时间 timeout 2 ###超时时间 fall 3 ###重试次数}vrrp_instance redis { state BACKUP ###设置为MASTER interface eth0 ###监控网卡 virtual_router_id 51 priority 100 ###权重值 authentication { auth_type PASS ###加密 auth_pass redis ###密码 } track_script { chk_redis ###执行上面定义的chk_redis } virtual_ipaddress { 192.168.0.239 ###VIP } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redsi_stop.sh}也可在本地编辑好后使用
scp
上传到服务器。 Master-keepalived脚本redis_master.sh:#!/bin/bash REDISCLI="/usr/local/redis/bin/redis-cli" LOGFILE="/usr/local/redis/var/keepalived-redis-state.log" echo "[master]" >> $LOGFILE date >> $LOGFILE echo "Being master...." >> $LOGFILE 2>&1 echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI SLAVEOF 192.168.0.231 6379 >> $LOGFILE 2>&1 sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态 echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1Master-keepalived脚本redis_backup.sh:
#!/bin/bash REDISCLI="/usr/local/redis/bin/redis-cli" LOGFILE="/usr/local/redis/log/keepalived-redis-state.log" echo "[backup]" >> $LOGFILE date >> $LOGFILE echo "Being slave...." >> $LOGFILE 2>&1 sleep 15 #延迟15秒待数据被对方同步完成之后再切换主从角色 echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI SLAVEOF 192.168.0.231 6379 >> $LOGFILE 2>&1
四、公共脚本配置
1、redis_chekc.sh
可以使用netcat来检测redis服务的状态.
安装nc,使用nc检测redis的服务而不是ping
$ wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz$ tar -zxvf netcat-0.7.1.tar.gz$ ./configure$ make && make install建立脚本:
$ vim /etc/keepalived/scripts/redis_check.sh脚本内容:
#!/bin/bashALIVE=`/usr/local/redis/bin/redis-cli PING`if ["$ALIVE" == "PONG"] ;then echo $ALIVE exit 0else echo $ALIVE exit 1fi
2、redis_fault.sh
建立脚本:
$ vim /etc/keepalived/scripts/redis_fault.sh脚本内容:
# !/bin/bashLOGFILE=/usr/local/redis/var/keepalived-redis-state.log echo "[faule]" >> $LOGFILE date >> $LOGFILE
3、redis_stop.sh
建立脚本:
$ vim /etc/keepalived/scripts/redis_stop.sh脚本内容:
# !/bin/bashLOGFILE=/usr/local/redis/var/keepalived-redis-state.log echo "[stop]" >> $LOGFILE date >> $LOGFILE
五、测试
1、主从复制测试
先打开Master上的Redis,再打开Backup上的Redis,分别查看info
$ redis-cli infoMaster的rule显示master为正常,slave会显示为192.168.0.232
在Master上写入数据,在Backup读取
$ redis-cli set a hello //Master 写入数据$ redis-cli get a //Backup 读取数据"hello"主从复制正常。
2、主从切换测试
先后启动Master和Backup上的keepalived,在Master上查看vip
$ ip a
从图中可以看出vip已经绑定在Master上,现在通过vip来进行数据测试
$ redis-cli -h 192.168.0.239 set a test$ redis-cli -h 192.168.0.239 get a //测试虚拟ip数据读取//在主机和从机上分别进行数据读取$ redis-cli get a
从图中可以看出测试无问题。
现在关闭Master上的redis,来看VIP能否正常漂移,并进行数据测试。
$ killall -9 redis-server$ redis-cli -h 192.168.0.232 info
现在给redis写入数据,测试看Master恢复服务后能否正常恢复数据
$ redis-cli -h 192.168.0.239 set a nihao恢复Master上的Redis,查看ip a
$ service redis-server start$ ip a$ redis-cli get a
数据恢复,VIP切换回Master,Redis高可用环境搭建成功.
至此,已成功搭建高可用及负载均衡的Redis环境。
- Redis之——搭建高可用及负载均衡的Redis
- Redis之——搭建高可用及负载均衡的Redis
- redis实现负载均衡和高可用
- redis的高可用搭建
- Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统
- Keepalived+Nginx+Redis+Tomcat实现高可用web负载均衡
- asp.net core 实战之 redis 负载均衡和"高可用"实现
- zookeeper环境搭建及redis高可用
- 搭建mysql负载均衡及高可用环境
- 搭建mysql负载均衡及高可用环境
- 搭建mysql负载均衡及高可用环境
- 搭建mysql负载均衡及高可用环境
- 搭建MySQL负载均衡及高可用环境
- 搭建高可用负载均衡组件及缓存DNS
- JMS之——ActiveMQ高可用+负载均衡集群
- redis的主从高可用搭建
- Redis哨兵—实现Redis高可用
- nginx——高可用的负载均衡
- Activity Lifecycle
- Layout布局之线性布局
- Excel公式教程 数组公式基础:数组扩展
- poj1328贪心
- 用Win7自带的工具给硬盘分区与合并
- Redis之——搭建高可用及负载均衡的Redis
- 19. Remove Nth Node From End of List(python)
- git ssh 心得
- shell中的xargs命令
- 初入微电商,我为何选择电脑护目镜
- LFM推荐的例子和代码
- TextView
- Android 启动 Service(startservice和bindservice) 两种方式的区别
- QT 的动态布局例子