LVSのフェイルオーバーのテスト時に/etc/init.d/networking restartを行うと、 keepalivedが次の様なエラーを吐く場合がある。

Jun  5 01:56:11 192.168.10.251 Keepalived_vrrp: Netlink: filter function error
Jun  5 01:56:11 192.168.10.251 Keepalived_vrrp: Netlink: filter function error

よくよく調べてみると、次の.1q vlanインターフェースが悪さをしているようである。

6: eth1.31@eth1: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc noqueue
    link/ether 00:07:e9:cc:80:b0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.1/24 brd 192.168.20.255 scope global eth1.31

vlan インターフェースは、ifdownでインターフェースごと無くなってしまう。これは、/etc/network/if-post-down.d/vlanの中で、vconfig rem $IFACE
の様に、明示的に、vlanインターフェースを削除しているからである。

ifupで再びインターフェースをアップすると、

/etc/network/if-pre-up.d/vlanの次の部分で、

        ip link set up dev $IF_VLAN_RAW_DEVICE
        vconfig add $IF_VLAN_RAW_DEVICE $VLANID
 再度インターフェースが作られるが、元々開いてあったNetlinkソケットを用いた通信はうまく行かなくなってしまうようである。

デバイスが消えてしまったら、keepalivedの中でNetlinkソケットを再度開いてやるのが本筋の様な気がするが、そうは言ってもどう直したら良いかわからないので、ifdown時に、keepalivedにSIGHUP、SIGTERM等を送ってやった方が良さそうである。