High-Availability

Keepalived 不尊重 nopreempt

  • April 18, 2015

我正在使用 Keepalived 在主/從配置中管理兩個 Redis 實例。我遇到的情況是,如果 Keepalived 在主伺服器(具有更高優先級的伺服器)上終止,則備份伺服器將接管為主伺服器。但是,當在較高優先級的機器上重新啟動 Keepalived 時,備份伺服器立即將 Master 狀態讓給較高優先級的機器,這有效地刷新了 Redis 記憶體。

我嘗試將 nopreempt 指令添加到我的 keepalived.conf 中,但這種行為仍在發生。

以下是來自備份(較低優先級)伺服器的 keepalived.conf。

global_defs{
       router_id redis_server_2
}

vrrp_script chk_redis {
       script "killall -0 redis-server"
       interval 5
}

vrrp_instance VI_1{
       interface eth0
       virtual_router_id 100
       priority 200
       advert_int 1
       state BACKUP
       nopreempt
       track_script {
               chk_redis
       }

       virtual_ipaddress {
               10.19.105.229
       }

       notify_master "/usr/bin/sudo /var/lib/redis/redis.sh -m"

       notify_backup "/usr/bin/sudo /var/lib/redis/redis.sh -s"

       notify_fault "/usr/bin/sudo /var/lib/redis/redis.sh -k"

好的,我想了幾分鐘後解決了。

在較高優先級框上的 VRRP_instance V1 下,我有以下內容:

   state MASTER

現在, nopreempt 沒有被尊重,因為更高優先級的盒子開始作為主人。較低優先級的框看到具有較高優先級的主機並切換到從機模式。通過將該行更改為

   state BACKUP

較高優先級的盒子作為從機開始,看到具有較高優先級的主機,並保持從機。做完了。

引用自:https://serverfault.com/questions/429576