GNU/Linux >> Tutoriels Linux >  >> Linux

Comment construire un cluster actif-actif-actif avec RHEL 8 et Percona MySQL

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.


Linux
  1. Comment créer une base de données dans MySQL avec MySQL Workbench

  2. Comment installer Lighttpd avec PHP5 FastCGI et MySQL sur CentOS 6 / RHEL 6

  3. Comment installer Lighttpd avec PHP5 FastCGI et MySQL sur Fedora 16

  4. Comment installer Nginx avec PHP-FPM et MySQL sur Fedora 16 "Verne"

  5. Comment installer Nginx avec PHP5 et MySQL sur Ubuntu 11.10

Comment installer Lighttpd avec PHP-FPM 7 et MySQL 5.7 sur Ubuntu 18.04 LTS

Comment configurer Percona Cluster avec HAproxy Loadbalancer sur CentOS 7

Comment déployer CouchDB en tant que cluster avec Docker

Comment multi-maître MySQL avec Percona et Keepalived

Comment déployer une application PHP avec Nginx et MySQL à l'aide de Docker et Docker Compose

Comment configurer un cluster Linux avec 2 nœuds sur RedHat et CentOS