Какие механизмы отказоустойчивости есть в Redis?

Ответ

Да, Redis предоставляет несколько мощных механизмов для построения отказоустойчивых систем, но это требует правильной конфигурации. «Из коробки» один инстанс Redis не является отказоустойчивым.

Основные механизмы:

  1. Redis Replication (Master-Slave):

    • Данные с основного узла (master) асинхронно копируются на один или несколько узлов-реплик (slaves).
    • В случае отказа мастера, одна из реплик может быть вручную или автоматически повышена до нового мастера. Это обеспечивает высокую доступность на чтение и горячий резерв данных.
  2. Redis Sentinel:

    • Это система мониторинга, которая работает поверх репликации. Sentinel автоматически отслеживает состояние мастера и реплик.
    • При отказе мастера Sentinel запускает процедуру выборов и автоматически назначает одну из реплик новым мастером, перенастраивая остальные реплики и сообщая клиентам о новом адресе мастера. Это обеспечивает автоматическое восстановление после сбоя (failover).
  3. 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), чтобы избежать потери данных при перезапуске всех узлов.