DBAtlas · Атлас эксплуатации баз данных

Высокая доступность с Redis Sentinel + Cluster

Симптом

Цель: настроить развёртывание master-replica с автоматической отработкой отказа для Redis с помощью Sentinel; при необходимости горизонтального масштабирования перейти в режим Redis Cluster.

1. Настройте master и реплики

Запустите один master и минимум две реплики. Реплики следуют за master через REPLICAOF ('replicaof <host> <port>' можно также указать в redis.conf). Для персистентности включите AOF или RDB; рекомендуется аутентификация через requirepass/masterauth.

Redis

# at runtime on the replica nodes:
REPLICAOF 10.0.0.10 6379
# to make it persistent, redis.conf:
# replicaof 10.0.0.10 6379
# masterauth secret
INFO replication

2. Настройте Sentinel: monitor и quorum

Определите отслеживаемый master и quorum в sentinel.conf каждого узла Sentinel. quorum — минимальное число Sentinel, необходимое, чтобы считать master «down». В production рекомендуются 3 Sentinel на 3 отдельных серверах (против split-brain).

Redis

# sentinel.conf:
sentinel monitor mymaster 10.0.0.10 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

3. Запустите процессы Sentinel

Запустите Sentinel на каждом узле. Sentinel автоматически обнаруживают друг друга и реплики; они записывают конфигурацию в файл во время работы. Поэтому sentinel.conf должен быть доступен для записи.

Redis

redis-sentinel /etc/redis/sentinel.conf
# or:
redis-server /etc/redis/sentinel.conf --sentinel

4. Запросите состояние через Sentinel и протестируйте отработку отказа

Запросите текущий master и реплики командами SENTINEL. Приложения должны узнавать текущий master, запрашивая у Sentinel 'get-master-addr-by-name'. Проверьте автоматическое переключение плановой отработкой отказа.

Redis

SENTINEL master mymaster
SENTINEL get-master-addr-by-name mymaster
SENTINEL replicas mymaster
# planned switchover:
SENTINEL failover mymaster

5. Альтернатива: разделение данных с Redis Cluster

Если памяти/пропускной способности одного master недостаточно, используйте Redis Cluster: данные разбиваются на 16384 hash slots и распределяются по нескольким master; у каждого master своя реплика. Приложение должно использовать клиент с поддержкой кластера. Настройка — через redis-cli --cluster create.

Redis

redis-cli --cluster create \
  10.0.0.11:6379 10.0.0.12:6379 10.0.0.13:6379 \
  10.0.0.21:6379 10.0.0.22:6379 10.0.0.23:6379 \
  --cluster-replicas 1

6. Проверьте состояние кластера

После создания кластера убедитесь, что все слоты назначены и узлы связаны. cluster_state должен быть 'ok', а все 16384 слота — назначены. Отслеживайте узлы и распределение слотов командами CLUSTER.

Redis

redis-cli --cluster check 10.0.0.11:6379
redis-cli -c -h 10.0.0.11 CLUSTER INFO
redis-cli -c -h 10.0.0.11 CLUSTER NODES
Открыть в DBAtlas →