測試redis+keepalived實現簡單的主備切換

keepalived是一個是集羣管理中保證集羣高可用的一個服務軟件,它具備心跳檢測的功能。運用在redis上,則是具備主備切換的控制功能。

keepalived的主備切換方案的設計思想如下:

當 Master 與 Slave 均運作正常時, Master負責服務,Slave負責Standby;

 當 Master 掛掉,Slave 正常時, Slave接管服務,同時關閉主從複製功能;

 當 Master 恢復正常,則從Slave同步數據,同步數據之後關閉主從複製功能,恢復Master身份,於此同時Slave等待Master同步數據完成之後,恢復Slave身份。

 然後依次循環。

 

 下面就來大概講下實現過程:

 

 環境準備

 主:10.15.34.21

 備:10.15.34.22

 VIP(虛擬IP):10.15.34.23,10.15.34.24

 

 0.在主機和備機上分別創建用戶部署redis和keepalived,如用戶路徑:/home/cachedb

 1.在主機和備機上安裝redis(過程略);

 2.在主機和備機上安裝keepalived(過程略);

 3.修改主機和備機上的keepalived的配置文件keepalived.conf(可將原有的配置文件備份成keepalived.conf.bak)

     1)主機的keepalived配置:

 

! Configuration File for keepalived

global_defs {
   router_id LVS_REDIS_TEST_21
}

vrrp_script chk_redis_1 {
    script "/home/cachedb/redis/scripts/redis_check.sh 10.15.34.21 38001"
    interval 10
    timeout 2
    fall 3
}
vrrp_script chk_redis_2 {
    script "/home/cachedb/redis/scripts/redis_check.sh 10.15.34.21 38002"
    interval 10
    timeout 2
    fall 3
}


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 40
    priority 150
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_redis_1
    }
    virtual_ipaddress {
        10.15.34.23 
    }
    notify_master "/home/cachedb/redis/scripts/redis_master.sh 10.15.34.21"
    notify_backup "/home/cachedb/redis/scripts/redis_backup.sh 10.15.34.21 38001 10.15.34.22 38001"
    notify_fault  "/home/cachedb/redis/scripts/redis_fault.sh"
    notify_stop   "/home/cachedb/redis/scripts/redis_stop.sh"
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 41
    priority 150
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_redis_2
    }
    virtual_ipaddress {
        10.15.34.54
    }
    notify_master "/home/cachedb/redis/scripts/redis_master.sh 10.15.34.21 38002"
    notify_backup "/home/cachedb/redis/scripts/redis_backup.sh 10.15.34.21 38002 10.15.34.22 38002"
    notify_fault  "/home/cachedb/redis/scripts/redis_fault.sh"
    notify_stop   "/home/cachedb/redis/scripts/redis_stop.sh"
}

 2)備機的keepalived配置:

 

! Configuration File for keepalived

global_defs {
   router_id LVS_REDIS_TEST
}

vrrp_script chk_redis_1 {
    script "/home/cachedb/redis/scripts/redis_check.sh 10.15.34.22 38001"
    interval 10
    timeout 2
    fall 3
}
vrrp_script chk_redis_2 {
    script "/home/cachedb/redis/scripts/redis_check.sh 10.15.34.22 38002"
    interval 10
    timeout 2
    fall 3
}


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 40
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_redis_1
    }
    virtual_ipaddress {
        10.15.34.33 
    }
    notify_master "/home/cachedb/redis/scripts/redis_master.sh 10.15.34.22 38001"
    notify_backup "/home/cachedb/redis/scripts/redis_backup.sh 10.15.34.22 38001 10.15.34.21 38001"
    notify_fault  "/home/cachedb/redis/scripts/redis_fault.sh"
    notify_stop   "/home/cachedb/redis/scripts/redis_stop.sh"
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 41
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_redis_2
    }
    virtual_ipaddress {
        10.15.34.34
    }
    notify_master "/home/cachedb/redis/scripts/redis_master.sh 10.15.34.22 38002"
    notify_backup "/home/cachedb/redis/scripts/redis_backup.sh 10.15.34.22 38002 10.15.34.21 38002"
    notify_fault  "/home/cachedb/redis/scripts/redis_fault.sh"
    notify_stop   "/home/cachedb/redis/scripts/redis_stop.sh"
}

 

 注意:

a. 備機的keepalived配置的priority要比主機的低;

b. 備機不能有nopreempt屬性;

c.  virtual_router_id  這個主備配置的要對應一致,並且在局域網要唯一,注意使用默認的ID如51時要check改ID有木有被佔用,若有就換一個。

d. interface eth0這個表名虛擬ip漂移的網卡爲eth0,注意應該確保主備都有網卡eth0(沒有的話也可以是eth1,eth2等)。可以用ifconfig來查看,並且主備都應該是相同的網卡eth~

 

配置完以後:

1)啓動主機的redis服務,再在root下啓動keepalived服務;

2)啓動備機的redis服務,再在root下啓動keepalived服務;

3)查看主機的角色:

./redis-cli -h 10.15.34.21 -p 38001



 查看備機的角色:

./redis-cli -h 10.15.34.22 -p 38001



 查看主機的redis-state的log日誌:(Log日誌的位置由redis_*.sh腳本文件裏指定)

 



 再查看備機的redis-state的log日誌:

 

 

 4)嘗試kill掉主機的redis服務,再在備機上查看role角色,得到:



 可以看出它變成master了,而與此同時,它的redis-state.log日誌如下:



 1)我們不妨在備機上用root用戶查看VIP的漂移情況:(虛擬IP的漂移需要一小段時間,不是立刻~)

ip a



 在備機上可以發現虛擬IP的漂移情況。

1)而如果再重啓之前master上的redis服務,會發現它的角色是slave了,這說明,master和salve發生了角色互換。

2)可以再嘗試把備機上的redis服務kill掉,會發現主機上的角色會恢復成master;可以在主機上使用root用戶來運行 ip a命令,會發現虛擬IP被漂移到主機上了。

 

系統日誌位置:/var/log/messages

 

 

 

  • 8a9d57fb-c96d-3f84-95c6-7fa2d3f1043d-thumb.png
  • 大小: 25.8 KB
  • e591a7f8-7921-3cb6-8107-b6561a526d4d-thumb.png
  • 大小: 3.3 KB
  • a92c3a62-7952-368d-934e-a71a3d2a04b0-thumb.png
  • 大小: 3.7 KB
  • 2abae1cb-0c08-3fb0-8b51-55618db1c49b-thumb.png
  • 大小: 22.4 KB
  • 6f725576-e4cd-3eee-8f36-cc05fbb76d3b-thumb.png
  • 大小: 2.9 KB
  • b1d1ba52-8ed1-30f2-806f-f93caf6ba9b8-thumb.png
  • 大小: 16.4 KB
  • 71ee75e1-305a-30a1-8510-f01ce0a54f71-thumb.png
  • 大小: 17.5 KB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章