Имя хоста проверки HAProxy

Мы запускаем haproxy в качестве балансировщика нагрузки и для обеспечения функции резервного копирования для нашей службы API.

Наш API - это приложение Java, использующее платформу Джерси, работающую в Apache Tomcat. Некоторое время назад мы столкнулись с проблемой плохой производительности на стороне нашего API, и мы просто не могли понять, что происходит. Глубоко покопавшись, мы обнаружили, что проблема была вызвана параметром httpchk:

    option httpchk GET /resource/healthcheck
    http-check expect rstatus (2|3)[0-9][0-9]
    server server1_8585 x.x.x.x:8585 check inter 1s fastinter 2s fall 2 rise 1 pool-purge-delay 30s

Пакеты, отправленные haproxy, не включали заголовок Host, и из-за этого Tomcat пытается разрешить хост, что приводит к ужасным проблемам с производительностью. Из-за этого мы настроили конфигурацию бэкэнда на следующее:

Конфигурация бэкэнда выглядит так:

backend api_example_com
    balance roundrobin
    option httpchk GET /resource/healthcheck HTTP/1.1\r\nHost:\ server1.example.com
    http-check expect rstatus (2|3)[0-9][0-9]

    server server1_8585 x.x.x.x:8585 check inter 10s fastinter 5s fall 2 rise 1 pool-purge-delay 30s
    server server2_8585 y.y.y.y:8585 check inter 10s fastinter 5s fall 2 rise 1 pool-purge-delay 30s backup
    server server3_8585 z.z.z.z:8585 check inter 10s fastinter 5s fall 2 rise 1 pool-purge-delay 30s backup

Но теперь у нас есть проблема, что API резервного копирования также получают неправильное имя хоста при проверке работоспособности.

Любая идея как настроить отдельную проверку работоспособности для каждого сервера?

0
задан 13 July 2020 в 17:56
1 ответ

Ну, вы можете попробовать создать прокси для каждого резервного сервера и использовать функцию отслеживания.
Но, как писал Джерард, было бы лучше иметь на каждом сервере одно и то же имя хоста. Для tomcat это Псевдонимы имени хоста

Предложение отслеживания HAProxy (непроверенное)

backend track-server2_8585
  option httpchk GET /resource/healthcheck HTTP/1.1\r\nHost:\ server2.example.com
  http-check expect rstatus (2|3)[0-9][0-9]

  server server2_8585 y.y.y.y:8585 check inter 10s fastinter 5s fall 2 rise 1 pool-purge-delay 30s

backend track-server3_8585
  option httpchk GET /resource/healthcheck HTTP/1.1\r\nHost:\ server3.example.com
  http-check expect rstatus (2|3)[0-9][0-9]

  server server3_8585 y.y.y.y:8585 check inter 10s fastinter 5s fall 2 rise 1 pool-purge-delay 30s

backend api_example_com
    balance roundrobin
    option httpchk GET /resource/healthcheck HTTP/1.1\r\nHost:\ server1.example.com
    http-check expect rstatus (2|3)[0-9][0-9]

    server server1_8585 x.x.x.x:8585 check inter 10s fastinter 5s fall 2 rise 1 pool-purge-delay 30s
    server server2_8585 y.y.y.y:8585 check inter 10s fastinter 5s fall 2 rise 1 pool-purge-delay 30s backup track track-server2_8585/server2_8585
    server server3_8585 z.z.z.z:8585 check inter 10s fastinter 5s fall 2 rise 1 pool-purge-delay 30s backup track track-server3_8585/server3_8585
0
ответ дан 22 July 2020 в 11:07

Теги

Похожие вопросы