用作主从failover,
192.168.56.101:6380工作机器1 ;部署redis1 keepalived 1
192.168.56.102:6380工作机器2;部署redis1 keepalived 1
192.168.56.103对外开放的访问VIP
效果:两台机器中有任何一台keepalived挂掉后,另外一台keepalived会争抢VIP,同时运行切换脚本,保证了VIP服务的可用性
客户端只要连接VIP就可以透明使用redis.
缺点:如果只是redis挂掉,keepalived没挂掉,则切换不成功
-----------------------------------keepalived配置-----------------------------------------
文件/etc/keepalived/keepalived.conf
vrrp_script chk_redis {
script "/home/proxy/keep2machine2redis/scripts/redis_check.sh" 2
interval 2
}
vrrp_instance VI_1 {
state SLAVE
interface eth3
virtual_router_id 51
priority 150
nopreempt
authentication {
auth_type PASS
auth_pass redis
track_script {
chk_redis
}
virtual_ipaddress {
192.168.56.103
}
notify_master /home/proxy/keep2machine2redis/scripts/redis_master.sh
notify_backup /home/proxy/keep2machine2redis/scripts/redis_backup.sh
notify_fault /home/proxy/keep2machine2redis/scripts/redis_fault.sh
notify_stop /home/proxy/keep2machine2redis/scripts/redis_stop.sh
}
redis状态与主从切换脚本
/home/proxy/keep2machine2redis/scripts
检测存活脚本
#!/bin/bash
echo "going PING 6380" >>/home/proxy/keep2machine2redis/log.txt
ALIVE=`/home/cache/redis6380/src/redis-cli -p 6380 PING`
echo "6380" $ALIVE >>/home/proxy/keep2machine2redis/log.txt
if [ "$ALIVE" == "PONG" ]; then
echo $ALIVE
exit 0
else
echo $ALIVE
exit 1
fi
切换本机redis为主机脚本
#!/bin/bash
REDISCLI="/home/cache/redis6380/src/redis-cli -p 6380"
LOGFILE="/home/proxy/keep2machine2redis/log.txt"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.56.102 6380 >> $LOGFILE 2>&1
sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
切换本机为从 脚本
#!/bin/bash
REDISCLI="/home/cache/redis6380/src/redis-cli -p 6380 "
LOGFILE="/home/proxy/keep2machine2redis/log.txt"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave....wait" >> $LOGFILE 2>&1
sleep 5
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.56.102 6380 >> $LOGFILE 2>&1
需要解决的问题:
1.keepalived是多久检测一次redis状态,是否可以心跳?
2.我试图在同一个keepalived配置中配置两个vrrp实例,但是这样启动有问题,查看ip addr发现vip没绑定上
3.我本来是用keepalived -f configFile.conf 的启动方式,但是查看/etc/log/message 发现三个进程中有一个child process faild,启动失败,
后来是用默认的配置文件位置就好了。。。。