Ответ
Я разворачивал и поддерживал 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.