Introduction
Percona XtraDB Cluster est une solution de haute disponibilité et d'évolutivité pour les utilisateurs de MySQL.
Percona XtraDB Cluster fournit :
- Réplication synchrone. Transaction engagée sur tous les nœuds ou aucune.
- Réplication multi-maîtres. Vous pouvez écrire sur n'importe quel nœud.
- Application parallèle d'événements sur l'esclave. Véritable “réplication parallèle”.
- Provisionnement automatique des nœuds.
- Cohérence des données. Plus d'esclaves non synchronisés.
Percona XtraDB Cluster est entièrement compatible avec MySQL ou Percona Server for MySQL au sens suivant :
- Compatibilité des données. Percona XtraDB Cluster fonctionne avec les bases de données créées dans MySQL/Percona Server for MySQL.
- Compatibilité avec les applications. Il n'y a pas ou peu de modifications à apporter aux applications pour commencer à travailler avec Percona XtraDB Cluster.
Prérequis
2 machines BDD qui seront nommée :
- pxc1.oowy.lan (192.168.1.80)
- pxc2.oowy.lan (192.168.1.81)
1 machine Arbitre nommée :
- pxc3.oowy.lan (192.168.1.82)
Chaque nœud requiert au minimum :
- 1GHz 1 CPU
- 512Mo de RAM
- 100 Mbps de connexion réseau
Dans notre test, nous disposerons de :
- 1 CPU
- 2Go de RAM
- 100 Mbps de connexion réseau
Architecture
…
TODO
…
Galera Arbitrator
Lorsque vous déployez Percona XtraDB Cluster, il est recommandé d'utiliser au moins trois instances : Trois nœuds, trois centres de données, etc.
Si le coût de l'ajout de ressources (par exemple, un troisième centre de données) est trop élevé, vous pouvez utiliser Galera Arbitrator. Galera Arbitrator est membre d'un cluster qui participe au vote, mais pas à la réplication proprement dite.
Important:
Bien que Galera Arbitrator ne participe pas à la réplication, il reçoit les mêmes données que tous les autres nœuds.
Vous devez sécuriser sa connexion réseau.
Galera Arbitrator a deux objectifs :
- Lorsque vous avez un nombre pair de nœuds, il fonctionne comme un nœud impair, pour éviter les situations split-brain.
- Il peut également demander un instantané cohérent de l'état des applications, ce qui est utile pour effectuer des sauvegardes.
Plateforme Percona XtraDB Cluster
Installez Percona XtraDB Cluster sur tous les hôtes que vous prévoyez d'utiliser comme nœuds de cluster et assurez-vous que vous avez un accès root au serveur MySQL sur chacun d'eux.
Il est recommandé d'installer Percona XtraDB Cluster à partir des dépôts officiels de logiciels Percona en utilisant le gestionnaire de paquets correspondant à votre système.
Repositories
Sous Debian
$ apt-get update $ apt-get install -y wget gnupg2 lsb-release
$ wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
$ dpkg -i percona-release_latest.generic_all.deb
Note:
Vous pouvez vérifier la configuration du dépôt dans le fichier /etc/apt/sources.list.d/percona-release.list.
Sous RedHat
$ yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Note:
Vous pouvez vérifier la configuration du dépôt dans le fichier /etc/yum.repo.d/
Installation Percona XtraDB
Utilisez les commandes suivantes pour installer Percona-XtraDB-Cluster sur les deux noeuds de base de données.
Important:
Action à faire sur les 2 nœuds du cluster. Nous installerons le package Galera sur le troisième !
Sous Debian
On supprime le package “apparmor”
# apt remove apparmor
On installe le package percona-xtradb-cluster
# apt update # apt-get install percona-xtradb-cluster-5.7
On arrête le service MySQL.
# systemctl stop mysql
Sous RedHat
Le module de sécurité SELinux peut limiter l'accès aux données pour le cluster Percona XtraDB. La meilleure solution est de passer du mode “enforcing” au mode “permissive” en exécutant la commande suivante :
setenforce 0
Cela ne change le mode qu'au moment de l'exécution.
Pour exécuter SELinux en mode permissif après un redémarrage, définissez SELINUX=permissif dans le fichier de configuration /etc/selinux/config.
On installe le package percona-xtradb-cluster
# yum install percona-xtradb-cluster-5.7
On arrête le service MySQL.
# systemctl stop mysql
Configuration des nœuds pour la réplication
Après avoir installé le Percona XtraDB Cluster sur les nœuds, configurez-le avec des informations sur le cluster.
Assurez-vous que le serveur Percona XtraDB Cluster ne fonctionne pas.
$ systemctl stop mysql
L'exemple de configuration supposent qu'il y a :
- deux nœuds XtraDB Cluster Percona :
^ Node ^ Host ^ IP ^
| Node 1 | pxc1 | 192.168.70.61 |
| Node 2 | pxc2 | 192.168.70.62 |
Sous Debian
Si vous utilisez Debian ou Ubuntu, ajuster les variables de configuration suivantes au fichier /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf sur le premier nœud :
wsrep_provider=/usr/lib/libgalera_smm.so wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63 wsrep_node_name=pxc1 wsrep_node_address=192.168.70.61 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:passw0rd pxc_strict_mode=ENFORCING binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2
Sous RedHat
Si vous utilisez RedHat ou CentOS, ajuster les variables de configuration suivantes au fichier /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf sur le premier nœud :
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_name=pxc-cluster wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63 wsrep_node_name=pxc1 wsrep_node_address=192.168.70.61 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:passw0rd pxc_strict_mode=ENFORCING binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2
Cluster global
Utilisez la même configuration pour les deuxième nœuds, à l'exception des variables wsrep_node_name et wsrep_node_address :
Pour le deuxième nœud :
wsrep_node_name=pxc2 wsrep_node_address=192.168.70.62
Installation de Galera Arbitrator
Maintenant que l'on a installer Percona XtraDB sur les 2 noeuds de base de données, il nous faut installer le package percona-xtradb-cluster-garbd-5.7 sur notre noeud qui fera office d'arbitre.
Mais avant, on supprime le package “apparmor”
# apt remove apparmor
- un nœud XtraDB Cluster Garbd (Arbitre galera) :
^ Node ^ Host ^ IP ^
| Node 3 | pxc3 | 192.168.70.63 |
Sous Debian
# apt-get install percona-xtradb-cluster-garbd-5.7
Sous RedHat
# yum install Percona-XtraDB-Cluster-garbd-57
Configuration de Galera Arbitrator
- GALERA_NODES : doit contenir au moins une adresse d'un autre membre du cluster. Il est recommandé de lister tous les membres du cluster. Aucun ordre particulier n'est nécessaire.
- GALERA_GROUP : doit être unique au cluster et doit être identique sur tous les nœuds du même cluster galera.
Sous Debian
# nano /etc/default/garb
...
# A comma-separated list of node addresses (address[:port]) in the cluster GALERA_NODES="192.168.70.61:4567,192.168.70.62:4567,192.168.70.63:4567" # Galera cluster name, should be the same as on the rest of the nodes. GALERA_GROUP="pxc-cluster" ...
Sous RedHat
# vi /etc/sysconfig/garb
...
# A comma-separated list of node addresses (address[:port]) in the cluster GALERA_NODES="192.168.70.61:4567,192.168.70.62:4567,192.168.70.63:4567" # Galera cluster name, should be the same as on the rest of the nodes. GALERA_GROUP="pxc-cluster" ...
Bootstrap du cluster
Après avoir configuré tous les nœuds du cluster, initialisez celui-ci en amorçant le premier nœud. Le nœud initial doit être celui qui contient toutes vos données, que vous voulez répliquer sur d'autres nœuds.
Le bootstrap implique de démarrer le nœud sans aucune adresse de grappe connue. Si la variable wsrep_cluster_address est vide, Percona XtraDB Cluster suppose qu'il s'agit du premier nœud et initialise le cluster.
Au lieu de modifier la configuration, démarrez le premier nœud à l'aide de la commande suivante :
[root@pxc1 ~]# /etc/init.d/mysql bootstrap-pxc
Lorsque vous démarrez le nœud à l'aide de la commande précédente, il fonctionne en mode bootstrap avec wsrep_cluster_address=gcomm://. Cela indique au nœud d'initialiser le cluster avec wsrep_cluster_conf_id réglé sur 1.
Après avoir ajouté d'autres nœuds au cluster, vous pouvez alors redémarrer ce nœud normalement, et il utilisera à nouveau la configuration standard.
mysql@pxc1> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec | | ... | ... | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | ... | ... | | wsrep_cluster_size | 1 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | ... | ... | | wsrep_ready | ON | +----------------------------+--------------------------------------+ 40 rows in set (0.01 sec)
La sortie précédente montre que la taille du cluster est de 1 nœud, qu'il est le composant principal, que ce nœud est à l'état synchronisé, qu'il est entièrement connecté et prêt pour la réplication en écriture.
Avant d'ajouter d'autres nœuds à votre nouveau cluster, créez un utilisateur pour SST et donnez-lui les privilèges nécessaires. Les privilèges doivent correspondre à ceux spécifiés lors de la configuration des nœuds pour la réplication en écriture.
Pour vous assurer que le cluster a été initialisé, exécutez ce qui suit :
mysql@pxc1> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd'; mysql@pxc1> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; mysql@pxc1> FLUSH PRIVILEGES;
Ajout des Nœuds
Après avoir installé le Percona XtraDB Cluster sur chacun des nœuds, et les avoirs configurés avec des informations sur le cluster.
Pour Debian/Ubuntu : Link
Pour RedHat/CentOS : Link
Démarrez le deuxième nœud en utilisant la commande suivante :
[root@pxc2 ~]# /etc/init.d/mysql start
Après le démarrage du serveur, il devrait recevoir automatiquement SST.
Pour vérifier l'état du deuxième nœud, exécutez ce qui suit :
mysql@pxc2> show status like 'wsrep%'; +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec | | ... | ... | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | ... | ... | | wsrep_cluster_size | 2 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | ... | ... | | wsrep_ready | ON | +----------------------------+--------------------------------------+ 40 rows in set (0.01 sec)
Les résultats précédents montrent que le nouveau nœud a été ajouté avec succès au cluster. La taille du cluster est maintenant de 2 nœuds, il est le composant principal, et il est entièrement connecté et prêt à recevoir une réplication en écriture.
Si l'état du deuxième nœud est synchronisé comme dans l'exemple précédent, alors le nœud a reçu la pleine SST, est synchronisé avec le cluster, et vous pouvez procéder à l'ajout du nœud suivant.
Important:
Si l'état du nœud est Joiner, cela signifie que le SST n'est pas terminé.
N'ajoutez pas de nouveaux nœuds tant que tous les autres ne sont pas dans l'état Synced.
Il ne nous reste plus qu'à démarrer le service “garb” galera arbitrator sur notre noeud arbitre.
# systemctl start garb
Le cluster est maintenant être opérationnel.
MariaDB [(none)]> show status like '%wsrep_cluster_size%'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.003 sec)
wsrep_cluster_size indique le nombre de noeuds courant du cluster Percona XtraDB, soit 3 (2 bdd + 1 arbitre).
Annexe
https://www.percona.com/doc/percona-xtradb-cluster/5.7/index.html
https://www.percona.com/doc/percona-xtradb-cluster/5.7/install/index.html
https://www.percona.com/doc/percona-xtradb-cluster/5.7/configure.html
https://www.percona.com/doc/percona-xtradb-cluster/5.7/bootstrap.html
https://www.percona.com/doc/percona-xtradb-cluster/5.7/add-node.html