Как называется процесс переключения на резервный узел (Replica) при отказе основного узла (Master) в системах с репликацией?

Ответ

Этот процесс называется Failover (переключение при отказе).

Failover — это автоматический процесс, при котором система обнаруживает отказ основного узла (Master) и назначает один из резервных узлов (Replica/Slave) новым основным узлом для обеспечения непрерывной работы сервиса.

Важно отличать его от Switchover — это плановое, управляемое администратором переключение ролей между узлами, например, для проведения технического обслуживания.

Ключевые этапы и проблемы Failover:

  1. Обнаружение сбоя (Failure Detection): Система должна надежно определить, что Master недоступен. Обычно это делается с помощью heartbeat-сигналов или health-check запросов.

  2. Выбор нового мастера (Leader Election): Резервные узлы должны договориться между собой, кто из них станет новым Master. Для этого используются алгоритмы консенсуса, такие как Raft или Paxos, чтобы избежать ситуации, когда несколько узлов одновременно считают себя мастерами.

  3. Перенастройка системы (Reconfiguration): Клиенты и остальные реплики должны быть уведомлены о новом Master, чтобы направлять запросы на запись по правильному адресу.

  4. Предотвращение Split-Brain: Это критическая проблема, когда из-за сбоя сети части системы изолируются друг от друга, и в каждой части выбирается свой Master. Это приводит к рассогласованию данных. Алгоритмы консенсуса и использование кворума помогают предотвратить Split-Brain.

В Go-приложениях логика failover обычно не пишется с нуля, а делегируется специализированным системам, таким как etcd, Consul, или встроенным механизмам баз данных (например, Patroni для PostgreSQL, Redis Sentinel).

Ответ 18+ 🔞

А, слушай, вот эта штука — Failover, она же переключение при отказе, блядь.

Представь себе: у тебя есть главный узел, Мастер, царь и бог. И вдруг он, сука, накрывается медным тазом — сервер сдох, сеть отвалилась, или он просто решил, что ему похуй. Так вот, Failover — это когда система сама, без твоего кривого вмешательства, понимает, что царь-то приказал долго жить, и тут же назначает нового царя из числа его холопов, то есть из реплик. Чтобы сервис, ёпта, не дрых, а работал дальше, как ни в чём не бывало.

Не путай, сука, с Switchover'ом — это когда ты, как мудрый администратор, сам говоришь: «Так, Вася, ты сегодня Мастер, Петя, иди в реплику». Планово, для апгрейда или чтобы почесать ему спинку.

А теперь, блядь, соль на рану, то есть ключевые этапы этого цирка:

  1. Обнаружение, что царь сдох. Тут система тыкает его палкой — отправляет heartbeat-сигналы или health-check'и. Если три раза пнул, а он не очнулся — значит, труп. Пора выбирать нового.

  2. Выбор нового пахана. Все реплики смотрят друг на друга и начинают: «А может, я?» — «Нет, я!». Чтобы не началась драка и не появилось десять Мастеров одновременно, используют умные алгоритмы, типа Raft или Paxos. Они как мудрые старейшины, которые говорят: «Так, Петька, сегодня ты главный, остальные — молчите в тряпочку».

  3. Всем рассказать про нового царя. Клиенты и остальные узлы должны узнать, куда теперь слать данные для записи. А то получится, что все пишут в старого покойника, а новый Мастер сидит и курит бамбук.

  4. Самая жопа — предотвратить Split-Brain (раскол мозга). Это когда из-за ебанутой сети система делится на два лагеря, и в каждом свой Мастер. И каждый начинает писать свою версию правды. Полный пиздец и рассогласование данных. Вот эти алгоритмы консенсуса как раз и не дают такой пиздопроебибне случиться, требуя, чтобы за нового царя проголосовало большинство (кворум).

И главное, чувак, не надо это городить на Go с нуля, ебать мои старые костыли! Для этого есть специальные инструменты — etcd, Consul, или встроенные в БД механизмы (типа Patroni для PostgreSQL или Redis Sentinel). Они уже всё придумали, чтобы у тебя голова не болела. Бери и пользуйся.