J'ai installé 2 nœuds Mariadb Galera (mariadb-galera-10.0.27-linux-x86_64.tar.gz) sur 2 serveurs CentO 6.6.
Une fois installé, je lance node1 avec le paramètre --wsrep-new-cluster
, puis lance node2 sans ce paramètre. Ils fonctionnent bien, les données sont synchronisées avec succès entre 2 nœuds.
Mais, quand j'ai arrêté node1. Node2 toujours en cours d'exécution, mais lorsque j'essaie d'accéder à la base de données. Il montre cette erreur:
use testdb;
ERROR 1047 (08S01): WSREP has not yet prepared node for application use
Qu'est-ce qui se passe dans ce cas? Voici ma configuration sur 2 NODES (adresse IP différente)
[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'
Deux groupes de noeuds
Dans un cluster two-node, une défaillance de single-node provoque l'arrêt du travail de l'autre.
Situation
Vous avez un cluster composé de seulement deux nœuds. L'un des nœuds quitte le cluster de manière disgracieuse. En d’autres termes, au lieu d’être arrêté via init ou systemd, il se bloque ou subit une perte de connectivité réseau. Le nœud qui reste devient non opérationnel. Il en reste ainsi jusqu'à ce que des informations supplémentaires soient fournies par une tierce partie, telle qu'un opérateur humain ou un autre nœud.
Si le nœud restait opérationnel après que l'autre ait quitté le cluster sans grâces, chacun des deux nœuds risquerait de se penser comme étant le composant principal. Pour éviter cela, le nœud devient non opérationnel.
Solutions
Deux solutions s'offrent à vous:
SET GLOBAL wsrep_provider_options = 'pc.bootstrap = YES';
Cela amorce le nœud survivant en tant que nouveau composant principal. Lorsque l'autre nœud revient en ligne ou regagne la connectivité réseau avec ce nœud, il initie un transfert d'état et rattrape ce nœud.
SET GLOBAL wsrep_provider_options = 'pc.ignore_sb = TRUE';
Le nœud reprend le traitement des mises à jour et continuera à le faire, même s'il suspecte une situation de scission du cerveau.
Remarque: l'activation de pc.ignore_sb est dangereuse dans une configuration multi-maîtres, en raison du risque susmentionné pour les situations à cerveau divisé. Cependant, cela simplifie les choses dans les clusters maître-esclave (en particulier n'utilisez que deux nœuds).
En plus des solutions fournies ci-dessus, vous pouvez éviter la situation entièrement avec Galera Arbitrator. Galera Arbitrator fonctionne comme un nœud impair dans les calculs de quorum. Cela signifie que si vous activez Galera Arbitrator sur un nœud d'un cluster à deux nœuds, ce nœud reste le composant principal, même si l'autre nœud échoue ou perd la connectivité réseau.
http://galeracluster.com/documentation-webpages/twonode.html
La raison probable est que votre node1 s'est effondré de façon disgracieuse, ou du moins que ce soit ce que pensait noeud2. Dans ce cas, le cluster à 2 nœuds atteint une situation de cerveau divisé, où les parties restantes du cluster ne peuvent pas décider si elles sont supposées être le composant principal. C'est pourquoi les clusters à 2 nœuds ne sont pas recommandés.
Consultez les journaux de node1 pour voir s’il s’est arrêté normalement et, le cas échéant, les journaux de node2 pour voir comment il a perçu la situation. S'il voyait un arrêt normal de node1, il dirait quelque chose comme:
[Note] WSREP: forgetting xxxxxxx (tcp://X.X.X.X:XXXX)
etc.; mais s'il pensait que l'autre noeud était perdu, ce serait plutôt comme
[Note] WSREP: (70f85e74, 'tcp://x.x.x.x:xxxx') turning message relay requesting on, nonlive peers: tcp://X.X.X.X:XXXX
etc.
Voir http://nirbhay.in/blog/2015/02/split-brain/ pour plus de détails et consigner des exemples de la situation de division du cerveau.
Le moyen le moins coûteux de l'éviter est de recourir à l'arbitre Galera: http://nirbhay.in/blog/2013/11/what-is-galera-arbitrator/