1. 程式人生 > >使用keepalived實現redis主從切換

使用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)
192.168.10.103和192.168.10.104的keepalived配置如下:

[[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.配置相對簡單

如有更好的想法可以討論。或者更全面的方式也可以討論。共同學習。

至此,文章結束。