Налаштування Redis Sentinel для високої доступності

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Redis Sentinel для високої доступності
Середня
~2-3 робочих дні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування Redis Sentinel для високої доступності

Redis Sentinel — система мониторингу та автоматичного failover для одиничного інстансу Redis. На відміну від Cluster, Sentinel не шардує дані — весь набір даних на одному master'і з репліками. Sentinel стежить за станом master'а та при його падінні автоматично підвищує реплику до нового master'а і сповіщає клієнтів про зміну адреси.

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

Архітектура

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

Sentinel можна запустити на тих же серверах, що й Redis — окремих машин не потребує.

Сервер 1: Redis Master (6379) + Sentinel (26379)
Сервер 2: Redis Replica 1 (6379) + Sentinel (26379)
Сервер 3: Redis Replica 2 (6379) + Sentinel (26379)

Налаштування Master'а та Реплік

Master /etc/redis/redis.conf (сервер 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 (сервер 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 — реплики приймають тільки читання. Запис через master.

Налаштування Sentinel

/etc/redis/sentinel.conf на кожному сервері (змінюється тільки sentinel announce-ip):

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

# Ім'я master'а, IP, порт, quorum
sentinel monitor mymaster 192.168.1.10 6379 2

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

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

# Паралельне переключення реплік на новий master
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 щоб вирішити що master недоступен. При down-after-milliseconds 5000 — failover почнеться через 5–15 секунд після падіння master'а.

Запуск Sentinel:

redis-sentinel /etc/redis/sentinel.conf
# або
redis-server /etc/redis/sentinel.conf --sentinel

Перевірка стану

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

# Інформація про master'а
SENTINEL masters
SENTINEL master mymaster

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

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

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

Після SENTINEL failover mymaster — Sentinel підвищить одну з реплік до master'а та оновить конфіги. Старий master (якщо живий) стане репліцею нового master'а.

Підключення додатків через Sentinel

Клієнти не підключаються напрямки до master'а — вони підключаються до Sentinel, запитують поточну адресу master'а та вже до нього відкривають з'єднання. При failover Sentinel сповіщає клієнтів про новий master.

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

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

# На сервері з master'ом — зупинити Redis
systemctl stop redis

# Спостерігати в логах Sentinel
tail -f /var/log/redis/sentinel.log

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

# Запустити старий master назад — він стане репліцею
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 робочих дня.