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

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

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

HA

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

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

  1. Master и Standby развернуты на разных независимых узлах.
  2. Primary и Mirror каждого Segment развернуты на разных узлах.
  3. Primary-узлы Segment распределены децентрализованно.

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

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

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

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

1.1 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.

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

После автоматического повышения Mirror/Standby выполните 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. Отказ кластера

Это означает, что весь кластер недоступен. Вы всё ещё можете получить доступ к MatrixUI через узел 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, который отказался, что привело к недоступности кластера.

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

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

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

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

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

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

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