Какие механизмы отказоустойчивости есть в 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), чтобы избежать потери данных при перезапуске всех узлов.

Ответ 18+ 🔞

Ага, вот смотри, Redis — он как тот здоровый мужик в спортзале, который может тачку одной рукой поднять, но если он один и сердце ёкнуло — всё, пиздец, система легла. «Из коробки» одинокий инстанс — это не отказоустойчивость, а русская рулетка, только без ствола, сразу в лоб.

Но не всё так печально, у него в арсенале есть три основных приёма, чтобы не облажаться:

  1. Репликация (Мастер-Слейв): Представь, есть главный по хате (мастер), который всё пишет. А вокруг него — его верные холуи (слейвы), которые тупо копируют всё, что он делает. Мастер сдох — данные-то на слейвах есть, можно вручную одного из них короновать в нового короля. Читать можно со всех, это да. Но автоматики ноль — нужно бегать с криком «ААА, всё упало!».

  2. Сентинель (Sentinel): Это уже поинтереснее. Это как если бы к тому мастеру и его слейвам приставили трёх параноиков с рациями. Эти параноики только и делают, что смотрят, дышит ли мастер. Как только он перестаёт отзываться — они собирают тайный совет (кворум), и один из слейвов получает погоны мастера. Всё автоматически, красиво. Клиентам кричат: «Эй, мудаки, новый мастер вот там, идите к нему!». Отказоустойчивость на уровне «поднять и забыть».

  3. Кластер (Cluster): Это уже тяжелая артиллерия, ёпта. Тут и данные по разным серверам шардятся (чтобы память не хуячило один узел), и у каждого шарда (мастера) есть свои личные слейвы-телохранители. Упал один мастер — его слейв моментально занимает трон, и кластер даже не моргнёт. Это овердохуища надёжности и масштабируемости в одном флаконе.

# Конфиг сентинеля, если коротко
sentinel monitor mymaster 127.0.0.1 6379 2
# ^ Следим за мастером. Два сентинеля должны сказать "да, он мёртв", чтобы начался переполох.

sentinel down-after-milliseconds mymaster 5000
# ^ Если мастер не дышит 5 секунд — считаем, что он в отключке.

sentinel failover-timeout mymaster 60000
# ^ Столько времени даём на всю эту движуху с выбором нового пахана.

И главное, запомни как «Отче наш»: все эти крутые схемы с репликами и кластерами — нихуя не стоят, если ты не настроил персистентность (RDB или AOF). Потому что если все узлы разом перезагрузить, а данные только в оперативке были — это не отказоустойчивость, а просто пиздец и потеря всех данных. Диск — твой друг, даже в 2024 году.