나는 간단한 연결 유지 두 서버 구성을 가지고 있습니다. 기본/백업 선택은 제대로 작동하지만 백업 서버에서 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 대상 문제가 해결되었습니다.