Установлено 2 экземпляра Redis, один из которых является мастером. Это работает замечательно и без головной боли.
Теперь я пытаюсь заставить мои узлы HAProxy / keepalived обрабатывать какое-то аварийное переключение.
1) Возможно ли это - настроить один узел как главный, а другой как резервный? Вот что я делаю со своими узлами MySQL:
server 192.168.32.33 192.168.32.33:3306 check backup server 192.168.32.34 192.168.32.34:3306 check
2) Если да, то есть ли обновленная документация по этому поводу? Я следил за документацией в блоге HAProxy, как указано ниже:
Статья ServerFault: Redis sentinel + отказоустойчивость HAProxy
Но узлы отображаются как неработающие, хотя я могу использовать их через интерфейс командной строки и другие клиенты:
снимок сбойных узлов Redis в веб-интерфейсе прокси HA
Используя CLI, если я введу команды в tcp-check, ответы будут соответствовать ожидаемым возвратам в conf. (примечание: у нас еще не включена аутентификация на узлах Redis).
Вот мой haproxy.cfg - начиная с последней строки моего раздела MySQL
server 192.168.32.34 192.168.32.34:3306 check defaults REDIS mode tcp timeout connect 4s timeout server 30s timeout client 30s frontend ft_redis bind *:6379 name redis default_backend bk_redis backend bk_redis option tcp-check tcp-check send PINGrn tcp-check expect string +PONG tcp-check send info replicationrn tcp-check expect string role:master tcp-check send QUITrn tcp-check expect string +OK server Site2DB3 192.168.32.36:6379 check inter 1s server Site1DB3 192.168.22.36:6379 check inter 1s
Также убедитесь, что вы избегаете пробелов после отправки tcp-check, например:
tcp-check send info\ replication\r\n
PINGrn
должен прочесть
PING\r\n
То же самое для других сообщений tcp-check. Вы отправляете PINGrn
вместо того PING\r\n
, недопустимая команда, которая вызовет ошибку и приведет к сбою проверки UP.
Для REDIS с аутентификацией добавьте следующее:
tcp-check send AUTH\ xxx_xxx\r\n