Keepalived部署
当redis的master节点发生故障时,哨兵选举出新的master节点,而对外就需要去观察到这一变化并更改redis配置。为了避免繁琐的步骤,通过keepalived将VIP始终挂载在Redis的master节点,对外只需要访问VIP即可访问Redis,不必跟踪Redis集群的变化。
在A、B、C三台主机上,执行以下步骤:
- keepalived安装:sudo yum -y install keepalived
- 创建并填写配置文件:sudo mkdir -p /etc/keepalived && sudo vi /etc/keepalived/keepalived.conf
- 配置文件如下,其中router_id每台机器不同,可填写IP地址;interface为网卡,可能是eth0、ens33等,通过ip addr查看;virtual_router_id在同一keepalived配置下相同;priority每台机器不同,建议相差1;auth_pass必须相同,unicast指定发送和接收的IP地址;virtual_ipaddress指定VIP地址,需要是未被使用的IP地址,通常在200以上选择:
global_defs {
route_id 11.45.31.70
script_user root
enable_script_security
}
vrrp_script check_master {
script "/etc/keepalived/check_master.sh"
interval 1
weight -5
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 77
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass Wangdf135246!
}
unicast_src_ip 11.45.31.70
unicast_peer {
11.45.31.68
11.45.31.69
}
virtual_ipaddress {
11.45.31.200 dev eth0
}
track_script {
check_master
}
notify_backup "/bin/bash /etc/keepalived/start_redis.sh"
}
- 创建定时检查脚本: sudo vi /etc/keepalived/check_master.sh,需要填入pass和redis服务的端口,定期检查是否是master节点。
#!/bin/sh
redis-cli -p 16379 -a {{redis_pass}} info replication | grep 'role:master'
- 创建master成为slave的执行脚本: sudo vi /etc/keepalived/start_redis.sh,需要填入redis和哨兵服务的端口,如果发现关闭,则尝试重启。
#!/bin/sh
START_REDIS()
{
ss -tnl|grep ':16379 '
if [[ $? -ne 0 ]]
then
redis-server /etc/redis/redis.conf
fi
}
START_SENTINEL()
{
ss -tnl |grep ':26380 '
if [[ $? -ne 0 ]]
then
redis-sentinel /etc/redis/redis-sentinel.conf
fi
}
START_REDIS
START_SENTINEL
- 为脚本添加执行权限:sudo chmod +x /etc/keepalived/*.sh。
-
启动keepalived服务:sudo systemctl start keepalived,通过sudo systemctl status keepalived查看keepalived状态。
-
在redis主节点所在的主机上通过hostname -I可以看到挂载的VIP:11.45.31.200,或者ip addr show eth0也可以看到。
redis哨兵+keepalived测试:
为了测试故障转移,暂时注释start_redis.sh的最后两行,避免redis重启:
1. 停掉redis主节点:redis-cli -p {{redis_port}} -a {{redis_pass}} shutdown
2. 通过hostname -I查看VIP是否已经漂移走
3. 连接redis查看集群信息:redis-cli -p {{redis_port}} -a {{redis_pass}} info replication
4. 去到新的redis主节点,通过hostname -I查看VIP是否自动漂移到主节点
keepalived和redis保活:
- sudo systemctl enable keepalived && sudo systemctl enable redis开启自动启动
- 定时任务:crontab -e; 加入*/1 * * * * sudo systemctl start keepalived和*/1 * * * * sudo sh /etc/keepalived/start_redis.sh,每分钟尝试重启
- sudo systemctl restart crond
- crontab -l查看是否添加成功
- 测试:停止keepalived:sudo systemctl stop keepalived
- 等待1至2分钟,查看keepalived状态:sudo systemctl statuskeepalived