私は単純な接続を維持する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セクションは、keepalived
IPアドレス(および場合によっては(この設定ではない)設定または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ターゲットの問題が修正されました。