使用keepalived实现redis主从切换
安装keepalived和redis主从的过程不再赘述,可参见本人其他部署文章。
主机名 | IP地址 | 所安装软件 |
---|---|---|
jia3.ty.com | 192.168.10.103 | keepalived(backup-高优先级),redis(master) |
jia4.ty.com | 192.168.10.104 | keepalived(backup-低优先级),redis(slave) |
[[email protected] keepalived]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id REDIS_KEEPALIVED } vrrp_script chk_redis { script "/etc/keepalived/script/chk_redis.sh" interval 3 } vrrp_instance REDIS_1 { state BACKUP nopreempt interface eth1 virtual_router_id 51 priority 200 #192.168.10.104该项配置值为100,其他都一样 advert_int 1 authentication { auth_type PASS auth_pass redis } track_script { chk_redis } virtual_ipaddress { 192.168.10.111/24 } notify_master "/etc/keepalived/script/become_master.sh" }
涉及到的两个脚本内容如下:
[[email protected] keepalived]# more /etc/keepalived/script/chk_redis.sh
#!/bin/bash A=`/app/redis/bin/redis-cli -h 127.0.0.1 -p 6379 PING` if [ "$A"x != "PONG"x ] then /app/redis/bin/redis-server /app/redis/conf/redis.conf sleep 2 if [ "`/app/redis/bin/redis-cli -h 127.0.0.1 -p 6379 PING`"x != "PONG"x ] then /etc/init.d/keepalived stop fi fi
[[email protected] keepalived]# more /etc/keepalived/script/become_master.sh
#!/bin/bash /app/redis/bin/redis-cli -h 127.0.0.1 -p 6379 slaveof no one
说明:
1.keepalived使用双Backup非抢占模式 2.redis主从切换的实现是通过检测本机redis进程,当服务不可用时停止keepalived服务做VIP切换,当获得VIP时让Redis执行slaveof no one命令变成主。 3.需要检测keepalived状态,当发现VIP切换后需要尽快恢复至初始状态。
测试:
查看当前状态
192.168.10.103现在是redis master和VIP的所有者,如下图:
192.168.10.104现在是redis slave并且没有VIP,如下图所示:
检测脚本发现redis不可用之后会先尝试启动redis服务
我们先将redis进程杀掉,发现redis会自动启动,如下图:
然后我们测试一下,当进程无法启动时,发生VIP切换后,从redis会不会自动变成主redis。
在当前的主Redis即103机器上,将redis-server命令改名成redis-server.bak 然后杀掉redis进程,模拟redis启动失败。
这时,可以看到VIP已经切换到了104机器上。
看一下104机器上的Redis是否已经变成主,如下图:
可以看到104机器的redis已经由从redis变成了主redis,这时向VIP写入是正常的。
我们的监控应该能够监控到keepalived的VIP切换的状态,并告警,当我们收到告警后进行状态复原,过程如下:
启动redis并指定为104的从redis ---> 启动keepalived ---> 查看状态
查看现在的状态,如下图:
可以看到这个状态和最初始的状态相比而言,只是将192.168.10.103和192.168.10.104两台机器的角色调换了一下。
如此循环往复,实现redis的主从切换高可用。
缺点:
1.在恢复之前两个节点都挂掉的话,应用不可用
2.如果是keepalived自身不可用,也会导致主从切换
优点:
1.切换速度秒级切换
2.VIP非抢占模式,切换过程平滑,恢复不会抢占VIP
3.配置相对简单
如有更好的想法可以讨论。或者更全面的方式也可以讨论。共同学习。
至此,文章结束。