Восстановление после сбоев

YMatrix — это высокодоступная распределённая база данных, поддерживающая восстановление после отказа узлов. Предпосылкой высокой доступности является избыточное развертывание: узел-мастер должен иметь резервный узел (Standby), а для узла данных (Segment) основной узел (Primary) должен иметь соответствующий зеркальный узел (Mirror).

Схема развертывания системы с высокой доступностью выглядит следующим образом:

HA

При отказе узла в кластере вы можете получить информацию о статусе узла через графический интерфейс (MatrixUI). В примере кластера мастер — mdw, Standby — smdw, сегменты — sdw1 и sdw2, каждый из которых имеет соответствующий Mirror.

Статус развертывания:

  1. Мастер и Standby развернуты на разных независимых узлах.
  2. Основной и резервный узлы каждого сегмента развернуты на разных узлах.
  3. Основные узлы сегментов развернуты децентрализованно.

Данный метод развертывания предотвращает недоступность системы при отказе одного хоста и распределяет нагрузку по кластеру.

Далее кратко описаны принципы автоматического обслуживания кластера YMatrix и решения для различных сценариев отказа узлов разных ролей.

1 Принцип работы

YMatrix поддерживает службу кластера для автоматизации обслуживания. Эта служба включает две основные функции: Failover и Failback, реализованные с помощью инструмента mxrecover. Используя эти функции, можно полностью восстановить работу после отказа узла.

1.1 Failover

Автоматический отказ (failover) — это механизм в системе автоматического обслуживания, который переключает работу с отказавшего узла на резервный, используя диагностическую информацию о состоянии узлов из кластера etcd. Кластер etcd является ключевым компонентом службы состояния кластера YMatrix и отвечает за управление статусом всех узлов. При отказе любого узла в кластере система автоматически выполняет переключение без вмешательства оператора.

1.2 Failback

После завершения автоматического отказа соответствующий узел имеет только Primary/Master, но отсутствует здоровый резервный узел. При повторном сбое восстановление невозможно. Поэтому необходимо использовать инструмент mxrecover для создания новых здоровых Mirror/Standby для нового Primary/Master.

Инструмент mxrecover предоставляет следующие возможности:

  • Активация отказавшего узла Mirror/Standby
  • Создание нового Mirror/Standby и его повышение до роли Primary/Master
  • Полное восстановление распределения ролей узлов до первоначального состояния

Примечание!
Подробности использования инструмента mxrecover см. в документации: mxrecover.

2 Сценарии отказа различных узлов

2.1 Отказ Mirror / Standby

Когда система обнаруживает, что Mirror / Standby недоступен, статус узла в графическом интерфейсе изменяется на down.

Примечание!
Отказ Mirror не приводит к недоступности кластера, поэтому система не активирует Mirror автоматически.
Для активации Mirror необходимо использовать инструмент mxrecover. Подробности ниже.

Если интервал простоя короткий, а объем данных на отказавшем узле невелик, рекомендуется сначала попробовать инкрементальное восстановление. Инкрементальный режим используется, когда после команды mxrecover не указаны параметры или указан только -c. Если инкрементальное восстановление не удается, необходимо выполнить полное копирование данных — используйте команду mxrecover -F.

2.2 Отказ Primary/Master

Когда система обнаруживает отказ Primary, соответствующий Mirror автоматически повышается до роли Primary.

На рисунке ниже показан отказ мастера (Master) и завершенное переключение на резервный узел. Красный цвет слева от прямоугольника указывает на отказ узла, желтый — на успешное выполнение failover.

Следующие два рисунка демонстрируют отказ узла данных (Segment) и завершенное переключение мастер-слейв.

2.2.1 Активация отказавшего Mirror / Standby

После автоматического повышения Mirror/Standby до роли Primary выполните mxrecover, чтобы создать соответствующий Mirror/Standby для нового Primary/Master и синхронизировать данные узла полностью или инкрементально, восстановив отказавший узел. Выполните mxrecover для немедленной активации отказавшего Mirror/Standby и инкрементального восстановления данных. Как указано выше, если требуется полное восстановление, используйте команду mxrecover -F.

[mxadmin@mdw ~]$ mxrecover

2.2.2 Перераспределение ролей узлов

Хотя mxrecover создал новый Mirror для нового Primary-узла, это привело к новой проблеме: распределение Primary-узлов изменилось, и оба Primary-узла теперь находятся на sdw2. Это вызовет неравномерное распределение ресурсов хоста, и sdw2 будет нести повышенную нагрузку.

Команда для перераспределения:

[mxadmin@mdw ~]$ mxrecover -r

После выполнения mxrecover -r вы можете проверить результат на странице управления кластером графического интерфейса.

3 Влияние автоматического отказа на различные компоненты и рекомендуемые действия

Автоматический отказ Master происходит в двух случаях:

  • Отказ кластера (графический интерфейс показывает отказ кластера — кластер полностью недоступен, чтение и запись невозможны).
  • Исключение кластера (графический интерфейс показывает исключения — в кластере есть неполадки, но в целом он доступен, чтение и запись возможны).

Ниже описано влияние автоматического отказа Master на различные компоненты и рекомендуемые действия в этих сценариях.

3.1 Графический интерфейс (MatrixUI)

  1. Исключение кластера

В этом случае автоматически выполняется отказ Master и переключение на Standby для управления кластером.

В этот момент пользователь должен подключиться к графическому интерфейсу на узле Standby, как указано в подсказке. Стандартный адрес: http://<standbyIP>:8240.

Вы можете войти в систему с паролем базы данных mxadmin или суперпаролем /etc/matrixdb5/auth.conf на узле Standby:

Все функции работают нормально после входа.

  1. Отказ кластера

В этом случае кластер больше недоступен. Тем не менее, вы можете проверить статус кластера через графический интерфейс, подключившись к Master, но функции запросов к базе данных будут ограничены.

Примечание!
Если при установке кластера Standby не был настроен, но позже добавлен с помощью инструмента mxinitstandby, это не отличается от случая, когда Standby был настроен изначально.

Примечание!
Рекомендуется настраивать Standby в продакшн-средах.

3.2 MatrixGate

  1. Исключение кластера

В этом случае автоматически выполняется отказ Master и переключение на Standby для управления кластером.

Здесь возможны два сценария:

  • Если Standby был настроен до запуска MatrixGate: при запуске MatrixGate информация о подключении Standby определяется автоматически без вмешательства.
  • Если Standby был добавлен после запуска MatrixGate: поскольку MatrixGate в текущей версии распознает наличие Standby только при запуске, добавленный позже Standby не позволит MatrixGate автоматически переключиться. Рекомендуется сначала настроить Standby, а затем развернуть MatrixGate, либо перезапустить MatrixGate после добавления Standby.
  1. Отказ кластера

В этом случае MatrixGate должен работать на хосте Master, но поскольку Master недоступен, кластер полностью недоступен.

В этом сценарии процесс MatrixGate можно считать завершившимся вместе с хостом или изолированным от сети других узлов на выключенном хосте.

3.3 Мониторинг (развертывание через SELECT mxmgr_init_local())

  1. Исключение кластера

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

Если необходимо просмотреть страницу мониторинга Grafana, необходимо вручную изменить источник данных и указать адрес Standby.

  1. Отказ кластера

В этом случае сервис MatrixGate, отвечающий за мониторинг, завершил работу, и новые данные мониторинга больше не генерируются.