Какой у вас опыт использования Redis в кластерной конфигурации?

«Какой у вас опыт использования Redis в кластерной конфигурации?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я разворачивал и поддерживал Redis Cluster для кэширования сессий пользователей и хранения временных данных с высокими требованиями к доступности и производительности.

Основные работы включали:

  • Развертывание: Создание кластера из 6 нод (3 master, 3 replica) с распределением 16384 хеш-слотов между мастерами с помощью redis-cli --cluster create.
  • Конфигурация и тюнинг: Настройка параметров в redis.conf, таких как cluster-node-timeout, и политик управления памятью (maxmemory-policy allkeys-lru). Для persistence использовал комбинацию RDB снепшотов и AOF логов.
  • Обеспечение отказоустойчивости: Мониторинг состояния кластера через Redis Sentinel и интеграцию с Prometheus. Отработка сценариев отказов: при падении master-ноды одна из её реплик автоматически повышалась.
  • Работа с клиентами: Настройка клиентских приложений (на Go, Python) для корректного взаимодействия с кластером, включая обработку перенаправлений (MOVED, ASK).

Пример команды для проверки состояния кластера:

redis-cli -c -p 7000 cluster nodes

Ключевой вызов: Балансировка нагрузки и данных между шардами при добавлении новых нод в живой кластер с помощью redis-cli --cluster rebalance.