Как работает Redis Sentinel
Как работает Redis Sentinel
Назначение
Redis Sentinel — система мониторинга и автоматического failover для Redis. Обеспечивает высокую доступность без ручного вмешательства при отказе мастера.
Топология
┌───────────┐ репликация ┌───────────┐
│ Мастер │ ─────────────────► │ Реплика │
└───────────┘ └───────────┘
▲ ▲
│ мониторинг │
┌─────┴──────────────────────────┐ │
│ Sentinel 1 Sentinel 2 Sentinel 3 │
└────────────────────────────────┘
Минимальная рекомендуемая конфигурация: 3 Sentinel-процесса (нечётное число для кворума).
Кворум (quorum)
Кворум — минимальное количество Sentinel-узлов, которые должны согласиться, что мастер недоступен, прежде чем начнётся выборы нового мастера.
| Параметр | Рекомендация |
|---|---|
| Число Sentinel | 3 |
| Кворум | 2 |
Если кворум не достигнут, failover не выполняется — защита от split-brain.
Выборы мастера
- Sentinel-ы обнаруживают, что мастер не отвечает в течение
down-after-milliseconds. - Каждый Sentinel помечает мастер как SDOWN (субъективно недоступен).
- Когда
quorumSentinel-ов помечают мастер — он становится ODOWN (объективно недоступен). - Один из Sentinel-ов избирается лидером через алгоритм Raft.
- Лидер выбирает лучшую реплику для повышения до мастера.
Критерии выбора новой реплики
- Реплика должна быть online.
- Предпочитается реплика с наименьшим
slave-priority. - При равном приоритете — с наибольшим
replication_offset(меньше отставание). - При равном offset — с наименьшим runid (детерминированный выбор).
Процесс failover
1. Лидер отправляет SLAVEOF NO ONE выбранной реплике → она становится мастером
2. Остальные реплики переключаются на нового мастера (SLAVEOF <new-master>)
3. Клиенты получают уведомление через Pub/Sub или переспрашивают адрес мастера
4. Старый мастер (после восстановления) становится репликой нового
Взаимодействие клиентов
Клиент подключается к Sentinel для получения адреса текущего мастера:
SENTINEL get-master-addr-by-name <master-name>
→ возвращает IP:PORT актуального мастера
Redis-клиенты с поддержкой Sentinel (Jedis, StackExchange.Redis, redis-py) делают это автоматически.
Роль Redis Sentinel в кластере ПринтМенеджера
Redis используется в кластере Принтум для:
- хранения пользовательских сессий;
- очередей заданий между узлами ПринтМенеджера;
- кэширования данных конфигурации.
Redis Sentinel обеспечивает автоматическое переключение при отказе Redis-мастера, чтобы оба узла ПринтМенеджера сохраняли доступ к данным.
В стандартной конфигурации разворачиваются 3 Sentinel-процесса — по одному на каждый узел ПринтМенеджера (переменная REDIS_SENTINEL_LIST содержит 3 IP-адреса). TODO: уточнить точное значение кворума — в документации явно не указано. в стандартной конфигурации Принтум.