Мое желаемое поведение haproxy следующее:
libc
разрешать адреса во время начала; в конфигурации не должно быть DNS-серверовlibc
разрешить адреса в время выполнения_
none
к init-addr
libc
к init-addr
Не уверен, что делать (3). В resolvers
раздел вроде поддерживает только DNS, какого черта? Если я добавлю туда сервер имен и resolvers
на мой сервер string
, он начинает работать, но каждые 10 секунд отправляет DNS-запрос. Я не хочу этого. Когда я устанавливаю клиентское соединение, я готов дождаться, пока haproxy разрешит серверную часть, используя libc, синхронно.
Я отключаюсь от сети, убеждаюсь, что серверная часть неразрешима, и перезапускаю haproxy. Затем я подключаюсь к сети, убеждаюсь, что серверная часть теперь разрешима, и пытаюсь использовать клиента. Haproxy по-прежнему отказывается повторять попытку подключения к бэкэнду, пока я не перезапущу или не перезагружу его:
Apr 25 11:34:28 il systemd[1]: Starting HAProxy Load Balancer...
Apr 25 11:34:28 il haproxy[3411]: [WARNING] 114/113428 (3411) : parsing [/etc/haproxy/haproxy.cfg:49] : 'server app1' : could not resolve address 'basinasrv', disabling server.
Apr 25 11:34:28 il haproxy[3411]: Proxy main started.
Apr 25 11:34:28 il haproxy[3411]: Proxy app started.
Apr 25 11:34:28 il haproxy[3411]: [NOTICE] 114/113428 (3411) : New worker #1 (3412) forked
Apr 25 11:34:28 il systemd[1]: Started HAProxy Load Balancer.
...
Apr 25 11:46:21 il haproxy[3412]: 127.0.0.1:45302 [25/Apr/2019:11:46:21.946] main app/<NOSRV> 0/-1/-1/-1/0 503 212 - - SC-- 1/1/0/0/0 0/0 "CONNECT serverfault.com:443 HTTP/1.1"
_
defaults
# never fail on address resolution
default-server init-addr libc,none
#default-server init-addr last,libc,none
option log-health-checks
option httplog
global
ca-base /etc/ssl/certs
maxconn 20000
log /dev-log local0 debug
user haproxy
chroot /usr/share/haproxy
pidfile /run/haproxy.pid
daemon
frontend main
bind :3129
mode http
log global
maxconn 8000
timeout client 30s
default_backend app
backend app
log global
mode http
reqadd Proxy-Authorization:\ Basic\ xxxxxx
timeout connect 5s
timeout server 30s
timeout queue 30s
server app1 basinsrv:443 check ssl verify required ca-file ca-certificates.crt
используйте libc для разрешения адресов во время выполнения; в конфигурации не должно быть DNS-серверов
всегда повторять разрешение имени
Насколько я знаю, это просто невозможно.
Чтобы использовать имена хостов, а не IP-адреса в конфигурации HAproxy, вы либо разрешаете HAproxy выполнять разрешение при запуске (со всеми проблемами, которые вы уже подразумеваете), либо вам необходимо определить один или несколько resolvers
где вы указываете HAproxy, как разрешать эти имена хостов во время работы.
Видеть мой ответ здесь например, с большинством параметров настройки для разрешения DNS.
ОПЦИЯ 1: Вы можете изменить файл hosts для каждого URL-адреса в HAProxy. У меня 2 сервера сбалансированы в HAProxy server1 и server2.
Отредактируйте файл hosts:
# vim /etc/hosts
10.0.0.2 www.server1.com
10.0.0.3 www.server2.com
вы должны добавить в качестве серверов такие же, как и у вас, затем просто перезапустите сервер, и он запустит HAproxy, как шарм, но вам нужно будет изменить свои IP-адреса вручную, если они изменятся.
ВАРИАНТ 2: Используйте crontab для запуска Haproxy после перезагрузки системы.
#crontab -e
@reboot sleep 60 && systemctl start haproxy
ОПЦИЯ 3: Если вы используете кабину Centos / RHEL, установите ее, если нет.
Проверяем, установлен ли он:
rpm -qa | grep cockpit
Включить кабину:
systemctl enable --now cockpit.socket
Перейдите на свой сервер с помощью браузера:
https://<IP>:9090
Затем перейдите к Сервисы меню> Таймеры > Создать таймер
И в меню установите следующее:
Name : Start HAPROXY
Command : systemctl start haproxy
Timer set: On Reboot
60 seconds