Назад | Перейти на главную страницу

HAProxy - клиентский запрос постоянно переключает серверы

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