CentOS 8에서 keepalived를 사용하여 HAProxy용 HA를 생성하려고 하는데 이것이 제가 가지고 있는 것입니다:
Virtual IP: 10.10.10.14
HAProxy Server 1: 10.10.10.15
HAProxy Server 2: 10.10.10.18
그리고 내 연결 유지 구성주인:
vrrp_script chk_haproxy {
script "killall -0 haproxy" # check the haproxy process
interval 2 # every 2 seconds
weight 2 # add 2 points if OK
}
vrrp_instance VI_1 {
interface ens190
state MASTER
virtual_router_id 51
priority 101
virtual_ipaddress {
10.10.10.14
}
track_script {
chk_haproxy
}
}
연결 유지 구성 활성화됨지원:
vrrp_script chk_haproxy {
script "killall -0 haproxy" # check the haproxy process
interval 2 # every 2 seconds
weight 2 # add 2 points if OK
}
vrrp_instance VI_1 {
interface ens165
state BACKUP
virtual_router_id 51
priority 100
virtual_ipaddress {
10.10.10.14
}
track_script {
chk_haproxy
}
}
하지만 HAProxy 프로세스를 중지하려고 할 때마다 백업 서버에 연결되지 않습니다. 대신 최근에 연결 유지를 시작한 서버에만 적용됩니다.
내 ip -a
명령은 다음과 같은 것을 반환합니다주인:
inet 10.10.10.15/24 brd 10.10.10.255 scope global noprefixroute ens190
inet 10.10.10.14/32 scope global ens190
~을 위한지원:
inet 10.10.10.18/24 brd 10.10.10.255 scope global noprefixroute ens165
inet 10.10.10.14/32 scope global ens165
뭐가 문제 야? 또한 net.ipv4.ip_nonlocal_bind = 1
sysctl 구성을 설정했습니다 . 내 로그에는 서비스 시작 및 중지만 표시됩니까?
답변1
내 구성은 작동하지만 가이드에는 방화벽 규칙에 대한 언급이 없습니다. 그래서 저는 몇 가지 조사를 했고 sudo firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="vrrp" accept'
이 설정이 작동하도록 했습니다.
답변2
HAProxy는 구성 로드가 완료된 후 소켓에 바인딩됩니다. 그런 다음 나중에 Keepalived에 의해 네트워크 인터페이스에서 제거될 수 있는 IP 주소인 10.10.10.14를 수신합니다.
그러나 Keepalived의 다른 인스턴스가 IP 주소를 추가하면 호스트의 HAProxy는 해당 주소를 자동으로 수신하지 않습니다. Keepalived가 전환되면 HAProxy를 다시 로드해야 합니다.
이렇게 하려면 다음 섹션에 알림 스크립트를 추가해야 할 수 있습니다 vrrp_instance VI_1
.
notify "/usr/local/bin/toggle_keepalived"
이 파일은 /usr/local/bin/toggle_keepalived
예를 들어 systemd 시스템에서 HAProxy를 다시 로드하는 쉘 스크립트입니다.
#!/bin/bash
systemctl reload haproxy
실행 가능하게 만들면 좋습니다.