Как восстановить Galera Cluster for MySQL

Представим, что у нас есть обычный кластер MariaDB Galera Cluster из трех узлов.

Вариант №1

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

  • Node #1 - down
  • Node #2 - up
  • Node #3 - up

Вы выключили узел service mysql stop, что-то поделали и после этого включили. После этого кластер востановится в автоматическом режиме.

Вариант №2

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

  • Node #1 - down
  • Node #2 - down
  • Node #3 - up

Если у вас выключено два узла, а один работает в нормальном режиме. То нужно, запустить на первой и второй ноде mysql таким образом

service mysql start --wsrep_sst_donor=<wsrep_node_name>

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

Вариант №3

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

  • Node #1 - down
  • Node #2 - down
  • Node #3 - down

Так получилось, что пришлось остановить все узлы кластера, что бы вернуть его в работу нужно. Сравнить значение seqno из файла /var/lib/mysql/grastate.dat на всех узлах. Узел на котором seqno имеет наибольшее значение включаем первым,

service mysql start --wsrep_new_cluster

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

Вариант №4

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

  • Node #1 - crash
  • Node #2 - up
  • Node #3 - up

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

Вариант №5

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

  • Node #1 - crash
  • Node #2 - crash
  • Node #3 - up

Остался один работающий узел, остальные были аварийно выключены. Нужно принудительно указать узлу, что он является основным узлом (Primary Component) кластере до того как будет включены остальные узлы. Нужно проверить еще раз то, что остальные узлы действительно выключены и после этого на узле запустить

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

Вариант №6

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

  • Node #1 - crash
  • Node #2 - crash
  • Node #3 - crash

На всех узлах кластера запускается

mysqld_safe --wsrep-recover

в выводе будет что-то вроде

node-1 mysqld_safe: WSREP: Recovered position ab5647ad-30ab-11e5-9b46-5faf62b316fb:379405932

, где

  • ab5647ad-30ab-11e5-9b46-5faf62b316fb - uuid узла
  • 379410507 - значение wsrep позиции.

Находим узел на которым были последние изменения, включаем первым,

service mysql start --wsrep_new_cluster

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

Вариант №7

Ситуация split brain

Что бы такой ситуации не было нужно, что бы число узлов в кластере было нечетным. Лучший способ использовать arbitrator.

­

Comments powered by Disqus