Keepalived 不需要转换为 master

Keepalived 不需要转换为 master

我正在使用 Cloudformation 在 Amazon 中启动 2 个 EC2 实例,第二个实例在第一个实例启动后约 30 秒启动。

配置如下:

实例 2

    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    unicast_peer {
        172.17.16.10
    }

实例 1

    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    unicast_peer {
        172.17.16.11
    }

两者都配置了相同的成功健康检查。

我设置了相同的优先级,这样就不会出现抖动问题(如果 MASTER 发生故障,则将 BACKUP 转换为新的 MASTER,但如果 OLD MASTER 恢复正常,则保持原样)。

该问题发生在初始启动期间:

  • 第一个实例启动并进入主状态
  • 第二个实例在大约 30 秒后启动,最初进入备份状态,但由于某种原因,之后转换到主状态。

两者应该具有相同的优先级,那么为什么呢?

我注意到,有关内核 IPVS 和主机指纹计算的日志消息仅在 keepalived 启动后才会打印。这让我认为 keepalived 是系统上第一个使系统在网络接口上交换数据包并以某种方式触发不必要的故障转移的软件。

此外,keepalived 启动后,实例 2 立即进入备份状态:

Nov 17 17:43:58 ip-172-17-16-11 Keepalived_vrrp[2403]: Using LinkWatch kernel netlink reflector...
Nov 17 17:43:58 ip-172-17-16-11 Keepalived_vrrp[2403]: VRRP_Instance(VI_1) Entering BACKUP STATE
Nov 17 17:43:58 ip-172-17-16-11 Keepalived_vrrp[2403]: VRRP sockpool: [ifindex(2), proto(112), unicast(1), fd(15,16)]

而实例 1 只有在内核 IPVS 消息和指纹之后才能成为 MASTER:

Nov 17 17:44:28 ip-172-17-16-10 kernel: [  157.650360] IPVS: Registered protocols (TCP, UDP, SCTP, AH, ESP)
Nov 17 17:44:28 ip-172-17-16-10 kernel: [  157.654035] IPVS: Connection hash table configured (size=4096, memory=64Kbytes)
Nov 17 17:44:28 ip-172-17-16-10 kernel: [  157.658356] IPVS: Creating netns size=2048 id=0
Nov 17 17:44:28 ip-172-17-16-10 kernel: [  157.661163] IPVS: ipvs loaded.
Nov 17 17:44:28 ip-172-17-16-10 Keepalived_healthcheckers[2391]: Opening file '/etc/keepalived/keepalived.conf'.
Nov 17 17:44:28 ip-172-17-16-10 Keepalived_healthcheckers[2391]: Configuration is using : 5174 Bytes
Nov 17 17:44:28 ip-172-17-16-10 Keepalived_healthcheckers[2391]: Using LinkWatch kernel netlink reflector...
Nov 17 17:44:28 ip-172-17-16-10 Keepalived_vrrp[2392]: VRRP_Script(chk_haproxy) succeeded
Nov 17 17:44:29 ip-172-17-16-10 ec2:
Nov 17 17:44:29 ip-172-17-16-10 ec2: #############################################################
Nov 17 17:44:29 ip-172-17-16-10 ec2: -----BEGIN SSH HOST KEY FINGERPRINTS-----

Nov 17 17:44:29 ip-172-17-16-10 ec2: -----END SSH HOST KEY FINGERPRINTS-----
Nov 17 17:44:29 ip-172-17-16-10 ec2: #############################################################
Nov 17 17:44:29 ip-172-17-16-10 Keepalived_vrrp[2392]: VRRP_Instance(VI_1) Transition to MASTER STATE

-- 测试配置:

  • 我停止了keepalived
  • 我在实例 1 上启动 keepalived,它转到 MASTER。
  • 我在实例 2 上启动 keepalived,它进入备份状态并且不会触发故障转移。

一切看起来都很好。

答案1

按照设计,在优先级相同的情况下,VRRP 会选择主地址最高的节点作为 MASTER。

https://www.juniper.net/techpubs/en_US/junose11.3/topics/concept/vrrp-router-election-rules.html http://www.ietf.org/rfc/rfc3768.txt

If the Priority in the ADVERTISEMENT is equal to the local
            Priority and the primary IP Address of the sender is greater
            than the local primary IP Address, then:

             o Cancel Adver_Timer
             o Set Master_Down_Timer to Master_Down_Interval
             o Transition to the {Backup} state

相关内容