HAProxy 구성 파일의 호스트 이름

HAProxy 구성 파일의 호스트 이름

내 haproxy.cfg 파일에는 호스트 이름을 사용하는 두 개의 백엔드 서버가 있습니다.

server ops-ca-revealv2e-prod-1 ops-ca-revealv2e-prod-1:443 cookie ops-ca-revealv2e-prod-1 ssl weight 1 maxconn 512 check

server ops-ca-revealv2e-prod-2 ops-ca-revealv2e-prod-2:443 cookie ops-ca-revealv2e-prod-2 ssl weight 1 maxconn 512 check

이러한 호스트 이름은 Amazon OpsWorks의 일부이며 인스턴스가 시작되거나 중단될 때마다 자동으로 /etc/hosts에 삽입됩니다. 인스턴스 중 하나가 다운되었을 때 HAProxy를 다시 시작하려고 하면 다음 오류가 발생합니다.

[ALERT] 362/225440 (27202) : parsing [/opt/haproxy-ssl/haproxy.cfg:42] : 'server ops-ca-revealv2e-prod-2' : invalid address: 'ops-ca-revealv2e-prod-2' in 'ops-ca-revealv2e-prod-2:443'
[ALERT] 362/225440 (27202) : Error(s) found in configuration file : /opt/haproxy-ssl/haproxy.cfg
[ALERT] 362/225440 (27202) : Fatal errors found in configuration.

호스트 이름이 유효한지 확인하도록 HAProxy에 지시하는 방법이 있습니까? 유효하면 사용하고, 그렇지 않으면 무시하십시오.

답변1

haproxy >= 1.7에서는 시작 시 DNS 확인을 방지하기 위해 없음을 지정하여 옵션을 사용할 수 있어야 합니다 init-addr.

로부터문서:

init-addr {last | libc | none | <ip>},[...]*

FQDN을 사용하는 경우 시작 시 서버 주소를 어떤 순서로 확인해야 하는지 지정합니다. 쉼표로 구분된 목록에 언급된 각 방법을 차례로 적용하여 주소를 확인하려고 시도합니다. 성공한 첫 번째 방법이 사용됩니다. 작업 방법을 찾지 못한 채 목록 끝에 도달하면 오류가 발생합니다. "last" 메소드는 상태 파일("server-state-file" 참조)에 나타나는 주소를 선택하도록 제안합니다. "libc" 메소드는 libc의 내부 해석기(운영 체제 및 빌드 옵션에 따라 gethostbyname() 또는 getaddrinfo())를 사용합니다. "없음" 방법은 특히 다운 상태에서 유효한 IP 주소 없이 서버를 시작해야 함을 나타냅니다. 시작 시 일부 DNS 문제를 무시하고 나중에 상황이 수정될 때까지 기다리는 것이 유용할 수 있습니다. 마지막으로 IP 주소(IPv4 또는 IPv6)가 제공될 수 있습니다.

따라서 구성 라인은 다음과 같을 수 있습니다.

server s1 myhostname init-addr none

답변2

아니요, haproxy 내에서는 불가능합니다.

매뉴얼에 따르면 구성 라인은 다음과 같습니다 address.server

[...] 서버의 IPv4 또는 IPv6 주소입니다. 또는 확인 가능한 호스트 이름이 지원됩니다 [...]

즉, 구성에서 확인할 수 없는 호스트 이름을 사용할 수 없습니다.

아이디어:

주소 문자열의 모든 부분은 Bourne 셸에서 수행되는 것과 유사하게 이름 앞에 달러 기호('$')를 추가하고 선택적으로 중괄호('{}')로 묶어서 여러 환경 변수를 참조할 수 있습니다.

관련 정보