Я настроил программный балансировщик нагрузки с HAProxy.
Я могу получить доступ к веб-сайту, размещенному на всех веб-серверах, через виртуальный IP-адрес, настроенный, например, 10.0.0.1
Но когда я обновляю браузер, серверы переключаются с одного на другой. Кроме того, появляется ошибка "503 Сервис недоступен", который тоже при обновлении переходит на другой сервер.
Вот содержимое файла HAProxy.conf [Master Load Balancer]:
global
log 127.0.0.1 local0 err
ulimit-n 50000
maxconn 24000
nbproc 1
stats socket /tmp/haproxysock
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
maxconn 5000
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend UNBoxFrontEnd
bind 10.0.0.1:80
option http-server-close
default_backend UNBoxBackEnd
backend UNBoxBackEnd
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
hash-type consistent
cookie JSESSIONID prefix
server WebServer1 10.0.0.4:80 cookie Web1 check
server WebServer2 10.0.0.5:80 cookie Web2 check
server WebServer3 10.0.0.6:80 cookie Web3 check
listen web-cluster 10.0.0.1:80
bind *:1936
balance roundrobin
stats enable
stats scope UNBoxFrontEnd
stats scope UNBoxBackEnd
stats scope wordpress-backend
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth test:test
stats admin if TRUE
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
Не могли бы вы помочь мне сделать так, чтобы клиент всегда перенаправлялся на один веб-сервер, если он не выйдет из строя.
Заранее спасибо!
Ваша проблема в balance roundrobin
строка в HAProxy.cfg. Это указывает HAProxy на циклический переход между всеми доступными узлами. Измените его на что-нибудь другое (как описано в документация haproxy), и вы должны добиться желаемого поведения.
Для потомков наиболее популярными вариантами (IMO) директивы «баланс» являются:
roundrobin
- классическая круговая балансировка.static-rr
- вариант, позволяющий использовать больше серверов за счет отключения некоторых функций.leastconn
- сначала балансируйте с сервером с наименьшим количеством подключений.source
- хешировать исходный IP-адрес и баланс на его основе.uri
- хешировать некоторые или все URI и баланс на основе этого.