Способы восстановления MariaDB Galera Cluster

В статье рассмотрен кластер из 3-х серверов с рабочей конфигурацией MySQL Galera Cluster, а также несколько примеров восстановления его работоспособности:

  • GaleraServer-1
  • GaleraServer-2
  • GaleraServer-3

Вариант №1

Все узлы кластера были остановлены в аварийном режиме.

  • GaleraServer-1 - FAILED
  • GaleraServer-2 - FAILED
  • GaleraServer-3 - FAILED

Для восстановления, на всех узлах кластера пропишем:

mysqld_safe --wsrep-recover

Вывод команды будет таким:

GaleraServer-2 mysqld_safe: WSREP: Recovered position 983269fb-f7c1-11e6-b511-43f8ac2c2e03:1741309275417

где,

983269fb-f7c1-11e6-b511-43f8ac2c2e03 - UUID узла кластера;

1741309275417 - WSREP позиция.

Затем определяем узел, на котором были последние изменения и запускаем с ключом --wsrep_new_cluster:

/etc/init.d/mysql --wsrep_new_cluster

После успешного запуска выполняем старт сервиса MySQL на остальных узлах.

Вариант №2

Два узла кластера были остановлены в аварийном режиме.

  • GaleraServer-1 - FAILED
  • GaleraServer-2 - FAILED
  • GaleraServer-3 - RUNNING

По каким-то причинам вышло из строя два узла кластера, один остался работать. Чтобы восстановить, необходимо узлу сообщить, что он является Primary Component в кластере.

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

SET GLOBAL wsrep_provider_options='pc.bootstrap=true';

После этого запускаем остальные узлы кластера.

Вариант №3

Один из узлов кластера был остановлен в аварийном режиме.

  • GaleraServer-1 - FAILED
  • GaleraServer-2 - RUNNING
  • GaleraServer-3 - RUNNING

В этом случае все просто - запускаем остановленный узел и кластер восстановится в автоматическом режиме.

Вариант №4

Два узла кластера были остановлены нормальным способом.

  • GaleraServer-1 - STOPPED
  • GaleraServer-2 - STOPPED
  • GaleraServer-3 - RUNNING

Если у нас выключено два узла кластера, но при этом один продолжает работать в нормальном режиме, то на первом и втором узле необходимо запустить сервис следующим образом:

service mysql start --wsrep_sst_donor=<wsrep_node_name>

где wsrep_node_name - по-умолчанию это имя сервера.

Вариант №5

Один из узлов был остановлен нормальным способом.

  • GaleraServer-1 - STOPPED
  • GaleraServer-2 - RUNNING
  • GaleraServer-3 - RUNNING

Узел был отключен командой systemctl stop mariadb, например, для изменения конфигурации. После этого привычно запускаем сервис и кластер восстановится автоматически.

Вариант №6

Все узлы кластера были остановлены нормальным способом.

  • GaleraServer-1 - STOPPED
  • GaleraServer-2 - STOPPED
  • GaleraServer-3 - STOPPED

По каким-то обстоятельствам все узлы кластера были остановлены нормальным способом. Для того, чтобы вернуть его в работу необходимо сравнить значение seqno из файла /var/lib/mysql/grastate.dat на всех узлах. Узел на котором seqno имеет наибольшее значение запускаем первым:

service mysql start --wsrep_new_cluster

После успешного запуска, следом запускаем остальные узлы привычным способом:

service mysql start

Вариант №7

Ситуация split brain («расщепление мозга»).

Для исключения получения такой ситуации, в кластере должно быть нечетное количество узлов. Лучшим способом для этого будет использовать Galera Arbitrator.