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

Алгоритм балансировки нагрузки Haproxy «URI весь»

Я провожу несколько тестов на алгоритме балансировки нагрузки "uri all" на HAProxy. Моя ОС - Ubuntu 16.04.2 LTS, а мой выпуск - HA-Proxy версии 1.7.7-1ppa1 ~ xenial 2017/06/27.

РЕДАКТИРОВАТЬ: Я использую Server-Sent-Events (SSE) для длительных запросов.

Вот моя конфигурация бэкэнда:

backend Proxy
    mode http
    balance uri whole
    hash-type consistent
    http-reuse safe
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    option  http-server-close
    option httpchk
    http-check expect ! rstatus ^503
    timeout tunnel 24h
    server xxxx 192.168.0.10:8080 check maxconn 2 maxqueue 1
    server yyyy 192.168.0.11:8080 check maxconn 2 maxqueue 1

Вот что я наблюдаю:

1 - Запрос A отправляется на один из этих серверов, в зависимости от хэша после вопросительного знака и некоторых других параметров. Скажем, на сервере xxxx.

2 - Следующий запрос, нацеленный на тот же самый URI, будет отправлен на сервер xxxx с maxconn на 2.

3 - Третий останется в очереди.

4 - Четвертый ничего не достигнет, и я получил сообщение «503 Service Unavailable - Нет сервера для обработки этого запроса». от HAProxy. Единственный способ отправить запросы на другой сервер - это пометить сервер xxxx как «Неработающий» или «Технический». То же самое без «согласованного типа хэша» или с опцией «резервного копирования».

5 - Все проверки работоспособности отправляются на один и тот же сервер.

Мои вопросы по пунктам 4 и 5:

Моя цель здесь - сбалансировать 4-й запрос (а в идеале 3-й) на втором сервере :)

Спасибо за помощь!

Похоже, что у запросов 1 и 2 все еще открыто соединение с серверной частью (длительный запрос?). Запрос 3 поставлен в очередь (разрешено только 2 соединения), запрос 4 отбрасывается, поскольку вы ограничили очередь одним запросом.

Бэкэнд не отключен - еще два соединения открыты.

Пометка бэкэнда как выключенного на 503 не срабатывает, потому что 503 исходит от haproxy, а не от бэкэнда.

Извините, если это не решит вашу проблему, но, возможно, это поможет вам лучше понять ее :)