VRRP のマルチキャスト (VRRP Advert) を取りこぼすのは、 NIC が悪いのかも、 と思って別NIC を使用するように変更してみたのだが、 相変わらずスタンバイが勝手にアクティブに昇格したがる。
アクティブ側から見ると
Mar 22 12:58:36 asao Keepalived_vrrp: VRRP_Instance(VI) Received lower prio advert, forcing new election Mar 22 12:58:36 asao Keepalived_vrrp: VRRP_Instance(VI) Sending gratuitous ARPs on eth1 for 192.168.0.254
スタンバイ側から見ると
Mar 22 12:58:30 senri Keepalived_vrrp: VRRP_Instance(VI) Transition to MASTER STATE Mar 22 12:58:31 senri Keepalived_vrrp: VRRP_Instance(VI) Entering MASTER STATE Mar 22 12:58:31 senri Keepalived_vrrp: VRRP_Instance(VI) setting protocol VIPs. Mar 22 12:58:31 senri Keepalived_vrrp: VRRP_Instance(VI) Sending gratuitous ARPs on eth1 for 192.168.0.254 Mar 22 12:58:31 senri Keepalived_vrrp: Netlink reflector reports IP 192.168.0.254 added Mar 22 12:58:36 senri Keepalived_vrrp: VRRP_Instance(VI) Received higher prio advert Mar 22 12:58:36 senri Keepalived_vrrp: VRRP_Instance(VI) Entering BACKUP STATE Mar 22 12:58:36 senri Keepalived_vrrp: VRRP_Instance(VI) removing protocol VIPs. Mar 22 12:58:36 senri Keepalived_vrrp: Netlink reflector reports IP 192.168.0.254 removed
tcpdump で確認すると、 VRRP Advert パケットはスタンバイ側に届いているのだが、 keepalived がそれを読めないらしい。 勝手にアクティブになるくせに、 5秒程度で Received higher prio advert して おとなしくスタンバイに戻る。
アクティブになったときに、 (自分がゲートウェイになったつもりで) 本当のゲートウェイへのルーティングを削除してしまうと、 外部への通信が途絶してしまうので、 PPPoE が成功したときのみルーティングを変更するようにした。 これで、勝手にアクティブになったとしても PPPoE が失敗する限りは 実質的に何も変わらないようになった。
keepalived を単なる死活確認にしか使っていない (しかも死んでないのに死んだと誤判断することあり) わけで、 モッタイナイお化けがでそうだ (^^;)。