← Назад к вопросам

Что такое 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

  1. Мониторинг: каждый Sentinel пингует master и slaves
  2. Детектирование отказа: если master не отвечает (30 сек)
  3. Голосование: sentinels голосуют за переключение
  4. Failover: один из slaves повышается до master
  5. Переконфигурация: все 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 узлов, гарантируя непрерывность сервиса без ручного вмешательства.