Вот как Redis Cluster обрабатывает сбои узлов:
Автоматическое аварийное переключение
При сбое главного узла Redis Cluster кластер автоматически повышает один из узлов реплики этого мастера до нового мастера. Этот процесс переключения происходит автоматически, без какого-либо ручного вмешательства.
Ключевые этапы процесса аварийного переключения:
1. Другие узлы в кластере обнаруживают, что главный узел вышел из строя, либо с помощью протокола рассылки кластера, либо путем попытки подключения к узлу.
2. Затем кластер проводит выборы узлов реплики для этого мастера. Реплика с наиболее актуальными данными выбирается новым мастером.
3. Выбранный узел реплики становится новым мастером. Затем другие реплики перенастраиваются для репликации с нового мастера.
4. Клиенты перенаправляются на новый главный узел с использованием ответа об ошибке MOVED, который содержит новое сопоставление слота с узлом.
Покрытие слотов
Чтобы оставаться доступным во время сбоев узлов, Redis Cluster требует, чтобы большинство главных узлов были доступны и могли взаимодействовать. Это известно как поддержание «охвата слотов».
Каждый главный узел в кластере отвечает за подмножество из 16 384 хеш-слотов. Пока большинство мастеров доступны и могут обслуживать назначенные им слоты, кластер может продолжать работать.
Если слишком много главных узлов выйдет из строя и оставшиеся главные узлы не смогут охватить весь диапазон хэш-слотов, кластер станет недоступным до тех пор, пока вышедшие из строя узлы не восстановятся или не будут заменены.
Продвижение реплик
Redis Cluster использует узлы реплик для обеспечения высокой доступности. При выходе из строя мастера один из его узлов-реплики автоматически становится новым мастером.
Реплика с наиболее актуальными данными выбирается новым мастером. Это обеспечивает сохранение согласованности данных во время процесса аварийного переключения.
Обработка разделенного мозга
Redis Cluster использует подход на основе кворума для обработки сетевых разделов и позволяет избежать сценариев «разделения мозгов», когда кластер делится на несколько независимых кластеров.
Если большинство главных узлов станут недоступными, оставшиеся узлы будут отклонять клиентские запросы до тех пор, пока раздел не будет разрешен. Это обеспечивает сохранение согласованности данных.
Используя эти механизмы автоматического переключения при сбое и кворума, Redis Cluster может обеспечить высокую доступность и устойчивость перед лицом сбоев узлов и сетевых разделов.
Цитаты:[1] https://yifan-online.com/en/km/article/detail/16750
[2] https://stackoverflow.com/questions/63878562/two-failure-support-in-3-node-redis-cluster
[3] https://redis.io/docs/latest/operate/oss_and_stack/management/scaling/
[4] https://redis.io/docs/latest/commands/cluster-nodes/
[5] https://github.com/lettuce-io/lettuce-core/issues/2318