Имена хостов в файле конфигурации 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 вы сможете использовать эту init-addrопцию, указав none, чтобы предотвратить разрешение DNS при запуске.

Издокументы:

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

Укажите, в каком порядке должен быть разрешен адрес сервера при запуске, если он использует полное доменное имя. Предпринимаются попытки разрешить адрес, применяя по очереди каждый из методов, упомянутых в списке, разделенном запятыми. Используется первый успешный метод. Если достигнут конец списка без нахождения рабочего метода, выдается ошибка. Метод "last" предлагает выбрать адрес, который появляется в файле состояния (см. "server-state-file"). Метод "libc" использует внутренний преобразователь libc (gethostbyname() или getaddrinfo() в зависимости от операционной системы и параметров сборки). Метод "none" специально указывает, что сервер должен запускаться без какого-либо допустимого IP-адреса в нерабочем состоянии. Может быть полезно игнорировать некоторые проблемы DNS при запуске, ожидая, пока ситуация будет исправлена ​​позже. Наконец, может быть предоставлен IP-адрес (IPv4 или IPv6).

Итак, ваша строка конфигурации может быть такой:

server s1 myhostname init-addr none

решение2

Нет, это невозможно изнутри haproxy.

Согласно руководству, addressв serverстроке конфигурации указано:

[...] IPv4 или IPv6 адрес сервера. В качестве альтернативы поддерживается разрешаемое имя хоста [...]

Другими словами, в конфигурации не допускается использование неразрешимых имен хостов.

Идея:

Любая часть адресной строки может ссылаться на любое количество переменных среды, предваряя их имена знаком доллара ('$') и при желании заключая их в фигурные скобки ('{}'), аналогично тому, как это делается в оболочке Bourne.

Связанный контент