Высокая доступность с 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 replication2. Настройте 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 13. Запустите процессы Sentinel
Запустите Sentinel на каждом узле. Sentinel автоматически обнаруживают друг друга и реплики; они записывают конфигурацию в файл во время работы. Поэтому sentinel.conf должен быть доступен для записи.
Redis
redis-sentinel /etc/redis/sentinel.conf
# or:
redis-server /etc/redis/sentinel.conf --sentinel4. Запросите состояние через 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 mymaster5. Альтернатива: разделение данных с 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 16. Проверьте состояние кластера
После создания кластера убедитесь, что все слоты назначены и узлы связаны. 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