Я пытаюсь запустить API плоскости данных при загрузке HAProxy, используя инструкции, подробно описанные здесь: https://www.haproxy.com/documentation/hapee/1-9r1/configuration/dataplaneapi/#using-the-haproxy-process-manager
Моя проблема в том, что я получаю следующее:
$ curl -X GET --user admin:mypassword "http://localhost:5555/v1/services/haproxy/info"
{"code":500,"message":"dial unix unix@/run/haproxy-master.sock: connect: no such file or directory"}
Что странно, потому что файл существует здесь:
$ ls -lah /run/haproxy-master.sock
srwxr-xr-x 1 root root 0 Jul 31 18:05 /run/haproxy-master.sock
И процесс выполняется от имени пользователя root, поэтому он должен его видеть:
$ sudo systemctl status haproxy.service
[sudo] password for user:
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-07-31 18:05:49 -05; 18h ago
Docs: man:haproxy(1)
file:/usr/share/doc/haproxy/configuration.txt.gz
Process: 22227 ExecReload=/bin/kill -USR2 $MAINPID (code=exited, status=0/SUCCESS)
Process: 22739 ExecReload=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=1/FAILURE)
Process: 24307 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS)
Main PID: 24335 (haproxy)
Tasks: 12 (limit: 4418)
CGroup: /system.slice/haproxy.service
├─24335 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
├─24339 dataplaneapi --host 0.0.0.0 --port 5555 --haproxy-bin /usr/sbin/haproxy --config-file /etc/haproxy/haproxy.cfg --reload-cmd systemctl reload haproxy --reload-delay 5 --userlist controller
└─24341 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
Jul 31 18:05:47 lb01.private systemd[1]: Starting HAProxy Load Balancer...
Jul 31 18:05:48 lb01.private haproxy[24335]: [WARNING] 211/180548 (24335) : parsing [/etc/haproxy/haproxy.cfg:33]: 'option httplog' overrides previous 'log-format' in 'defaults' section.
Jul 31 18:05:48 lb01.private haproxy[24335]: [WARNING] 211/180548 (24335) : parsing [/etc/haproxy/haproxy.cfg:117]: keyword 'forceclose' is deprecated in favor of 'httpclose', and will not be supported by future versions.
Jul 31 18:05:49 lb01.private haproxy[24335]: [NOTICE] 211/180548 (24335) : New program 'api' (24339) forked
Jul 31 18:05:49 lb01.private haproxy[24335]: [NOTICE] 211/180548 (24335) : New worker #1 (24341) forked
Jul 31 18:05:49 lb01.private systemd[1]: Started HAProxy Load Balancer.
Jul 31 18:05:51 lb01.private haproxy[24335]: dial unix unix@/run/haproxy-master.sock: connect: no such file or directory
Jul 31 18:06:40 lb01.private haproxy[24335]: dial unix unix@/run/haproxy-master.sock: connect: no such file or directory
Aug 01 12:36:07 lb01.private haproxy[24335]: dial unix unix@/run/haproxy-master.sock: connect: no such file or directory
Вот что, на мой взгляд, имеет отношение к моему файлу haproxy.cfg:
global
stats socket /run/haproxy.sock user haproxy group haproxy mode 660 level admin
userlist controller
user admin insecure-password mypassword
program api
command dataplaneapi --host 0.0.0.0 --port 5555 --haproxy-bin /usr/sbin/haproxy --config-file /etc/haproxy/haproxy.cfg --reload-cmd "systemctl reload haproxy" --reload-delay 5 --userlist controller
Я полностью понимаю, что в объявлении «stats socket» указано /run/haproxy.sock, я попытался изменить его на /run/haproxy-master.sock и перезапустить его. Та же ошибка. Не знаете, откуда берется файл haproxy-master.sock, предполагаете, что это файл по умолчанию?
/run/haproxy-master.sock
запускается как сокет, когда systemd запускает haproxy:
24335 usr / sbin / haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
Если не настроено в командной строке, dataplaneapi
забирает его, используя переменные env, переданные дочернему процессу от мастера, в частности из HAPROXY_MWORKER
и HAPROXY_MASTER_CLI
переменные. Почему это не читается, я не понимаю.
Наткнулся на ту же проблему ...
Похоже, на это влияют предустановки systemd. Замечено, что проблема исчезла при запуске haproxy из консоли напрямую без дополнительных параметров.
# grep PRETTY /etc/os-release
PRETTY_NAME="Ubuntu 18.04.3 LTS"
# systemctl cat haproxy.service | grep sock
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid" "EXTRAOPTS=-S /run/haproxy-master.sock"
# haproxy -d -f /etc/haproxy/haproxy.cfg
Вы можете проверить это, сравнив активные сокеты unix при запуске haproxy из cli или с помощью systemd, используя
# netstat -axe | grep haproxy.*sock
Внесите соответствующие изменения :)