HAProxy не имеет доступного сервера

HAProxy не имеет доступного сервера

Я пытаюсь настроить очень простой балансировщик нагрузки HTTP с бэкэндами node.js в CentOS 7. Все бэкэнды представляют собой HTTP-серверы.

Если я настраиваю и бэкенд на прослушивание порта 80, и HAProxy на прослушивание порта 80 и использование порта 80 на бэкенде, все работает просто отлично. Вот как выглядит файл конфигурации в такой конфигурации:

global
    log         127.0.0.1 local2 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     256
    user        haproxy
    group       haproxy
    daemon

defaults
    mode               http
    log                global
    option             httplog
    timeout connect    10s
    timeout client     30s
    timeout server     30s

frontend http-in
    bind               :80
    default_backend    backend_servers
    option             forwardfor

backend backend_servers
    balance            roundrobin
    server             backend1 10.0.4.51:80 check
#    server             backend2 10.0.4.52:80 check
#    server             backend3 10.0.4.53:80 check
#    server             backend4 10.0.4.54:80 check
#    server             backend5 10.0.4.55:80 check
#    server             backend6 10.0.4.56:80 check

Но если я изменю все порты, скажем, на 8124, HAProxy при запуске выдаст следующую ошибку:

haproxy[3324]: backend backend_servers has no server available!

Вот как выглядит новая конфигурация

global
    log         127.0.0.1 local2 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     256
    user        haproxy
    group       haproxy
    daemon

defaults
    mode               http
    log                global
    option             httplog
    timeout connect    10s
    timeout client     30s
    timeout server     30s

frontend http-in
    bind               :8124
    default_backend    backend_servers
    option             forwardfor

backend backend_servers
    balance            roundrobin
    server             backend1 10.0.4.51:8124 check
#    server             backend2 10.0.4.52:8124 check
#    server             backend3 10.0.4.53:8124 check
#    server             backend4 10.0.4.54:8124 check
#    server             backend5 10.0.4.55:8124 check
#    server             backend6 10.0.4.56:8124 check

Конечно, бэкэнд-программа node.js теперь прослушивает порт 8124.

Брандмауэр открыт для порта 8124 в бэкэнде, и следующая команда:

wget http://10.0.4.51:8124/action

отлично работает с балансировщиком нагрузки, что говорит о том, что балансировщик нагрузки действительно может получить доступ к бэкэнду.

При таких обстоятельствах HAProxy, по-видимому, не запустился, поскольку я не вижу порт 8124 в LISTENсостоянии, когда я использую netstat -an.

Это мой первый опыт использования HAProxy, поэтому я могу упустить что-то действительно незначительное.

Есть ли что-то еще, что мне следует проверить?

решение1

Я только что это понял.

Проблема не в конфигурации HAProxy, а в SELinux, который по умолчанию включен и установлен в принудительный режим в CentOS 7. Похоже, что конфигурация SELinux по умолчанию разрешает HAProxy только на порту 80.

Проблема решалась установкой SELinux в разрешающий режим, его полным отключением или иным способом, позволяющим SELinux разрешать HAProxy использовать другие порты.

Вы можете использовать semanage, чтобы разрешить HAProxy использовать порт:

sudo semanage port -a -p tcp -t http_port_t 8124

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