keepalived实现redis主备切换-阿里云开发者社区

开发者社区> 余二五> 正文

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是否正常)

1
2
3
4
5
6
7
8
9
10
11
12
# 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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

1
2
3
4
5
6
7
8
9
10
# 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

 主节点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 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时运行
}


 从节点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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

1
2
# /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)。

1
2
# /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 

 试验目标完成!










本文转自 icenycmh 51CTO博客,原文链接:http://blog.51cto.com/icenycmh/1792494,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载