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

Балансировка Haproxy - повторите попытку с другим сервером, если время ожидания истекло впервые

Мы запускаем несколько бэкэнд-серверов с протоколом fastcgi и балансируем между ними с помощью HAproxy. Вот пример конфигурации:

listen Balancer 192.168.0.1:2000
    mode tcp
    option tcplog
    timeout connect 2000
    timeout server 2000
    timeout queue 2000
    timeout client 2000
    balance leastconn
    server backend1 192.168.0.2:2000 check inter 2000 rise 2 fall 5
    server backend2 192.168.0.3:2000 check inter 2000 rise 2 fall 5
    server backend3 192.168.0.4:2000 check inter 2000 rise 2 fall 5
    server backend4 192.168.0.5:2000 check inter 2000 rise 2 fall 5
    server backend5 192.168.0.6:2000 check inter 2000 rise 2 fall 5
    server backend6 192.168.0.7:2000 check inter 2000 rise 2 fall 5

Общий тайм-аут установлен на 2 секунды, но большинство запросов обрабатываются менее 0,3 секунды. Проблема в том, что во время пиков иногда какой-то бэкэнд не может ответить на запрос менее 2 секунд, и тогда возвращается таймаут шлюза.

Что я хотел бы сделать, так это то, что когда выбран один сервер (например, backend1) и он не может доставить ответ за 1 секунду, HAproxy выберет другой backend и повторите попытку. Если снова произойдет сбой через 1 секунду, произойдет тайм-аут.

Итак, вместо ожидания одного сервера в течение 2 секунд, можно ли сначала подождать 1 секунду, если он не удастся, попробовать другой, а затем потерпеть неудачу?

Если я правильно понимаю ваш вопрос, используя настройку timeout server до 1 секунды (1000 мс), и используя option redispatch должен дать вам желаемый эффект.

вариант повторной отправки
нет возможности повторной отправки
Включение или отключение перераспределения сеанса в случае сбоя соединения. В режиме HTTP, если сервер, обозначенный файлом cookie, не работает, клиенты могут определенно придерживаться его, потому что они не могут очистить файл cookie, поэтому они больше не смогут получить доступ к службе.

Указание "option redispatch" позволит прокси-серверу нарушить их постоянство и перераспределить их на рабочий сервер.

Это также позволяет повторить последнее подключение к другому серверу в случае нескольких сбоев подключения. Конечно, для этого требуется, чтобы для «повторных попыток» было установлено ненулевое значение.

Это предпочтительная форма, которая заменяет ключевые слова «redispatch» и «redisp».

Если этот параметр был включен в разделе «по умолчанию», его можно отключить в конкретном случае, добавив перед ним ключевое слово «no».