一、nopreempt will not work
在使用HA技術時,有時會將nopreempt選項加入到配置文件中,用來防止主備切換時的抖動。但是,在一些特殊的情況下,這個選項會失效,導致切換過程中出現抖動。那麼,為什麼會出現這種情況呢?
造成這個問題的原因是因為在主備切換的過程中,如果新的主機的資源租約與之前的備機相等,那麼雖然執行了一次切換操作,但是系統沒有真正的切換,此時nopreempt選項就會失效。
解決這種問題的方法很簡單,只需要在備機的資源租約中設置優先順序高一些即可。這樣,在切換時,新的主機的資源租約將會被賦值為更高的優先順序,從而真正的完成主備切換。
二、nopreempt keepalived
在使用keepalived時,如果需要使用nopreempt選項來實現主備抖動的控制,需要注意選項的使用。具體來說,即使用nopreempt選項之後,在某些情況下keepalived也不會按照預期的方式工作。
造成這個問題的原因是在keepalived的設計中,他是不能夠處理來自同等優先順序的兩個節點同時宣稱自己是主節點的問題,因此即使使用了nopreempt選項,如果備機的Keepalived配置文件中的priority與主機相等,那麼在某些情況下,備機仍有可能搶佔到主機的位置。
解決這個問題的方法是,將備機的Keepalived配置文件中的priority縮小1,這將確保備機的優先順序比主機的優先順序小1,從而在主機故障時,備機可以佔據主機的位置。
三、nopreempt的使用
在平常的使用過程中,我們可以根據實際需要來選擇是否使用nopreempt選項。當我們需要抑制無端的主備切換時,可以考慮使用nopreempt選項。但是,在使用nopreempt選項時,我們需要認真檢查配置是否正確,以確保選項的可用性。
下面是使用nopreempt選項的示例代碼:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.1/24 dev eth0
}
nopreempt
}
在上面的示例代碼中,我們使用了nopreempt選項,以阻止不必要的主備切換。同時我們設置了優先順序為101,這樣可以確保該節點成為主節點。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/259578.html
微信掃一掃
支付寶掃一掃