Есть два хоста, прописанные в хапрокси. Есть основной (на который идет весь траффик) и есть запасной. Время от времени там бывает так, что на основном какой-то из запросов получает 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
Я добился только такого поведения. Клиент отправляет запрос, получает ошибку и если он повторно отправит запрос, то идет редирект на резерв. А вот чтоб автоматом, сразу, без дополнительных запросов - не получается
нет, клиент должен сделать еще один реквест - на первый он уже получил 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
Возможно плохо объяснил. Такое у меня бывает.
Есть два хоста. Один работает в режиме праймори (то есть на него идет весь траффик) и есть резерв. Они работают исходя из настройки check. Если после 3-ех ретраев хапрокси получает ошибки, то траффик автоматом переключается на резерв. Бывают случаи, что на праймори выходит ошибка 500 (но я тестирую пока на 503), после чего клиент теряет запрос, а хапрокси неуспев достучаться до праймори, наинает сыпать на резерв хост весь трафик. 500 она не постоянная (предположим сеть маргнула на секунду).
Нужно сделать так.
Добавить какую-то дополнительную проверку, чтобы в случае 503 ошибки, хапрокси взял этот же запрос и редиректнул конкретно его на резерв без переключения трафика на него.
Надеюсь, так понятнее.
@Евгений Хлебников так же я попробовал с помощью кук, так же не получилось. Постманом отправляю запрос, возвращает 503 и все. Дальше редиректа никакого.
Хапрокси вообще поддерживает такую реализацию?
В интернетах говорят, что подобные настройки поддерживает Нжинкс.