Galera topology changes

Galera est un puissant outil de clustering MySQL en multi-maître. Il permet de changer la topologie du cluster à chaud, c’est ce que nous allons voir ici.

Ajouter un noeud

Pour ajouter un noeud, installez simplement votre MySQL en mode Galera en vous assurant que la valeur de wsrep_cluster_address correspond à des noeuds existants.

Par exemple, vous avez les nodes suivants:

  • 10.1.1.1
  • 10.1.1.2

Vous souhaitez ajouter 10.1.1.33 au cluster, configurez wsrep_cluster_address de la manière suivante:

wsrep_cluster_address = gcomm://10.1.1.1,10.1.1.2

Redémarrez ensuite le nouveau noeud, il va rejoindre le cluster:

2020-02-04 14:16:04 0 [Note] WSREP: Shifting OPEN -> PRIMARY (TO: 13117042)
2020-02-04 14:16:04 115 [Note] WSREP: New cluster view: global state: 2701d088-7498-4ca6-8a21-34c4295b874a:13117042, view# 12: Primary, number of nodes: 3, my index: 2, protocol version 3
...
2020-02-04 14:16:04 0 [Note] WSREP: Shifting JOINER -> JOINED (TO: 13117045)
2020-02-04 14:16:04 0 [Note] WSREP: Member 3.0 (mynewnode3.example.org) synced with group.
2020-02-04 14:16:04 0 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 13117045)

Changer la topologie à chaud

Si vous êtes amenés à remplacer des nodes ou à les migrer, vous aurez besoin de reconfigurer la topologie de votre cluster.

Vous pourriez changer wsrep_cluster_address dans la configuration fichier et ensuite redémarrer MySQL, mais niveau haute disponibilité ce n’est pas top. Il est possible de changer cette valeur à chaud.

Depuis le prompt MySQL, entrez simplement:

set global wsrep_cluster_address='gcomm://10.1.1.2,10.1.1.3';

Le noeud courant va se déconnecter et reconnecter, cela engendre 2-3 secondes de lag sur le noeud, si vous avez un load balancer type haproxy ou proxysql, retirez le node du pool avant d’effectuer l’opération.

Retirer un node du cluster

Sur le noeud à supprimer récupérez déjà son identifiant unique:

show global status like 'wsrep_gcomm_uuid';

Ensuite, sur l’un des noeuds du cluster qui va persister, demandez l'éviction du node:

set global wsrep_provider_options="evs.evict=f8f543d0-47f4-11ea-ad75-2b212fde7675";

Le node a été supprimé du cluster et a clotûré son processus Galera, vous pouvez désormais le décomissionner.