Keepalived가 작동하지 않나요?

Keepalived가 작동하지 않나요?

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 = 1sysctl 구성을 설정했습니다 . 내 로그에는 서비스 시작 및 중지만 표시됩니까?

답변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

실행 가능하게 만들면 좋습니다.

관련 정보