Балансировщик нагрузки Azure с Haproxy вызывает 504 таймаута - PullRequest
0 голосов
/ 26 февраля 2019

Мы используем 2 активных сервера haproxy за предложением Azure Load Balancer, которое затем распределяет нагрузку на наш интерфейсный веб-кластер.У нас есть такая настройка, потому что нам нужна HA на наших haproxy-серверах, и мы также используем ряд правил в haproxy для маршрутизации трафика, которые не поддерживаются ни в одном из предложений Azure.

Мы столкнулись с проблемой, когда трафикзапускает балансировщик нагрузки Azure, направляется в окно haproxy и затем отправляется на IIS для обработки, но мы никогда не получаем ответ от сервера, но я вижу, что запрос был обработан, поскольку данные были записаны в базу данных.У меня есть журнал в журналах haproxy 504, но когда я проверяю журналы IIS, ничего не регистрируется, поэтому он обрабатывается в IIS, но похоже, что соединение на каком-то этапе обрывается.

Я протестировал эту настройку без Azure Load Balancer и просто Haproxy сам по себе работает нормально, но когда мы представляем Azure Load Balancer, мы начинаем получать 504 ошибки.Кто-нибудь видел такую ​​проблему?

haproxy.cfg

global
    log 127.0.0.1 local0
    maxconn 4096
    user haproxy
    group haproxy
    tune.ssl.default-dh-param 2048
    tune.maxrewrite 4096

    ssl-default-bind-options no-sslv3
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS

    ssl-default-server-options no-sslv3
    ssl-default-server-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS

defaults
    log global
    option httplog
    mode http
    option dontlognull
    option tcplog
    retries 3
    option redispatch
    maxconn 20000
    timeout connect 8000
    timeout client 50000
    timeout server 50000

frontend release-micro-http
    bind :8082
    reqadd X-Forwarded-Proto:\ http
    default_backend release-micro-backend

backend release-micro-backend
    balance roundrobin
    option http-server-close
    option forwardfor
    option httpchk GET /check.txt
    server worker1 10.1.2.1:8086 check
    server worker2 10.1.2.2:8086 check

Azure Load Balancer Config

1 Ответ

0 голосов
/ 27 февраля 2019

Как сказал @sqlbot, я заметил, что в журнале Haproxy в качестве состояния завершения отображается -sH-

s = истекло время ожидания на стороне сервера во время ожидания отправки или получения сервером данных.

H = прокси-сервер ждал от сервера полного (действительного) заголовка ответа (только HTTP).

Мы посмотрели на файл httperr.log в C: \ Windows \ system32\ LogFiles \ Httperr и заметил, что мы получаем:

POST / api / v1 / clients - - 2 Connection_Dropped

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

...