keepalived实现redis主备切换


试验目标:

1:主redis发生故障时,从redis自动切换为主redis

2:主redis恢复正常后,自动降级为从redis

 

 

试验环境:

     redis192.168.189.138 

     redis192.168.189.131

         VIP192.168.189.123

主从redis均安装了keepalivedredisredis已配置好主从。Redis端口44444。

 

 

1:制作redis监控与主备切换脚本:

 Redis监控脚本:(监控redis是否正常)

# cat /usr/local/scripts/redis_monitor.sh
#!/bin/bash    
ALIVE=$(/home/usr/local/redis/bin/redis-cli -h 192.168.189.138 -p 44444 PING)
if [ "$ALIVE" =="PONG" ]; then
echo $ALIVE
exit 0
else
echo $ALIVE
killall -9 keepalived
service network restart
exit 1
fi


 redis_master脚本:(用于从redis切换成主redis

# cat /usr/local/scripts/redis_master.sh
#!/bin/bash
REDISCLI="/home/usr/local/redis/bin/redis-cli -h 192.168.189.138 -p 44444 "
LOGFILE="/home/usr/local/redis/var/keepalived-redis-state.log"
echo "[master]" >>$LOGFILE
date >> $LOGFILE
echo "Being master....">> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ...">> $LOGFILE
#指定自己为131的slave
$REDISCLI SLAVEOF 192.168.189.13144444 >> $LOGFILE  2>&1
#延迟10秒,用于数据同步
sleep 10                                      
echo "Run SLAVEOF NO ONE cmd..." >> $LOGFILE
#解除自己的slave状态,成为master
$REDISCLI SLAVEOF NO ONE >>$LOGFILE 2>&1


 Redis_backup脚本:(用于主redis切换成从redis

# cat /usr/local/scripts/redis_backup.sh
#!/bin/bash
REDISCLI="/home/usr/local/redis/bin/redis-cli -h 192.168.189.138 -p 44444"
LOGFILE="/home/usr/local/redis/var/keepalived-redis-state.log"
echo "[backup]" >>$LOGFILE
date >> $LOGFILE
echo "Being slave....">> $LOGFILE 2>&1
sleep 15
echo "Run SLAVEOF cmd ...">> $LOGFILE
$REDISCLI SLAVEOF 192.168.189.13144444 >> $LOGFILE  2>&1


以上是主redis上的脚本,从redis上的脚本只要更改脚本中相应的IP

 


2:配置keepalived

 主节点:

# cat /usr/local/keepalived/etc/keepalived/keepalived.conf
global_defs {
 router_id LVS_DEVEL
}
vrrp_script redis_monitor {                ------监控脚本
 script"/usr/local/scripts/redis_monitor.sh"
 interval 2 
 weight 2 
}
vrrp_instance VI_1{ 
 state BACKUP                     --------状态同备用节点一致,为BACKUP
 interface eth0
 virtual_router_id 51 
 mcast_src_ip 192.168.189.138
 nopreempt                      ----------设置不抢占IP
 priority 100                   ----------优先级
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass password_123
}
 track_script {
 redis_monitor                   -------与上面的监控脚本一致
}
 virtual_ipaddress {
 192.168.189.123
 }
 notify_master/usr/local/scripts/redis_master.sh   -------keepalived切换为master时运行
 notify_backup/usr/local/scripts/redis_backup.sh   -------keepalived切换为slave时运行
}


 从节点:

# cat /usr/local/keepalived/etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
global_defs {
 router_id LVS_DEVEL
}
vrrp_script redis_monitor{
 script"/usr/local/scripts/redis_monitor.sh"
 interval 2 
 weight 2 
}
 
vrrp_instance VI_1{ 
 state BACKUP                     ----------与主节点一致,BAKCUP
 interface eth0
 virtual_router_id 51 
 mcast_src_ip 192.168.189.131
 priority 99                     -----优先级小于主节点
 advert_int 1 
 authentication {
 auth_type PASS
 auth_pass password_123
}
 track_script {
 redis_monitor 
}
 virtual_ipaddress {
 192.168.189.123
 }
notify_master/usr/local/scripts/redis_master.sh
notify_backup/usr/local/scripts/redis_backup.sh
}


 

3:开启rediskeepalived

# /usr/local/redis/bin/redis-server /home/usr/local/redis/etc/redis.conf
# /usr/local/keepalived/sbin/keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf


 

4:观察测试

 启动redis-server后,可以看到138主机抢占了VIP123,并且redis角色为Master

wKioL1dsnzeySe3YAAAYhenpztE563.png

wKioL1dsnzfQB7bfAAAbr--Osl4448.png

 131主机没抢占到123IPredis角色为Slave

wKioL1dsn3_B1rh4AAAZuHBzfG0297.png

 

 主节点上配置数据,查看从节点是否同步。

 主:

wKiom1dsn5uiN4yfAAAlvnCxEsw296.png

 从:

wKioL1dsn6OzTj6xAAATAlIVV-w690.png

 以上可看出主备数据同步正常。

 

 1,关闭主redis,查看从节点是否抢占IP,从redis是否变为主redis

 #/home/usr/local/redis/bin/redis-cli -h 192.168.189.138 -p 44444 shutdown

 查看从节点日志:

wKioL1dsn8bgu26eAACsz-sQkXA663.png

 以上日志显示131节点抢占到了IP123,成为keepalived主节点。

wKioL1dsn-zjQmeeAAAgg_V8PuU595.png

 以上日志显示131节点的redis角色变为Master

 

 查看131redis角色状态:

wKiom1dsoB_jU556AAAY_kLHMrw901.png

 131redis已经成功从slave变为master

 

 2,恢复138原主节点的redis状态,测试原来的主redis是否会自动降级为slave

 在主节点上重新开启keepalived,redis(注意要先开启redis,再开启keepalived)。

# /home/usr/local/redis/bin/redis-server /home/usr/local/redis/etc/redis.conf
# /usr/local/keepalived/sbin/keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf

 查看138节点日志:

wKioL1dsoTOAUvHAAAC9Odo-qh4584.png 可以看到keepalived原主节点自动进入BACKUP状态,并未抢占123VIP

wKioL1dsoVDgYHLnAAARQOP9mYY680.png

 Redis角色也自动变更为Slave

 

 查看主备redis角色:

wKiom1dsoXPhLBB7AAAaJqjsXaU677.png

wKiom1dsoXTydtWKAAAZLcb7Kkk651.png 

 试验目标完成!


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值