Dans le passé, la création d'un service MySQL multimaître sécurisé et tolérant aux pannes était fastidieuse. Cela nécessitait plusieurs étapes et des packages dépendants. La configuration de la réplication, la synchronisation des données et plusieurs fichiers de configuration ont ajouté à la complexité. La création d'une solution sur un système d'exploitation renforcé tel que Red Hat Enterprise Linux (RHEL) 8 et l'utilisation d'une distribution MySQL multimaître professionnelle de Percona facilitent la tâche. Ce guide vous montre comment.
Schéma architectural :
[ Vous pourriez également apprécier : Keepalived et haute disponibilité :sujets avancés ]
Installer le logiciel du cluster
Exécutez les commandes suivantes sur les trois serveurs (DB1 , DB2 , et DB3 ):
# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# percona-release enable-only pxc-80 release
# percona-release enable tools release
# yum repolist
Updating Subscription Management repositories.
repo id repo name
prel-release-noarch Percona Release release/noarch YUM repository
pxc-80-release-x86_64 Percona XtraDB Cluster 8.0 release/x86_64 YUM repository
rhel-8-for-x86_64-appstream-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
rhel-8-for-x86_64-baseos-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
satellite-tools-6.8-for-rhel-8-x86_64-rpms Red Hat Satellite Tools 6.8 for RHEL 8 x86_64 (RPMs)
tools-release-x86_64 Percona Tools release/x86_64 YUM repository
Étant donné que les référentiels RHEL 8 incluent une version de MySQL, vous devez en désactiver l'accès pour que l'installation de Percona se termine avec succès.
# yum -y module disable mysql
# yum -y install percona-xtradb-cluster
Configurer le cluster
Sur la DB1 serveur, démarrez le service de base de données pour y accéder via le client MySQL afin de mettre à jour le mot de passe par défaut et permettre à n'importe quel hôte de se connecter à distance pour la gestion :
# systemctl start mysql
# grep 'temporary password' /var/log/mysqld.log
# mysql -u root -p
Changer le mot de passe root par défaut avec ALTER
commande :
# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'redhatPERCONA';
Activer la connexion depuis n'importe quel hôte avec UPDATE
commande :
# mysql> UPDATE mysql.user SET host='%' WHERE user='root';
Quittez l'administration MySQL :
# mysql> exit
Sur la DB1 serveur, arrêtez le service de base de données :
# systemctl stop mysql
Sur DB2 et DB3 serveurs, démarrez/arrêtez le service MySQL pour créer les structures de fichiers initiales :
# systemctl start mysql
# systemctl stop mysql
Sur tous les serveurs de base de données du cluster (DB1 , DB2 , et DB3 ) assurez-vous que le fichier de configuration /etc/my.cnf
contient les champs uniques suivants :
wsrep_cluster_address=gcomm://
wsrep_cluster_name=
wsrep_node_name=
Ajoutez l'adresse IP de chaque serveur de base de données. Voici comment le cluster communique et avec qui :
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
Ajoutez un nom de cluster unique. Cela doit être le même sur tous les serveurs du cluster. Cela identifiera le cluster parmi d'autres clusters :
wsrep_cluster_name=pxc-cluster
Ajoutez un nom de nœud unique et son adresse IP. Le cluster doit avoir un moyen d'identifier chaque nœud :
wsrep_node_name=pxc-cluster-node-db1
wsrep_node_address=192.168.40.91
Exécutez cette commande sur chaque serveur de base de données pour vous assurer que les paramètres que vous avez définis sont corrects :
[DB1]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.91
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db1
[DB2]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.92
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db2
[DB3]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.93
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db3
Démarrer le cluster
Une fois que la configuration semble bonne, l'étape suivante consiste à démarrer le DB1 serveur. Cela se fait avec un service spécial appelé [email protected] :
# systemctl start [email protected]
Connectez-vous pour vérifier l'état avec les commandes suivantes :
# mysql -u root -p
# mysql> show status like 'wsrep%';
Recherchez wsrep_cluster_size, qui devrait être 1 , puisque le seul serveur du cluster actuellement est DB1 .
Le service d'amorçage génère les certificats de sécurité TLS utilisés pour les communications de cluster sécurisées. Copiez ces fichiers dans le /var/lib/mysql
sur les deux autres serveurs de base de données :server-key.pem
,ca.pem
, et server-cert.pem
# cd /var/lib/mysql
# scp server-key.pem server-cert.pem ca.pem db2:/var/lib/mysql/
# scp server-key.pem server-cert.pem ca.pem db3:/var/lib/mysql/
Configurer le pare-feu pour les opérations de cluster sécurisées
Le cluster Percona nécessite que les quatre ports suivants soient ouverts pour fonctionner correctement :3306, 4444, 4567 et 4568. Exécutez ces commandes de pare-feu sur les trois serveurs (DB1 , DB2 , et DB3 ) pour les configurer.
Assurez-vous que le pare-feu le service est en cours d'exécution :
# systemctl enable firewalld
# systemctl start firewalld
La zone par défaut est publique , ainsi, à moins que vous ne l'ayez modifié, vous pouvez ajouter les quatre ports requis de cette manière :
# firewall-cmd --add-port 3306/tcp --zone=public --permanent
# firewall-cmd --add-port 4444/tcp --zone=public --permanent
# firewall-cmd --add-port 4567/tcp --zone=public --permanent
# firewall-cmd --add-port 4568/tcp --zone=public --permanent
Ou, si vous préférez, ajoutez plusieurs ports à la fois à partir d'une seule commande :
# firewall-cmd --add-port={3306/tcp,4444/tcp,4567/tcp,4568/tcp} --zone=public --permanent
Rechargez le pare-feu service avec la commande suivante, puis répertoriez les ports pour confirmer que le service est configuré comme prévu :
# firewall-cmd --reload
# firewall-cmd --list-ports
3306/tcp 4444/tcp 4567/tcp 4568/tcp
Vous pouvez trouver plus d'informations sur le pare-feu RHEL 8 ici.
Développer le cluster
Il est maintenant temps d'ajouter plus de serveurs au cluster existant de celui qui est en cours d'exécution après avoir été amorcé. Le but est d'ajouter à la fois DB2 et DB3 au cluster exécuté sur DB1 .
Un par un, démarrez le service MySQL sur chaque serveur, en attendant qu'il se termine avant de passer au serveur suivant.
Sur DB2 , saisissez :
# systemctl start mysql
Faites de même sur DB3 :
# systemctl start mysql
Sur DB1 , tail
le mysql.log
fichier pour surveiller les nouveaux serveurs rejoignant le cluster. Cela vous permettra de savoir si les choses fonctionnent comme prévu ou si des erreurs se produisent pendant la phase de jointure du cluster :
# tail -f /var/log/mysqld.log | grep db3
2021-04-08T17:48:25.892746Z 0 [Note] [MY-000000] [Galera] STATE EXCHANGE: got state msg: 9ea100f1-9892-11eb-af
0e-66802999478c from 0 (pxc-cluster-node-db3)
0: 9e07f773-9892-11eb-a4b8-7bfcd02aca9e, pxc-cluster-node-db3
2021-04-08T17:48:26.405209Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) requested state tr
ansfer from '*any*'. Selected 1.0 (pxc-cluster-node-db1)(SYNCED) as donor.
2021-04-08T17:48:41.023324Z 0 [Note] [MY-000000] [Galera] 1.0 (pxc-cluster-node-db1): State transfer to 0.0 (p
xc-cluster-node-db3) complete.
2021-04-08T17:48:46.677727Z 0 [Note] [MY-000000] [Galera] 0.0 (pxc-cluster-node-db3): State transfer from 1.0
(pxc-cluster-node-db1) complete.
2021-04-08T17:48:46.678022Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) synced with group.
Dans la sortie du fichier journal ci-dessus, vous pouvez voir que DB3 a rejoint le cluster, a demandé le transfert d'état et a réussi à synchroniser ses données à partir de DB1. Une autre façon de vérifier la taille du cluster consiste à se connecter à n'importe quel serveur membre du cluster et à exécuter ces commandes :
# mysql -u root -p
# mysql> show status like 'wsrep%';
Recherchez wsrep_cluster_size , qui devrait être 3 , puisque les trois serveurs (DB1 , DB2 , et DB3 ) ont maintenant rejoint le cluster.
Recherchez wsrep_incoming_addresses , qui doit afficher les trois adresses IP de serveur. Encore une fois, c'est une autre façon de confirmer que tous les serveurs sont dans le cluster et communiquent correctement.
Tester les clusters
Maintenant que vous disposez d'un cluster à trois nœuds opérationnel, vous devez tester les fonctionnalités active-active-active.
Sur le serveur DB1 , créez une nouvelle base de données avec la commande suivante :
# mysql -u root -p
# mysql> create database myACTIVEdb;
Sur le serveur DB2 ou DB3 , exécutez les commandes suivantes pour vérifier si la base de données nouvellement créée s'affiche :
# mysql -u root -p
# mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myACTIVEdb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
La nouvelle base de données devrait apparaître presque immédiatement. Quelles que soient les écritures de serveur effectuées, les données sont répliquées sur les autres serveurs de base de données. Félicitations, vous avez maintenant un serveur MySQL Percona actif-actif-actif à trois nœuds fonctionnant sur RHEL 8 !
Maintenance du cluster
De temps à autre, l'un des serveurs de base de données peut nécessiter une maintenance nécessitant un redémarrage. Vous devez toujours fermer correctement le service MySQL avant de redémarrer :
# systemctl stop mysql
Cette commande peut prendre un certain temps, car elle prépare le cluster à être dans un état interrompu. Laissez-le s'éteindre correctement pour synchroniser et mettre à jour l'état du cluster sur tous les serveurs.
Redémarrez le serveur en maintenance, puis rejoignez le cluster avec la commande suivante :
# systemctl start mysql
La santé du cluster dépend du maintien du quorum . N'oubliez pas de toujours en garder un de plus de la moitié de la taille du cluster opérationnel. Pour un groupe de trois, le quorum serait de deux. Pour un groupe de cinq, le quorum serait de trois. Faire passer le cluster de trois à cinq est facile; répétez simplement les étapes décrites ci-dessus. Il est conseillé d'avoir un nombre impair de serveurs dans le cluster, ce qui facilite la gestion du quorum.
Si le cluster entier est désactivé et doit être redémarré, n'oubliez pas de sélectionner un serveur pour lancer le cluster. Cela se fait avec le processus d'amorçage. Par exemple, sur DB1 :
# systemctl start [email protected]
Sur les deux autres serveurs, rejoignez-les une fois le processus d'amorçage terminé, avec la commande suivante :
# systemctl start mysql
Le cluster est maintenant opérationnel et opérationnel.
SELinux
RHEL 8 est livré avec SELinux en application mode. Red Hat, Percona et MySQL ont fait du bon travail avec SELinux prêt à l'emploi dans Enforcing mode. Aucune modification n'est nécessaire. Vous pouvez trouver plus de détails sur le site Web de Percona si des changements à certains paramètres de configuration de Percona doivent être modifiés.
[ Obtenez cet ebook gratuit :Gérer vos clusters Kubernetes pour les nuls. ]
Récapitulez
RHEL 8 fournit une plate-forme pour les charges de travail de base de données qui est à la fois compatible et offre d'excellentes performances. Percona a fait un excellent travail en concevant une implémentation multimaître facile à déployer du serveur MySQL avec des détails de sécurité à l'esprit.