安装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) |
192.168.10.103和192.168.10.104的keepalived配置如下:
[root@jia3 keepalived]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
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"
}
涉及到的两个脚本内容如下:
[root@jia3 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
[root@jia3 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.配置相对简单
如有更好的想法可以讨论。或者更全面的方式也可以讨论。共同学习。
至此,文章结束。