Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment déployer Percona XtraDB Cluster 8 pour une haute disponibilité

Percona XtraDB Cluster 8.0 est basé sur Percona Server pour MySQL 8.0 intégré avec l'API de réplication Galera writeset et la bibliothèque de réplication Galera, pour former une réplication multi-maître hautement disponible pour le serveur de base de données basé sur MySQL. Percona XtraDB Cluster est livré avec le moteur de stockage XtraDB (un remplacement instantané d'InnoDB) et suit de très près les versions amont d'Oracle MySQL (y compris toutes les corrections de bogues qu'il contient), avec quelques variables supplémentaires et un statut spécifique à cette version.

Dans cet article de blog, nous allons voir comment déployer un Percona XtraDB Cluster 8.0 pour une haute disponibilité en utilisant la méthode manuelle et automatisée.

Caractéristiques notables

Avant d'aller plus loin dans les étapes de déploiement, il convient de mentionner les fonctionnalités notables et les améliorations significatives de cette version majeure basée sur Percona Server pour MySQL 8.0 (sans le plugin Group Replication) et Galera 4 :

  • Réplication en continu – Cela permet à la réplication de jeux d'écriture de traiter des transactions de données volumineuses dans des fragments plus petits et plus gérables, ce qui minimise les conflits de données.
  • Les fonctions MySQL de synchronisation pour la coordination des actions (wsrep_last_seen_gtid, wsrep_last_written_gtid, wsrep_sync_wait_upto_gtid).
  • Nouvelles tables système Galera, qui aideront à surveiller l'état du cluster sous le schéma "mysql" - wsrep_cluster, wsrep_cluster_members et wsrep_streaming_log.
  • Cryptage Gcache.
  • L'infrastructure wsrep de Galera 4 est plus robuste que celle de Galera 3. Elle offre une exécution plus rapide du code avec une meilleure gestion de l'état, une meilleure prévisibilité et une meilleure gestion des erreurs.

Pour une liste complète des modifications, consultez les notes de version.

Déploiement manuel de Percona XtraDB Cluster 8.0

Étapes d'installation

Pour le cluster Percona XtraDB, nous avons besoin d'au moins trois nœuds :

  • db1 (192.168.20.61)
  • db2 (192.168.20.62)
  • db3 (192.168.20.63)

Les étapes décrites dans cette section doivent être effectuées sur tous les nœuds de base de données (db1, db2 et db3) exécutés sur CentOS 8. Tout d'abord, désactivez SELinux (sinon le processus IST échouerait) :

$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

Installez le package de référentiel Percona :

$ yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

La dernière version stable à ce stade est Percona XtraDB Cluster 8.0, mais par défaut, le package de référentiel est configuré jusqu'à la version 5.7. Le package percona-release contient un script qui peut activer des référentiels supplémentaires pour les nouveaux produits. Exécutons ce script et activons le référentiel spécifique pxc80 :

$ percona-release setup pxc80
* Disabling all Percona Repositories

On RedHat 8 systems it is needed to disable dnf mysql module to install Percona-Server
Do you want to disable it? [y/N]

Choisissez "y" pour désactiver le module mysql DNF. Cela est nécessaire pour donner la priorité au référentiel Percona pour les packages liés à MySQL.

Ensuite, installez le dernier cluster Percona XtraDB et Percona Xtrabackup :

$ dnf -y install percona-xtradb-cluster percona-xtrabackup-80

En ce moment, vous devriez installer un Percona XtraDB Cluster 8.0.0-11.3. Tous les packages de dépendance seront installés comme les packages partagés, partagés et clients. Nous pouvons ensuite démarrer le service MySQL pour la configuration initiale :

$ systemctl start mysql

Un nouveau mot de passe root sera généré lors du premier démarrage. Nous devons d'abord récupérer les informations du mot de passe root à partir du journal des erreurs MySQL (la valeur par défaut est /var/log/mysqld.log dans les systèmes basés sur RHEL) :

$ cat /var/log/mysqld.log | grep 'temporary password'
2020-11-27T06:53:05.929661Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: <eqo+jXNw2lk

Comme vous pouvez le voir, le mot de passe généré est "

$ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

The existing password for the user account root has expired. Please set a new password.

New password:

Re-enter new password:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:
LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Using existing password for root.
Estimated strength of the password: 100

Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 100

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Success.

All done!

Le mot de passe root généré expirera immédiatement lors de la première connexion root. Le script d'aide ci-dessus nous aide à configurer un nouveau mot de passe root MySQL, à définir une politique de validation du mot de passe, à désactiver la connexion à distance pour root, à supprimer la base de données de test et les utilisateurs anonymes et à recharger également les tables de privilèges.

Le fichier de configuration par défaut (/etc/my.cnf) est configuré avec une chaîne de connexion gcomm:// vide sous la variable wsrep_cluster_address, comme indiqué ci-dessous :

wsrep_cluster_address=gcomm://

La ligne ci-dessus doit être définie avec une liste d'adresses IP de tous les nœuds participants du cluster. Si vous avez manqué cette étape, un nouveau cluster Galera serait créé sur chaque nœud (3 clusters distincts à 1 nœud) après le démarrage du service sur chaque nœud. Par conséquent, les lignes suivantes doivent être modifiées en conséquence sous la section [mysqld] :

wsrep_cluster_address=gcomm://192.168.20.51,192.168.20.52,192.168.20.53
wsrep_node_address=192.168.20.51 # IP address of this DB host
wsrep_node_name=db1 # any name to identify this DB host
pxc-encrypt-cluster-traffic=OFF

Attendez-vous à ce que wsrep_cluster_address soit identique dans tous les hôtes de base de données, tandis que wsrep_node_address et wsrep_node_name doivent être distincts sur chaque hôte de base de données. La dernière ligne pxc-encrypt-cluster-traffic=OFF signifie que nous souhaitons désactiver le chiffrement pour le trafic du cluster. Notez que cela est intentionnel pour simplifier nos étapes de déploiement, sinon nous aurions à effectuer des étapes de gestion des clés/certificats. Si vous souhaitez activer le chiffrement, consultez cet article.

Répétez les étapes ci-dessus pour les nœuds de base de données restants avant de procéder à l'amorçage du cluster.

Amorçage de cluster

Galera vous demande de démarrer un nœud dans un cluster comme point de référence avant que les nœuds restants puissent rejoindre et former le cluster. Ce processus est connu sous le nom d'amorçage de cluster. L'amorçage est une première étape pour introduire un nœud de base de données en tant que composant principal avant que d'autres ne le voient comme un point de référence pour synchroniser les données.

Dans cet exemple, nous allons utiliser db1 comme nœud de référence et le démarrer avec la commande bootstrap (vous pouvez également choisir d'autres nœuds puisqu'il s'agit d'un nouveau cluster sans données) :

$ systemctl stop mysql
$ systemctl start [email protected]
$ systemctl status [email protected]

Une fois démarré, nous pouvons démarrer les autres nœuds (db2 et db3) avec la commande de démarrage standard (un nœud à la fois) :

$ systemctl stop mysql
$ systemctl start mysql

Vous pouvez vérifier avec la ligne suivante dans /var/log/mysqld.log :

2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections

À ce stade, notre service Percona XtraDB Cluster a démarré et le déploiement manuel est maintenant terminé. Pour plus d'informations sur le processus d'amorçage du cluster Percona XtraDB, consultez cet article de blog Comment amorcer MySQL ou MariaDB Galera Cluster.

Déploiement automatique avec ClusterControl

Il existe deux manières de déployer un Percona XtraDB Cluster 8.0 à l'aide de ClusterControl. Vous pouvez utiliser l'interface utilisateur ClusterControl (interface graphique Web) ou l'interface de ligne de commande ClusterControl appelée s9s. Nous allons vous montrer les deux façons dans cette section. ClusterControl doit résider sur un hôte distinct, à l'écart de votre cluster de bases de données. Par conséquent, notre architecture peut être illustrée comme suit :

Installation de ClusterControl

Connectez-vous en SSH au serveur ClusterControl et installez ClusterControl avec les commandes suivantes :

$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 744 install-cc
$ ./install-cc

Suivez l'assistant d'installation jusqu'à la fin de l'installation. Une fois l'installation terminée, ouvrez le navigateur Web et accédez à http://192.168.20.19/clustercontrol . Créez un utilisateur administrateur et la licence sera installée automatiquement. Toutes les nouvelles installations sont livrées avec une licence d'essai pour l'édition entreprise pendant 30 jours. Une fois cette licence d'essai expirée, elle reviendra par défaut à l'édition communautaire qui est gratuite pour toujours.

SSH sans mot de passe

ClusterControl nécessite la configuration de SSH sans mot de passe à partir du serveur ClusterControl vers tous les nœuds gérés. Pour ce faire, nous devons d'abord générer une clé SSH sur le serveur ClusterControl. L'utilisateur SSH doit avoir un privilège de super-utilisateur (sudo ou root). Dans ce cas, nous allons utiliser l'utilisateur root :

$ whoami
root

Générez maintenant une clé SSH pour l'utilisateur root :

$ ssh-keygen -t rsa # press Enter on all prompts

Ensuite, copiez la clé publique sur tous les nœuds de base de données que nous allons déployer et gérer. Dans ce cas, les 3 nœuds Galera :

$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]

Entrez le mot de passe root des hôtes respectifs lorsque vous y êtes invité.

Testez-le avec la commande suivante et assurez-vous d'obtenir une réponse correcte :

$ ssh [email protected] "ls /root"

Nous sommes maintenant prêts à déployer notre cluster à l'aide de l'interface utilisateur ou de la CLI de ClusterControl, comme indiqué dans les sections suivantes.

Déploiement PXC à l'aide de l'interface utilisateur ClusterControl

Il est pratiquement facile de déployer un cluster Percona XtraDB avec ClusterControl, et par défaut, ClusterControl configurera le cluster avec le cryptage Galera activé. Une fois le SSH sans mot de passe configuré, accédez à ClusterControl -> Deploy -> MySQL Galera et spécifiez les détails requis comme ci-dessous :

Ensuite, cliquez sur "Continuer" pour passer à l'étape suivante où nous configurons la spécification MySQL :

Choisissez "Percona" pour le fournisseur et 8.0 comme version. Conservez le reste par défaut et entrez le mot de passe root MySQL. Spécifiez l'adresse IP ou le nom d'hôte des hôtes de la base de données un par un et assurez-vous d'obtenir les icônes de coche verte après chaque insertion. Cela indique que ClusterControl est en mesure d'atteindre les hôtes correspondants via SSH sans mot de passe avec l'utilisateur et la clé SSH fournis, tels que définis à l'étape 1. Cliquez sur le bouton "Déployer" pour démarrer le déploiement.

ClusterControl déclenche ensuite une tâche de déploiement où vous pouvez surveiller la progression du déploiement en accédant à ClusterControl -> Activité -> Tâches -> Créer un cluster -> Détails complets de la tâche, comme illustré dans la capture d'écran suivante :

Une fois le processus terminé, vous devriez voir que le cluster est répertorié dans le tableau de bord :

C'est tout. Le déploiement est maintenant terminé.

Déploiement PXC à l'aide de la CLI ClusterControl

Si vous préférez déployer le cluster à l'aide de la ligne de commande, nous pouvons simplement utiliser l'outil client de ligne de commande ClusterControl appelé "s9s". Cet outil enverra une tâche de déploiement au contrôleur ClusterControl et effectuera toutes les étapes nécessaires pour déployer le cluster.

Exécutez la commande suivante sur le serveur ClusterControl :

$ s9s cluster --create \
--cluster-type=galera \
--nodes="192.168.20.51;192.168.20.52;192.168.20.53" \
--vendor=percona \
--provider-version=8.0 \
--db-admin-passwd='P4ssw0rdSecr3t' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='My Percona XtraDB Cluster 8.0' \
--log

Vous verrez les messages de travail apparaître et vous pouvez y surveiller la progression du déploiement et vous pouvez également surveiller la progression du travail à partir de ClusterControl UI -> Activity -> Jobs . Attendez 15 à 20 minutes (selon la connexion Internet) jusqu'à ce que la notification de fin de tâche s'affiche. Notre Percona XtraDB Cluster 8.0 est maintenant déployé et vous pouvez le voir répertorié dans l'interface utilisateur de ClusterControl.