使用keepalived實現redis主從切換
安裝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) |
[[email protected] keepalived]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email {[email protected] } notification_email_from [email protected] 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" }
涉及到的兩個指令碼內容如下:
[[email protected] 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
[[email protected] 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.配置相對簡單
如有更好的想法可以討論。或者更全面的方式也可以討論。共同學習。
至此,文章結束。