Ответ
Да, Redis предоставляет несколько мощных механизмов для построения отказоустойчивых систем, но это требует правильной конфигурации. «Из коробки» один инстанс Redis не является отказоустойчивым.
Основные механизмы:
-
Redis Replication (Master-Slave):
- Данные с основного узла (master) асинхронно копируются на один или несколько узлов-реплик (slaves).
- В случае отказа мастера, одна из реплик может быть вручную или автоматически повышена до нового мастера. Это обеспечивает высокую доступность на чтение и горячий резерв данных.
-
Redis Sentinel:
- Это система мониторинга, которая работает поверх репликации. Sentinel автоматически отслеживает состояние мастера и реплик.
- При отказе мастера Sentinel запускает процедуру выборов и автоматически назначает одну из реплик новым мастером, перенастраивая остальные реплики и сообщая клиентам о новом адресе мастера. Это обеспечивает автоматическое восстановление после сбоя (failover).
-
Redis Cluster:
- Обеспечивает одновременно и шардирование (распределение данных по разным узлам), и высокую доступность.
- Данные автоматически распределяются по слотам, которые находятся на разных мастерах. У каждого мастера в кластере есть свои реплики.
- Если какой-либо мастер становится недоступен, его реплика автоматически занимает его место. Кластер продолжает работать, даже если часть узлов вышла из строя.
# Пример конфигурации Sentinel
sentinel monitor mymaster 127.0.0.1 6379 2
# ^ Наблюдать за мастером 'mymaster' по адресу, кворум для принятия решения - 2 сентинела
sentinel down-after-milliseconds mymaster 5000
# ^ Считать мастер упавшим после 5 секунд недоступности
sentinel failover-timeout mymaster 60000
# ^ Таймаут на операцию переключения
Важно: для реальной сохранности данных любой из этих подходов необходимо использовать вместе с механизмами персистентности (RDB или AOF), чтобы избежать потери данных при перезапуске всех узлов.