keepalived ホストへのパスがありません。ファイアウォールに問題がありますか?

keepalived ホストへのパスがありません。ファイアウォールに問題がありますか?

私は単純な接続を維持する2つのサーバー構成を持っています。デフォルト/バックアップの選択は正しく機能しますが、バックアップサーバーからVIPに接続できません。接続しようとすると、プライマリサーバーはバックアップサーバーのARP要求とプライマリサーバーの応答を表示できますが、バックアップサーバーは要求のみを表示できます(つまり、プライマリサーバーのARP応答を見ることはできません)。

マスターコントロール keepalived.conf:

vrrp_script haproxy-check {
    script "/usr/bin/pgrep python"
    interval 5
}
 
vrrp_instance haproxy-vip {
    state MASTER
    priority 101
    interface eth0
    virtual_router_id 47
    advert_int 3
 
    unicast_src_ip 192.168.122.4
    unicast_peer {
        192.168.122.9
    }
 
    virtual_ipaddress {
        192.168.122.250
    }
 
    track_script {
        haproxy-check weight 20
    }
}

keepalived.confをバックアップします。

vrrp_script haproxy-check {
    script "/usr/bin/pgrep python"
    interval 5
}

vrrp_instance haproxy-vip {
    state BACKUP
    priority 99
    interface eth0
    virtual_router_id 47
    advert_int 3

    unicast_src_ip 192.168.122.9
    unicast_peer {
        192.168.122.4
    }

    virtual_ipaddress {
        192.168.122.250
    }

    track_script {
        haproxy-check weight 20
    }
}

マスターのIPアドレス:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1458 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:9e:e8:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.4/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
       valid_lft 55567sec preferred_lft 55567sec
    inet 192.168.122.250/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::571a:df5f:930c:2b57/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

そしてバックアップ中:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1458 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:2e:59:3d brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.9/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
       valid_lft 79982sec preferred_lft 79982sec
    inet6 fe80::f816:3eff:fe2e:593d/64 scope link 
       valid_lft forever preferred_lft forever

マスターのtcpdump:

# tcpdump -nni eth0 arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:44:06.299398 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28
11:44:06.299435 ARP, Reply 192.168.122.250 is-at fa:16:3e:9e:e8:18, length 28
11:44:07.298939 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28
11:44:07.298985 ARP, Reply 192.168.122.250 is-at fa:16:3e:9e:e8:18, length 28
11:44:08.300920 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28
11:44:08.300954 ARP, Reply 192.168.122.250 is-at fa:16:3e:9e:e8:18, length 28
11:44:09.303039 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28
11:44:09.303062 ARP, Reply 192.168.122.250 is-at fa:16:3e:9e:e8:18, length 28

そしてバックアップから:

# tcpdump -nni eth0 arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:44:39.430367 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28
11:44:40.431810 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28
11:44:41.433847 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28
11:44:42.435979 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28
11:44:43.437814 ARP, Request who-has 192.168.122.250 tell 192.168.122.9, length 28

ファイアウォールの問題ではないようです(iptables -L | grep -i arp何も表示されません)。問題を引き起こす可能性のあるカーネル設定はありますか?デバッグに関する提案はありますか?

オペレーティングシステムはCentos 7、keepalivedは2.1.5です。

答え1

この問題は他の方の質問に言及されたので知りました。GitHub。私はこの質問を見たことを覚えていません。keepalived- ユーザーkeepalivedおそらく、関連する質問を投稿するのに最適な場所でしょう。

VRRPセクションは、keepalivedIPアドレス(および場合によっては(この設定ではない)設定またはnftablesルールiptables)を設定します。完了すると、keepalivedカーネルはすべてのパケットの送受信を処理します。

設定に問題はありませんkeepalived

あなたの問題は、範囲外のバックアップシステムでARP応答が受信されないことに関連しているようです。keepalivedしたがって、応答が受信されない理由を理解するには、他の場所を調べる必要があります。

答え2

あるサーバーの同じVLANにある複数のVIPと非常によく似た問題がありました。

https://github.com/acassen/keepalived/issues/1876

doc/source/software_design.rstで説明されているように

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 1

IPターゲットの問題が修正されました。

関連情報