Hostnamen in der HAProxy-Konfigurationsdatei

Hostnamen in der HAProxy-Konfigurationsdatei

Meine haproxy.cfg-Datei hat zwei Backend-Server mit Hostnamen:

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

Diese Hostnamen sind Teil von Amazon OpsWorks und werden automatisch in /etc/hosts eingefügt, wenn eine Instanz hoch- oder heruntergefahren wird. Wenn ich versuche, HAProxy neu zu starten, während eine der Instanzen heruntergefahren ist, erhalte ich die folgende Fehlermeldung:

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

Gibt es eine Möglichkeit, HAProxy anzuweisen, zu prüfen, ob ein Hostname gültig ist? Wenn er gültig ist, verwenden Sie ihn, wenn nicht, ignorieren Sie ihn.

Antwort1

init-addrIn haproxy >= 1.7 sollten Sie die Option verwenden können , indem Sie „none“ angeben, um die DNS-Auflösung beim Start zu verhindern.

Von demDokumente:

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

Geben Sie an, in welcher Reihenfolge die Adresse des Servers beim Start aufgelöst werden soll, wenn er einen FQDN verwendet. Es wird versucht, die Adresse aufzulösen, indem nacheinander alle in der durch Kommas getrennten Liste aufgeführten Methoden angewendet werden. Die erste erfolgreiche Methode wird verwendet. Wenn das Ende der Liste erreicht wird, ohne dass eine funktionierende Methode gefunden wird, wird ein Fehler ausgegeben. Die Methode „last“ schlägt vor, die Adresse auszuwählen, die in der Statusdatei erscheint (siehe „Server-State-File“). Die Methode „libc“ verwendet den internen Resolver der libc (gethostbyname() oder getaddrinfo(), abhängig vom Betriebssystem und den Build-Optionen). Die Methode „none“ gibt speziell an, dass der Server ohne gültige IP-Adresse im Down-Zustand gestartet werden soll. Es kann nützlich sein, einige DNS-Probleme beim Start zu ignorieren und zu warten, bis die Situation später behoben wird. Schließlich kann eine IP-Adresse (IPv4 oder IPv6) angegeben werden.

Ihre Konfigurationszeile könnte also lauten:

server s1 myhostname init-addr none

Antwort2

Nein, das ist innerhalb von Haproxy nicht möglich.

Laut Handbuch lautet addressdie serverKonfigurationszeile

[...] die IPv4- oder IPv6-Adresse des Servers. Alternativ wird ein auflösbarer Hostname unterstützt [...]

mit anderen Worten, es ist nicht zulässig, in der Konfiguration nicht auflösbare Hostnamen zu verwenden.

Idee:

Jeder Teil der Adresszeichenfolge kann auf eine beliebige Anzahl von Umgebungsvariablen verweisen, indem ihrem Namen ein Dollarzeichen („$“) vorangestellt und sie optional in Klammern („{}“) eingeschlossen werden, ähnlich wie es in der Bourne-Shell gemacht wird.

verwandte Informationen