Keepalived避免无用的failover

通常情况下,当主挂掉时,从会自动切换为主。当主上的服务恢复时,则会再次抢占成为主,这里就发生了一次不必要的failover。

为了解决上述情况,可以在主的配置中vrrp_instance增加nopreempt。

实验

注意:确保实验机器防火墙不会过滤掉vrrp协议的数据包。

主配置:

    1 ! Configuration File for keepalived
 2 
 3 global_defs {
 4    router_id LVS_DEVEL_TEST
 5 }
 6 
 7 vrrp_script chk_httpd {
 8     script "systemctl status httpd.service > /dev/null 2>&1"
 9     interval 2
10     weight -2
11 }
12 
13 vrrp_instance VI_1 {
14     state MASTER
15     interface eno16777736
16     virtual_router_id 51
17     priority 100
18     nopreempt
19     advert_int 1
20     mcast_src_ip 192.168.213.128
21     track_script {
22         chk_httpd
23     }
24     authentication {
25         auth_type PASS
26         auth_pass 1111
27     }
28     virtual_ipaddress {
29         192.168.213.200
30     }
31 }

从配置:

    1 ! Configuration File for keepalived
 2 
 3 global_defs {
 4    router_id LVS_DEVEL_TEST
 5 }
 6 
 7 vrrp_script chk_httpd {
 8     script "systemctl status httpd.service > /dev/null 2>&1"
 9     interval 2
10     weight -2
11 }
12 
13 vrrp_instance VI_1 {
14     state BACKUP
15     interface eno16777736
16     virtual_router_id 51
17     priority 99
18     advert_int 1
19     mcast_src_ip 192.168.213.129
20     track_script {
21         chk_httpd
22     }
23     authentication {
24         auth_type PASS
25         auth_pass 1111
26     }
27     virtual_ipaddress {
28         192.168.213.200
29     }
30 }

以下是 sudo tcpdump vrrp -i eno16777736命令输出。

正常情况下:

128挂掉,129切换为主:

128恢复,并未抢占成为主,仍然是129对外提供服务。

但这里有一个问题,如果此时129挂掉,128不会抢占成为主!为了解决这个问题,可以在129挂掉时,将129上的Keepalived服务停止。如下修改129配置的vrrp_script:

systemctl status httpd.service > /dev/null 2>&1;[ $? -ne 0 ] || systemctl stop keepalived.service

现在,当129挂掉时,128能够抢占成为主,不过再恢复129时,需要重启Keepalived服务:

你可能感兴趣的:(keepalived,Failover,无用)