← Назад к вопросам
Что такое Sentinel в Redis?
1.0 Junior🔥 101 комментариев
#DevOps и инфраструктура#Django
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Redis Sentinel
Определение
Redis Sentinel — это система мониторинга и автоматического отказоустойчивого переключения (failover) для Redis. Sentinel следит за здоровьем экземпляров Redis (master и slaves) и автоматически переключает приложения на резервный master при падении основного, обеспечивая высокую доступность.
Основная архитектура
Redis Sentinel состоит из трёх компонентов:
┌─────────────────────────────────────────┐
│ Приложения (Redis clients) │
│ Подключаются к Sentinel для discovery │
└──────────────────┬──────────────────────┘
│
┌──────────┼──────────┐
│ │ │
┌────v─┐ ┌───v──┐ ┌──v────┐
│Sent-1│ │Sent-2│ │Sent-3 │ (минимум 3)
│(6379)│ │(6379)│ │(6379) │
└────┬─┘ └──────┘ └──────┘
│
│ мониторит
│
┌────v──────────┬─────────────────┐
│ │ │
┌──v─────┐ ┌───v────┐ ┌────────v─┐
│ Master │ │ Slave1 │ │ Slave2 │
│(6380) │───>│(6380) │───>│(6380) │
└────────┘ └────────┘ └─────────┘
Как работает Sentinel
- Мониторинг: каждый Sentinel пингует master и slaves
- Детектирование отказа: если master не отвечает (30 сек)
- Голосование: sentinels голосуют за переключение
- Failover: один из slaves повышается до master
- Переконфигурация: все slave перенаправляются на новый master
Установка и конфигурация
Запуск Redis Master
redis-server --port 6380
Запуск Redis Slaves (2 экземпляра)
redis-server --port 6381 --slaveof 127.0.0.1 6380
redis-server --port 6382 --slaveof 127.0.0.1 6380
Конфигурация Sentinel (sentinel.conf)
port 26379
dir ./
# Мониторинг master: имя кол-во-sentinels кворум
sentinel monitor mymaster 127.0.0.1 6380 2
# Timeout в миллисекундах (default 30000)
sentinel down-after-milliseconds mymaster 30000
# Timeout для failover (default 180000)
sentinel failover-timeout mymaster 180000
# Параллельные рабочие процессы при failover (default 1)
sentinel parallel-syncs mymaster 1
Запуск Sentinel (3 экземпляра)
redis-sentinel sentinel.conf --port 26379
redis-sentinel sentinel.conf --port 26380
redis-sentinel sentinel.conf --port 26381
Работа с Redis Sentinel в Python
Подключение через sentinel-py
from redis.sentinel import Sentinel
# Список Sentinel узлов
sentinels = [
("127.0.0.1", 26379),
("127.0.0.1", 26380),
("127.0.0.1", 26381),
]
# Создание Sentinel клиента
sentinel = Sentinel(sentinels)
# Получение master подключения
master = sentinel.master_for("mymaster", socket_timeout=0.1)
# Получение slave подключения (для чтения)
slave = sentinel.slave_for("mymaster", socket_timeout=0.1)
# Использование
master.set("key", "value")
value = slave.get("key")
print(value)
Автоматический failover
from redis.sentinel import Sentinel
import time
sentinels = [("127.0.0.1", 26379), ("127.0.0.1", 26380), ("127.0.0.1", 26381)]
sentinel = Sentinel(sentinels)
# При падении master Sentinel автоматически переключится
master = sentinel.master_for("mymaster")
for i in range(100):
try:
master.set(f"key_{i}", f"value_{i}")
print(f"Записано: key_{i}")
except Exception as e:
print(f"Ошибка подключения: {e}")
time.sleep(1)
Мониторинг состояния Sentinel
from redis.sentinel import Sentinel
sentinels = [("127.0.0.1", 26379)]
sentinel = Sentinel(sentinels)
# Информация о master
master_info = sentinel.get_master("mymaster")
print(f"Master: {master_info[0]}:{master_info[1]}")
# Все sentinels знают о master
sentinels_info = sentinel.sentinels("mymaster")
print(f"Sentinels: {len(sentinels_info)}")
# Проверка состояния
masters = sentinel.discover_masters()
print(f"Обнаруженные masters: {masters}")
slaves = sentinel.discover_slaves("mymaster")
print(f"Slaves: {slaves}")
Команды Redis Sentinel CLI
# Подключение к Sentinel
redis-cli -p 26379
# Информация о master
SENTINEL masters
SENTINEL get-master-addr-by-name mymaster
# Информация о slaves
SENTINEL slaves mymaster
# Информация о других sentinels
SENTINEL sentinels mymaster
# Проверка состояния
SENTINEL is-master-down-by-addr 127.0.0.1 6380 0 abc123
# Ручное переключение (если нужно)
SENTINEL failover mymaster
Quorum (Кворум) и демократия
Для стабильной работы используется quorum (кворум):
- Минимум 3 Sentinel узла для production
- Quorum 2 означает: нужны голоса 2 sentinels для решения о failover
- Кворум выбирается исходя из формулы:
кворум = (количество sentinels / 2) + 1
Количество Sentinels | Минимальный кворум | Отказоустойчивость
1 | 1 | 0 (не используется)
3 | 2 | 1 sentinel может упасть
5 | 3 | 2 sentinel могут упасть
Сценарий failover
1. Master падает (не отвечает 30+ сек)
2. Первый Sentinel заметил это
3. Sentinel отправляет PING другим sentinels
4. Если кворум согласен (2/3) — объявляется failover
5. Выбирается лучший slave (по смещению репликации)
6. Этот slave становится новым master
7. Другие slaves переподключаются к новому master
8. Приложения (через Sentinel) начинают писать в новый master
Преимущества Redis Sentinel
- Автоматический failover: не нужна ручная переконфигурация
- Мониторинг: всегда знаете состояние Redis
- Прозрачность для приложения: Sentinel скрывает переключения
- Кворум: демократичное голосование предотвращает split-brain
- Простота: не требует специального оборудования
Ограничения
- Горизонтальное масштабирование: Sentinel НЕ масштабирует данные
- Master-Slave только: нет автоматического шардирования
- Сложность операций: нужно правильно настроить и поддерживать
- Split-brain риск: если Sentinel себя не правильно настроены
Альтернативы
- Redis Cluster: встроенное шардирование и failover
- Managed Redis: AWS ElastiCache, Google Cloud Memorystore (управляют за вас)
Итоговая схема
Redis Sentinel — это система мониторинга для высокой доступности Redis, которая автоматически переключает приложения с упавшего master на slave при помощи кворума sentinel узлов, гарантируя непрерывность сервиса без ручного вмешательства.