Hostnames no arquivo de configuração do HAProxy

7

Meu arquivo haproxy.cfg tem dois servidores de backend usando nomes de host:

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

Esses nomes de host fazem parte do Amazon OpsWorks e são injetados em / etc / hosts automaticamente sempre que uma instância é ativada ou desativada. Se eu tentar reiniciar o HAProxy quando uma das instâncias estiver inativa, recebo o erro:

[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.

Existe uma maneira de dizer ao HAProxy para verificar se um nome de host é válido? Se for válido, use-o, se não, ignore-o.

    
por Naijaba 29.12.2013 / 23:56

2 respostas

6

Em haproxy > = 1.7, você deve poder usar a opção init-addr , especificando nenhuma para impedir a resolução de DNS na inicialização.

Dos docs :

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

Indicate in what order the server's address should be resolved upon startup if it uses an FQDN. Attempts are made to resolve the address by applying in turn each of the methods mentionned in the comma-delimited list. The first method which succeeds is used. If the end of the list is reached without finding a working method, an error is thrown. Method "last" suggests to pick the address which appears in the state file (see "server-state-file"). Method "libc" uses the libc's internal resolver (gethostbyname() or getaddrinfo() depending on the operating system and build options). Method "none" specifically indicates that the server should start without any valid IP address in a down state. It can be useful to ignore some DNS issues upon startup, waiting for the situation to get fixed later. Finally, an IP address (IPv4 or IPv6) may be provided.

Então, sua linha de configuração pode ser:

server s1 myhostname init-addr none

    
por 05.12.2016 / 13:19
4

Não, não é possível de dentro do haproxy.

De acordo com o manual, o address na linha de configuração server é

[...] the IPv4 or IPv6 address of the server. Alternatively, a resolvable hostname is supported [...]

em outras palavras, não é permitido usar nomes de host não resolvidos na configuração.

Idéia:

Any part of the address string may reference any number of environment variables by preceding their name with a dollar sign ('$') and optionally enclosing them with braces ('{}'), similarly to what is done in Bourne shell.

    
por 07.01.2014 / 10:37