HAProxy проверка работоспособности последовательных отсчетов не сбрасывается
У нас есть два сервера Redis за сервером HAProxy. Один сервер - это главный, который работает, а другой - подчиненный, который не работает. Если мастер выходит из строя, стражи выбирают другой сервер, чтобы быть мастером. Эта часть работает нормально. Хитрость заключается в том, чтобы HAProxy никогда не разрешал трафику проходить на оба сервера одновременно.
Я изначально исправил это, добавив rise
а также fall
Аргументы для серверов, как показано ниже:
backend Backend:Redis
bind-process 1
timeout server 3h
timeout tunnel 3h
option tcp-check
tcp-check connect
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server redis-01.vbox 10.10.0.10:6279 check inter 5s rise 5 fall 2 maxconn 600 weight 1
server redis-02.vbox 10.10.0.11:6279 check inter 5s rise 5 fall 2 maxconn 600 weight 1
Мы имеем дело со странным случаем после следующей последовательности:
- Начать с
redis-01
(начальный мастер) иredis-02
(начальный раб) вниз. - Убийство
redis-01
(мастер). - Часовые избирают
redis-02
быть новым хозяином. - Перезапустите Redis на
redis-01
(сейчас раб, оригинальный хозяин). - Для двух или трех проверок работоспособности HAProxy,
redis-01
думает, что это хозяин и проходит проверки. - В конце концов,
redis-01
понимает, что это все еще раб и начинает проваливать проверки.
Проблема в том, что HAProxy не сбрасывает счетчик проверки работоспособности. Страница состояния показывает, что redis-01
прошел 2/5 (или 3/5) проверок здоровья. Это не так, что хорошо. Что нехорошо, так это то, что если другой сервер выходит из строя, ему нужно пройти меньше проверок, в конечном итоге только 1, что может привести к тому, что оба сервера будут работать с точки зрения HAProxy.
Я не понимаю, почему HAProxy не учитывает redis-01
не смог подойти, так как он перестал проходить проверки после 2. Не похоже, что он должен продолжать ждать. В документации сказано:
Параметр подъема указывает, что сервер будет считаться работоспособным после последовательных успешных проверок работоспособности.
Он получил 2 из 5, но не получил 5, поэтому он не работает и не должен начинать отсчет с 2 при следующем прохождении проверки работоспособности. Это должно быть в 0.
Тогда возникает вопрос: 1) Что мне нужно сделать, чтобы HAProxy сбросил счетчик последовательных проверок работоспособности? 2) Есть ли лучший способ не допустить, чтобы HAProxy рассматривал оба сервера одновременно?