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 рассматривал оба сервера одновременно?

0 ответов

Другие вопросы по тегам