Назад | Перейти на главную страницу

Последовательные счетчики проверки работоспособности 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

Мы имеем дело со странным случаем после следующей последовательности:

Проблема в том, что HAProxy не сбрасывает счетчик проверки работоспособности. На странице состояния показано, что redis-01 прошел 2/5 (или 3/5) проверок здоровья. Это не так, и это хорошо. Что не хорошо, так это то, что если другой сервер выходит из строя, ему нужно пройти меньше проверок, в конечном итоге только 1, что с точки зрения HAProxy может привести к тому, что оба сервера будут работать.

Я не понимаю, почему HAProxy не рассматривает redis-01 не смог подойти, так как он перестал проходить проверки после 2. Не похоже, что он должен ждать. В документации говорится:

Параметр «rise» указывает, что сервер будет считаться работающим после последовательных успешных проверок работоспособности.

Он получил 2 из 5, но не получил 5, поэтому он не работает и не должен снова начинать отсчет на 2 при следующем прохождении проверки работоспособности. Он должен быть равен 0.

Тогда возникает один из следующих вопросов: 1) Что мне нужно сделать, чтобы HAProxy сбросил счетчик последовательной проверки работоспособности? 2) Есть ли лучший способ уберечь HAProxy от одновременного включения обоих серверов?