@Misha_Polutrup

Как сделать повторный запрос на HAPROXY?

Есть два хоста, прописанные в хапрокси. Есть основной (на который идет весь траффик) и есть запасной. Время от времени там бывает так, что на основном какой-то из запросов получает 503 ошибку. А резервный включается через 3 секунды, если основной становится не доступен. Вопрос. Можно ли с помощью хапрокси, сделать так, чтобы тот же запрос на котором ответ 503, автоматически перенаправлялся на резервный без полного переключения траффика на резерв?
Я пробовал с помощью надстройки ЛУА, но не вышло.
Я добился только такого поведения. Клиент отправляет запрос, получает ошибку и если он повторно отправит запрос, то идет редирект на резерв
А вот чтоб автоматом, сразу, без дополнительных запросов - не получается
Половину методов не поддерживает ЛУА, другую половину не поддерживает хапрокси.
Подскажите, поделитесь опытом.

Conf на данный момент вот такой:
```
global
maxconn 100
log stdout local0 info
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s

defaults
retries 2
timeout client 30m
timeout connect 4s
timeout server 30m
timeout check 5s

frontend stats
mode http
bind *:8080
stats enable
stats uri /stats
stats refresh 5s

listen data
log global
mode http
option httplog
option httpchk /**/api/4_5/rs/status
bind *:8081
balance roundrobin
option redispatch
retries 3
retry-on 503
http-send-name-header Host
server server1 server.ru:**
server server2 server.ru:** check backup
```
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
У вас здесь несколько вопросов
Я добился только такого поведения. Клиент отправляет запрос, получает ошибку и если он повторно отправит запрос, то идет редирект на резерв. А вот чтоб автоматом, сразу, без дополнительных запросов - не получается

нет, клиент должен сделать еще один реквест - на первый он уже получил 503
The HTTP protocol is transaction-driven. This means that each request will lead to one and only one response


и второй, немного иной по своей сути
Можно ли с помощью хапрокси, сделать так, чтобы тот же запрос на котором ответ 503, автоматически перенаправлялся на резервный без полного переключения траффика на резерв?

Немного непонятно, ваш способ который вы упомянули работает без полного переключения трафика? Если нет - можно попробовать балансировку куками https://www.haproxy.com/documentation/haproxy-conf...
То есть работать без настройки "бэкап" сервера, а просто в случае ошибки сетить куку server2 и снимать ее на стороне сервера, а без куки направлять на server1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы