mariadb galera - ошибка, когда завершение работы узла ОШИБКА 1047 WSREP еще не подготовил узел для использования приложения

Я установил 2 узла Mariadb Galera (mariadb-galera-10.0.27-linux-x86_64.tar.gz) на серверах 2 CentOs 6.6.

После установки запускаю node1 с параметром --wsrep-new-cluster, затем запустите node2 без этого параметра. Они работают нормально, данные успешно синхронизируются между 2 узлами.

Но когда я отключаю узел1. Node2 все еще работает, но когда я пытаюсь получить доступ к базе данных. Это показывает эту ошибку:

use testdb;
ERROR 1047 (08S01): WSREP has not yet prepared node for application use 

Что происходит в этом случае? Вот моя конфигурация на 2 узла (просто другой IP-адрес)

[galera] 
wsrep_on=ON
wsrep_cluster_name='mysql-cluster'
wsrep_provider='/home/mariadb/mariadb-galera/lib/galera/libgalera_smm.so'
wsrep_provider_options="gcache.size=1G"
wsrep_cluster_address="gcomm://10.211.26.116:4567?

pc.wait_prim=no"
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_node_address=10.211.26.117:4567
wsrep_node_name='db2'

2 ответа

ДВОЙНЫЕ КЛАСТЕРЫ

В кластере с двумя узлами сбой одного узла приводит к тому, что другой перестает работать.

ситуация

У вас есть кластер, состоящий только из двух узлов. Один из узлов покидает кластер изящно. То есть, вместо того, чтобы быть выключенным через init или systemd, он падает или теряет сетевое соединение. Оставшийся узел становится неработоспособным. Так остается до тех пор, пока какая-либо дополнительная информация не будет предоставлена ​​третьей стороной, такой как оператор или другой узел.

Если узел оставался работоспособным после того, как другой покинул кластер изящно, возник бы риск того, что каждый из двух узлов будет считать себя основным компонентом. Чтобы предотвратить это, узел становится неработоспособным.

Решения

Вам доступны два решения:

  • Вы можете загрузить оставшийся в живых узел, чтобы сформировать новый основной компонент, используя опцию pc.boostrap wsrep Provider. Для этого войдите в клиент базы данных и выполните следующую команду:

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

Это загружает выживший узел как новый основной компонент. Когда другой узел возвращается в оперативный режим или восстанавливает сетевое соединение с этим узлом, он инициирует передачу состояния и догоняет этот узел.

  • Если вы хотите, чтобы узел продолжал работать, вы можете использовать опцию pc.ignore_sb wsrep Provider. Для этого войдите в клиент базы данных и выполните следующую команду:

SET GLOBAL wsrep_provider_options = 'pc.ignore_sb = TRUE';

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

Примечание Предупреждение: Включение pc.ignore_sb опасно в настройке с несколькими мастерами из-за вышеупомянутого риска для ситуаций с разделенным мозгом. Тем не менее, это упрощает работу в кластерах ведущий-ведомый (особенно в тех случаях, когда вы используете только два узла).

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

http://galeracluster.com/documentation-webpages/twonode.html

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

Проверьте журналы узла 1, чтобы увидеть, нормально ли он выключился, и, если он это сделал, то журналы узла 2, чтобы увидеть, как он воспринял ситуацию. Если бы он видел нормальное отключение узла 1, он бы сказал что-то вроде

[Note] WSREP: forgetting xxxxxxx (tcp://X.X.X.X:XXXX)

так далее.; но если бы он думал, что другой узел был потерян, это было бы больше похоже на

[Note] WSREP: (70f85e74, 'tcp://x.x.x.x:xxxx') turning message relay requesting on, nonlive peers: tcp://X.X.X.X:XXXX

и т.п.

См. http://nirbhay.in/blog/2015/02/split-brain/ для получения более подробной информации и регистрации примеров ситуации с разделенным мозгом.

Самый дешевый способ избежать этого - использовать арбитра Galera: http://nirbhay.in/blog/2013/11/what-is-galera-arbitrator/

Другие вопросы по тегам