====== MariaDB Galera Cluster: Несколько способов восстановления ======
Варианты восстановления работоспособности **MySQL Galera** кластера.
В статье будет рассмотрен кластер из 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'' - по-умолчанию это имя сервера.
===== Случай 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** (//“расщепление мозга”//)
Для исключения получения такой ситуации, в кластере должно быть нечетное количество узлов. Лучшим способом для этого будет использовать [[http://galeracluster.com/documentation-webpages/arbitrator.html|Galera Arbitrator]]