Варианты восстановления работоспособности 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> |
где 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