Настройка Redis Sentinel для высокой доступности

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Redis Sentinel для высокой доступности
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1212
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    822
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка Redis Sentinel для высокой доступности

Redis Sentinel — система мониторинга и автоматического failover для одиночного инстанса Redis. В отличие от Cluster, Sentinel не шардирует данные — весь набор данных на одном мастере с репликами. Sentinel отслеживает состояние мастера и при его падении автоматически повышает реплику до нового мастера и уведомляет клиентов о смене адреса.

Sentinel подходит, когда объём данных помещается в RAM одного сервера, но нужна автоматическая отказоустойчивость без ручного вмешательства.

Архитектура

Минимальная конфигурация: 1 мастер + 2 реплики + 3 инстанса Sentinel. Три Sentinel нужны для кворума: при потере связи с мастером Sentinels голосуют за failover, нужно большинство (quorum ≥ 2). Если Sentinels меньше трёх, возможен split-brain.

Sentinel можно запустить на тех же серверах, что и Redis — отдельных машин не требует.

Server 1: Redis Master (6379) + Sentinel (26379)
Server 2: Redis Replica 1 (6379) + Sentinel (26379)
Server 3: Redis Replica 2 (6379) + Sentinel (26379)

Настройка Mастера и Реплик

Master /etc/redis/redis.conf (server 1):

bind 0.0.0.0
port 6379
requirepass RedisPassword123
masterauth RedisPassword123

maxmemory 4gb
maxmemory-policy volatile-lru

appendonly yes
appendfsync everysec

protected-mode no

Replica /etc/redis/redis.conf (server 2, 3):

bind 0.0.0.0
port 6379
requirepass RedisPassword123
masterauth RedisPassword123

replicaof 192.168.1.10 6379

replica-read-only yes
replica-lazy-flush no

appendonly yes
appendfsync everysec

protected-mode no

replica-read-only yes — реплики принимают только чтение. Запись через мастер.

Настройка Sentinel

/etc/redis/sentinel.conf на каждом сервере (меняется только sentinel announce-ip):

port 26379
daemonize yes
logfile /var/log/redis/sentinel.log

# Имя мастера, IP, порт, quorum
sentinel monitor mymaster 192.168.1.10 6379 2

# Пароль для подключения к Redis
sentinel auth-pass mymaster RedisPassword123

# Через сколько мс без ответа мастер считается недоступным
sentinel down-after-milliseconds mymaster 5000

# Параллельное переключение реплик на новый мастер
sentinel parallel-syncs mymaster 1

# Таймаут failover
sentinel failover-timeout mymaster 60000

# Уведомление при failover
sentinel notification-script mymaster /opt/redis/notify.sh

# Объявить свой IP (важно при NAT/Docker)
sentinel announce-ip 192.168.1.10
sentinel announce-port 26379

quorum 2 — нужно 2 из 3 Sentinels чтобы решить что мастер недоступен. При down-after-milliseconds 5000 — failover начнётся через 5–15 секунд после падения мастера.

Запуск Sentinel:

redis-sentinel /etc/redis/sentinel.conf
# или
redis-server /etc/redis/sentinel.conf --sentinel

Проверка состояния

# Подключиться к Sentinel
redis-cli -p 26379

# Информация о мастере
SENTINEL masters
SENTINEL master mymaster

# Список реплик
SENTINEL replicas mymaster

# Список Sentinel'ов
SENTINEL sentinels mymaster

# Вручную инициировать failover (для теста)
SENTINEL failover mymaster

После SENTINEL failover mymaster — Sentinel повысит одну из реплик до мастера и обновит конфиги. Старый мастер (если живой) станет репликой нового мастера.

Подключение приложений через Sentinel

Клиенты не подключаются напрямую к мастеру — они подключаются к Sentinel, спрашивают текущий адрес мастера и уже к нему открывают соединение. При failover Sentinel уведомляет клиентов о новом мастере.

PHP phpredis:

$sentinel = new RedisSentinel(
    host: '192.168.1.10',
    port: 26379,
    timeout: 2.5,
    persistent: null,
    retryInterval: 100,
    readTimeout: 2.5,
    auth: 'RedisPassword123'
);

$masterInfo = $sentinel->master('mymaster');
// ['name' => 'mymaster', 'ip' => '192.168.1.11', 'port' => '6379', ...]

Predis с поддержкой Sentinel:

use Predis\Client;

$client = new Client(
    [
        'tcp://192.168.1.10:26379',
        'tcp://192.168.1.11:26379',
        'tcp://192.168.1.12:26379',
    ],
    [
        'replication' => 'sentinel',
        'service' => 'mymaster',
        'parameters' => [
            'password' => 'RedisPassword123',
        ],
    ]
);

Laravel config/database.php с Sentinel:

'redis' => [
    'client' => 'predis',
    'options' => [
        'replication' => 'sentinel',
        'service' => env('REDIS_SENTINEL_SERVICE', 'mymaster'),
        'parameters' => [
            'password' => env('REDIS_PASSWORD'),
            'database' => 0,
        ],
    ],
    'default' => [
        ['host' => '192.168.1.10', 'port' => 26379],
        ['host' => '192.168.1.11', 'port' => 26379],
        ['host' => '192.168.1.12', 'port' => 26379],
    ],
],

Скрипт уведомления при failover

/opt/redis/notify.sh:

#!/bin/bash
EVENT_TYPE=$1
EVENT_NAME=$2
EVENT_DESCRIPTION=$3

TELEGRAM_BOT_TOKEN="your_token"
TELEGRAM_CHAT_ID="your_chat_id"

MESSAGE="Redis Sentinel Event: $EVENT_TYPE
Service: $EVENT_NAME
Details: $EVENT_DESCRIPTION
Time: $(date)"

curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -d "chat_id=${TELEGRAM_CHAT_ID}" \
  -d "text=${MESSAGE}"
chmod +x /opt/redis/notify.sh

Симуляция failover

Тест перед продакшеном:

# На сервере с мастером — остановить Redis
systemctl stop redis

# Наблюдать в логах Sentinel
tail -f /var/log/redis/sentinel.log

# Через 5–15 секунд — один из реплик стал мастером
redis-cli -p 26379 SENTINEL master mymaster
# ip field покажет новый мастер

# Запустить старый мастер обратно — он станет репликой
systemctl start redis
redis-cli -p 26379 SENTINEL replicas mymaster

Sentinel vs. Cluster

Sentinel — для наборов данных, умещающихся на одном сервере. Автоматический failover, read-scaling через реплики, простая настройка. Нет горизонтального масштабирования записи.

Cluster — для объёмов данных > RAM одного сервера, горизонтальное масштабирование записи. Сложнее в настройке, ограничения на multi-key операции.

Сроки

Настройка Sentinel с 3 серверами, тестирование автоматического failover, настройка клиентов и уведомлений — 1–2 рабочих дня.