설정은 다음과 같습니다:
host1-ip iface: ens192: 10.100.0.11/16
host1-gateway: ens192: 10.100.0.1
host1-ip iface: ens224: 10.0.0.11/16
host1-gateway: ens224: 10.0.0.1
host2-ip iface: ens192: 10.100.0.12/16
host2-gateway: ens192: 10.100.0.1
host2-ip iface: ens224: 10.0.0.12/16
host2-gateway: ens224: 10.0.0.1
keepalived-vip1 on iface: ens192: 10.100.100.1
keepalived-vip2 on iface: ens224: 10.0.100.1
dns1: 10.100.0.21
dns2: 10.100.0.22
/etc/netplan/01-netcfg.yaml:
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
ens192:
addresses: [ 10.100.0.11/16 ]
gateway4: 10.100.0.1
nameservers:
search: [ example.com ]
addresses:
- "10.100.0.21"
- "10.100.0.22"
ens224:
addresses: [ 10.0.0.11/16 ]
nameservers:
search: [ example.com ]
addresses:
- "10.100.0.21"
- "10.100.0.22"
이 구성으로
keepalived-vip1 on iface: ens192: 10.100.100.1 <-- works
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- dead, not pingable
논리적으로 ens224 인터페이스에 설정된 게이트웨이가 없으므로 네트워크 스케줄러가 와서 다음 스크립트를 사용하여 iface ens224에 대한 게이트웨이 및 연결 유지 주소를 설정합니다.
/usr/lib/networkd-dispatcher/routable.d/00up:
#!/bin/bash
## INITIALISIERUNG
#Diese Werte werden vom netword-dispatcher an das Skript übergeben
set -x
INTERFACE=${IFACE}
ACTION=${STATE}
case "${INTERFACE}" in
("ens224")
case "${ACTION}" in
("routable")
/bin/ip route add table 2 default via 10.0.0.1
/bin/ip rule add from 10.0.100.1 table 2
;;
(*)
;;
esac
(*)
;;
esac
서버를 다시 시작하면 모든 것이 예상대로 작동합니다. 내 두 주소를 사용하고 다시 시작해도 여전히 작동합니다.
keepalived-vip1 on iface: ens192: 10.100.100.1 <-- works
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- works
이제 몇 가지 명령을 실행합니다.
netplan apply
systemctl restart systemd-networkd
이제 주소가 사라졌습니다(Keepalived 상태 확인은 여전히 성공하므로 장애 조치가 발생하지 않지만 이 경우에는 이 netplan // 네트워크 // 다시 시작 동작을 디버그해야 함).
keepalived-vip1 on iface: ens192: 10.100.100.1 <-- dead, not pingable
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- dead, not pingable
스크립트의 수동 단계를 사용하여 문제를 해결해 보세요.
ip route add table 2 default via 10.0.0.1
ip rule add from 10.0.100.1 table 2
아직:
keepalived-vip1 on iface: ens192: 10.100.100.1 <-- dead, not pingable
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- dead, not pingable
서버를 다시 시작하면 정상으로 돌아옵니다.
keepalived-vip1 on iface: ens192: 10.100.100.1 <-- works
keepalived-vip2 on iface: ens224: 10.0.100.1 <-- works
나는 또한 netplan을 사용해 보았지만 이미Netplan에는 각각 다른 게이트웨이에 연결된 2개의 NIC가 있습니다.하지만 두 번째 keepalived-vip를 작동시킬 수 없습니다.
답변1
내 자신의 질문에 대답하려고 많은 조사 끝에 나는 keepalived 질문을 발견했습니다.https://github.com/acassen/keepalived/issues/836
"systemd-networkd가 자신에 '속하지 않는' 주소를 제거하고 있습니다." keepalived는 ubuntu 또는 rhel의 릴리스에서 이를 감지할 수 없습니다.
나에게 있어서 해결책은 이 상황을 처리할 수 있는 버전 2.0.20으로 연결 유지 컨테이너를 구축하는 것이었습니다.
(keepalived >= v2가 처리할 수 있음)
답변2
또 다른 옵션은 인터페이스에 "중요" 플래그를 추가하는 것입니다.
network:
version: 2
renderer: networkd
ethernets:
ens192:
addresses: [ 10.100.0.11/16 ]
gateway4: 10.100.0.1
nameservers:
search: [ example.com ]
addresses:
- "10.100.0.21"
- "10.100.0.22"
critical: true
ens224:
addresses: [ 10.0.0.11/16 ]
nameservers:
search: [ example.com ]
addresses:
- "10.100.0.21"
- "10.100.0.22"
critical: true