1 环境
主机 IP OS
主机 | IP | OS |
---|---|---|
master-server | 172.20.22.145 | centos7.2 |
slave-server | 172.20.22.53 | centos7.2 |
2 参考资料
https://my.oschina.net/guol/blog/182491
http://blog.csdn.net/qguanri/article/details/51120178
http://blog.csdn.net/zgf19930504/article/details/52024724
3 整体思路
在keepalived+redis的使用过程中有四种情况:
一种是keepalived挂了,同时redis也挂了,这样的话直接VIP飘走之后,是不需要进行redis数据同步的,因为redis挂了,你也无法去master上同步,不过会损失已经写在master上却还没同步到slave上面的这部分数据。
另一种是keepalived挂了,redis没挂,这时候VIP飘走后,redis的master/slave还是老的对应关系,如果不变化的话会把数据写入redis slave中,从而不会同步到master上去,这就要借助监控脚本反转redis的master/slave关系。这时候就要预留一点时间进行数据同步,然后反转master/slave。
还有一种是keepalived没挂,redis挂了,这时候根据监控脚本会检测到redis挂了,并且降低keepalived master的优先级,同样会导致VIP飘走,情况和第二种一样,也是需要进行数据同步,然后反转当前redis的master/slave关系的。
随后一种是keepalived没挂,redis也没挂,大吉大利啊,什么都不用操作。
本文的实验环境四种情况都适合,第一种是不需要同步数据的,脚本会默认去同步数据,但是其实是不会成功的。脚本主要是用来处理第二和第三种情况的。
4 安装redis
参考本站:centos7安装redis
4.1 修改主从redis配置文件
1 | vim /etc/redis/6379.conf |
4.1.1 主redis:
1 | #修改bind绑定IP,只有绑定的IP才能访问redis,0.0.0.0标识所有地址都能访问。 |
4.1.2 从redis:
1 | #修改bind绑定IP,只有绑定的IP才能访问redis,0.0.0.0标识所有地址都能访问。 |
4.2 启动并测试
1 | service redis_6379 start |
4.2.1 主redis
1 | [root@bogon ~]# redis-cli -p 6379 #登录redis |
4.2.2 从redis
1 | [root@bogon scripts]# redis-cli -p 6379 |
5 安装keepalived
1 | yum install keepalived |
5.1 修改配置文件
1 | vim /etc/keepalived/keepalived.conf |
1 |
|
1 | # BACKUP配置文件 |
5.2 创建脚本
创建scripts目录 /etc/keepalived,在scripts目录内创建redis-master.sh,redis-backup.sh,redis-fault.sh,redis-stop.sh,chk_redis.sh
5.2.1 chk_redis.sh脚本
1 | #!/bin/bash |
5.2.2 redis-master.sh
(master主机脚本与slave主机基本雷同,只需修改远程ip地址)
1 | #!/bin/bash |
5.2.3 redis-backup.sh
(master主机脚本与slave主机基本雷同,只需修改远程ip地址)
1 |
|
keepalived进入backup/stop/fault时的检测脚本,由于内容都一致,所以只写出redis_backup.sh
主从主机脚本内容一致,只需修改IP地址为对方IP
1 | $rediscli slaveof 172.20.22.53 6379 #修改为对方IP |
6 测试
7 注意事项:
VRRP脚本(vrrp_script)和VRRP实例(vrrp_instance)属于同一个级别
notify_master 、notify_backup、notify_fault、notify_stop参数
notify_stop
keepalived停止运行前运行notify_stop
指定的脚本notify_master
keepalived切换到master时执行的脚本notify_backup
keepalived切换到backup时执行的脚本notify_fault
keepalived出现故障时执行的脚本
- 启动顺序,先启动redis,后启动keepalived
8 说明
此方法可以实现完全的自动化主从切换,但同步数据的时间(即脚本中的sleep时间)生产环境中无法完全掌控,实际使用中建议手动切回,或在主服务器上keepalived.conf中添加不抢占主机参数nopreempt(此参数要求配置文件中keepalived状态都为backup,根据优先级选择master)
示例:
1 | vrrp_instance VI_1 { |