« Back
in Percona XtraBackup Replication Haute Disponibilités Architecture read.

Percona XtraDB Cluster - MariaDB maitre - maitre.

Percona XtraDB Cluster est une solution permettant de faire de la haute disponibilité et/ou de la redondance facilement avec MariaDB.

Il permet notamment :

  • De faire de la réplication synchrone.
  • De faire du multi-maitre (vous pouvez écrire sur n'importe quel cluster).

Voici une architecture typique avec un Fail Over en place de Front1 vers Front2 :

Schema Architecture serveur avec Percona Cluster

Ici chaque Front écrit directement sur son propre serveur Data.
Front1 écrit sur Data1 et Front2 écrit sur Data2.

On peut imaginer rajouter un serveur d'API par exemple sur Data3 qui pourrait directement écrire sur Data3. Ou par exemple, mettre en place une IPFail Over : si Data2 tombe, le traffic serait redirigé vers Data3. Les possibilités sont nombreuses et dépendent de vos contraintes.

Il est conseillé d'avoir au moins 3 serveurs dans vos clusters afin d'éviter un problème connu sous le nom de split brain.

Le split brain

Je vais essayer de l'expliquer simplement. Dans notre schéma Data1 est le serveur "main". Il y a toujours un serveur "main" qui permet de définir les régles de synchronisation.

  1. Suite à un problème sur le switch devant le Data1, celui-ci va devenir inaccessible durant quelques secondes, suffisamment pour que Data2 n'arrive plus à communiquer avec lui.

  2. S'il n'y avait que deux serveurs, Data2 deviendrait alors le "main" serveur.

  3. Le problème sur le switch se règle tout seul, et Data1 revient se considèrant toujours comme "main" serveur.

  4. Les deux n'arriveraient pas à communiquer se croyant tout deux maitres. C'est la situation du split brain. Il faut qu'il y ait un vote à majorité pour que la situation se débloque, comme ceci par exemple :

Data1 vote Data1
Data2 vote Data2
Data3 vote Data1 => donc Data1 "main".

Il est possible d'avoir seulement deux serveurs MariaDB Maitre-Maitre avec l'ajout d'un serveur fake (ne servant que pour le vote) : regarder du coté de l'utilitaire garbd

Plus d'informations sur le Split Brain

Il est à priori aussi possible de ce servir de Garbd en tant que relai de communication. Je vous laisse voir la documentation : Garbd

Configuration de Percona

Cette documentation permet de créer une architecture en cluster du type maitre-maitre grâce à la suite Percona.

Afin d'utiliser la suite percona, nous avons besoin d'ajouter les repos de percona :

1 - Se connecter avec l'utilisateur root sur le serveur data.

2 - Lancer la ligne de commande suivante :

apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A  

2.1 - Ajouter Percona au fichier source.list :

2.2 - A la fin du fichier /etc/apt/source.list ajouter les lignes suivantes :

deb http://repo.percona.com/apt [VERSION] main  
deb-src http://repo.percona.com/apt [VERSION] main  

2.3 - Puis lancer la mise à jour de votre aptitude :

apt-get update  
apt-get install percona-server-server-5.6 percona-server-client-5.6  
apt-get install percona-xtradb-cluster-56  
service mysql stop  

3 - Mettre en place la configuration de base, éditer le fichier suivant /etc/mysql/conf.d/galera.cnf :

[mysqld]

#mysql settings
binlog_format=ROW  
default-storage-engine=innodb  
innodb_autoinc_lock_mode=2  
query_cache_size=0  
query_cache_type=0  
bind-address=0.0.0.0  
  1. Editer ensuite le fichier suivant /etc/mysql/conf.d/wsrep.cnf :
[mysqld]
#galera settings

wsrep_provider=/usr/lib/libgalera_smm.so  
wsrep_cluster_name="mon_site_cluster"  
wsrep_cluster_address="gcomm://10.0.0.300,10.0.0.301,10.0.0.302"

wsrep_node_address='10.0.0.300'  
wsrep_node_name='node1'  
wsrep_sst_method=rsync  
# optional settings
wsrep_retry_autocommit=5  

Voici les variables importantes :

  • wsrep_cluster_name : Le nom de votre ensemble de cluster, il doit être identique sur l'ensemble des clusters.
  • wsrep_cluster_address : L'adresse ip de l'ensemble de vos cluster en commencant par gcomm:// et séparer par des ,
  • wsrep_node_address : L'adresse du serveur que vous êtes en train d'éditer
  • wsrep_node_name : Le nom du serveur que vous êtes en train d'éditer.

5 - Sur chaque cluster data que vous voulez mettre en place, il faut refaire les étapes 1, 2, 3 et 4.

Lancer le cluster percona et vérifier son état

Pour lancer le cluster principal, il suffit de faire la commande suivante :

service mysql bootstrap-pxc  

Pour vérifier si le serveur est ok, vous pouvez lancer la commande suivante :

mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'  

Vous devez avoir normalement le résultat suivant :

+--------------+
| cluster size |
+--------------+
| 1            |
+--------------+

Ensuite sur chaque noeud, il suffit de lancer le serveur mariaDB comme d'habitude :

service mysql start  

Je vous conseille de vérifier après chaque lancement que tout est ok :

mysql -u root -p -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'  

Par exemple avec un cluster de 3 serveurs, voici le résultat attendu :

+--------------+
| cluster size |
+--------------+
| 3            |
+--------------+

XtraBackup - ne pas bloquer votre cluster lors de sa synchronisation.

Percona XtraBackup est un outil open-source permettant de faire un backup à chaud de votre base de données pour MySQL. Ceci permet de ne pas bloquer (en écriture) votre serveur durant cette étape.

Configuration du cluster Percona avec XtraBackup

1 - Se connecter à vos serveurs data avec l'utilisateur root
2 - Ajouter la clé afin de pouvoir installer xtrabackup, utiliser la commande suivante :

apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A  

3 - Créer le fichier suivant :

vi /etc/apt/sources.list.d/percona.list  

6 - Il suffit ensuite d'installer avec aptitude xtrabackup.

root@debian7: apt-get install xtrabackup  

7 - Il suffit ensuite de simplement éditer le fichier de configuration de percona et changer la méthode de Synchronisation SST :

wsrep_sst_method = xtrabackup  

Effectuer un backup avec Xtrabackup pour Percona

Pour effectuer un backup avec xtrabackup, il suffit de lancer la commande suivante :

innobackupex --galera-info --user=xxxxx --password=xxxx <backup_directory>  

Effectuer une restauration de vos données pour Percona

cp -Rf <backup_directory> /var/lib/mysql/  
chown -Rf mysql. /var/lib/mysql/  
cat <backup_directory>/xtrabackup_galera_info  
cfa9b8f1-f37b-11e2-0800-b37f8ac5092c:1  
service mysql start --wsrep_cluster_address='gcomm://<ip_node_1>' --  
wsrep_start_position="cfa9b8f1-f37b-11e2-0800-b37f8ac5092c:1"  

Faire une maintenance sur le serveur "main"

Sur chaque cluster hormis le serveur ciblé, il faut forcer le changement vers un autre cluster :

SET GLOBAL wsrep_cluster_address='gcomm://[AN OTHER IP CLUSTER]';  

Vérifier que tout est ok :

MariaDB [(none)]> SHOW VARIABLES LIKE 'wsrep_cluster_address';  

Définir le serveur relais en cas d'échec du main serveur

Il est possible de définir quel cluster deviendra le prochain cluster "main".

Pour ceci, il faut mettre en place la variable wsrep-sst-donor avec la valeur du wsrepnodename ciblé.

wsrep-sst-donor=[YOUR NEXT MAIN NODE]  

Merci à lbaey pour la relecture.

comments powered by Disqus