
Я пытаюсь настроить очень простой балансировщик нагрузки 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