高可用redis主备方案基于keepalived保证在master宕机时,slaver可以自动切换为master提供服务。待之前的master机器上线了,可以选择是重新取回master权利还是作为slaver。当两者都正常时两者数据一致,都可提供服务
参考文档http://heylinux.com/archives/1942.html
安装包下载:keepalived包:http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
redis包:https://codeload.github.com/antirez/redis/tar.gz/2.8.21
安装目录(以/tmp为例 ):
keepalived:
cd /tmp
wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
tar -xzvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure &&make &&make install
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /tmp/keepalived-1.2.19/bin/keepalived /usr/sbin/
redis:
cd /tmp
wget https://codeload.github.com/antirez/redis/tar.gz/2.8.21
tar -xzvf 2.8.21
cd redis-2.8.21
make
cp src/redis-cli /usr/local/sbin/
cp src/redis-server /usr/local/sbin/
配置基于开头的参考文档
这里有几个点需要注意:
1.主备redis.conf 中daemonize yes 备机redis.conf中开启slaveof master_ip master_port
2.如果不想让master宕机后重新上线后发生主从切换,需要加上nopreempt
3.keepalived脑裂问题,当开启iptables服务时,会出现主备都是MASTER状态的情况,这是由于双方收不到彼此的心跳包,都认为对方
已下线,于是将自己置为master状态。
需要在/etc/sysconfig/iptables中添加:
-A INPUT -p vrrp -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
其中6379是默认的redis端口号,自定的话自行修改之
改好后执行service iptables restart
然后按照参考文档的测就可以了, 用第三台机器测,中途在master机器上执行killall -9 redis-server
可以看到slaver机器上的日志里会打印切换为master状态的信息。第三台机器用虚拟ip访问仍然正常使用