MySQL est un système de gestion de base de données libre, open-source et relationnel. Il est utilisé pour stocker des données à diverses fins, notamment l'entreposage de données, le commerce électronique et les applications de journalisation. MySQL Cluster est une technologie qui offre évolutivité et disponibilité à faible coût.
Dans ce didacticiel, nous utiliserons un nœud maître pour stocker la configuration du cluster et deux nœuds de données pour stocker les données du cluster. L'adresse IP de chaque nœud est indiquée ci-dessous :
- Nœud maître ou gestionnaire - 104.245.33.61
- Nœud de données 1 - 104.245.32.195
- Nœud de données 2 : 69.87.218.169
Prérequis
- Trois serveurs exécutant Debian 10, l'un pour le nœud gestionnaire et les autres pour les nœuds de données.
- Un mot de passe root est configuré sur chaque serveur.
Mise en route
Tout d'abord, vous devrez mettre à jour tous les serveurs vers la dernière version. Vous pouvez tout mettre à jour avec la commande suivante :
apt-get update -y
Une fois tous les serveurs mis à jour, vous pouvez passer à l'étape suivante.
Installer et configurer MySQL Cluster Manager
Tout d'abord, vous devrez installer le package de gestion de cluster MySQL sur le nœud maître. Par défaut, ce paquet n'est pas inclus dans le référentiel par défaut de Debian 10. Vous devrez donc le télécharger depuis le site officiel de MySQL.
Vous pouvez le télécharger avec la commande suivante :
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
Après avoir téléchargé le fichier deb, installez-le à l'aide de la commande suivante :
dpkg -i mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
Une fois l'installation terminée, créez un répertoire pour stocker la configuration du cluster avec la commande suivante :
mkdir /var/lib/mysql-cluster
Créez ensuite un nouveau fichier de configuration avec la commande suivante :
nano /var/lib/mysql-cluster/config.ini
Ajoutez les lignes suivantes :
[ndbd default] NoOfReplicas=2 # Number of replicas [ndb_mgmd] # Management process options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager datadir=/var/lib/mysql-cluster [ndbd] hostname=104.245.32.195 #IP of the first data node NodeId=2 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [ndbd] hostname=69.87.218.169 #IP of the second data node NodeId=3 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [mysqld] # SQL node options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager
Enregistrez et fermez le fichier lorsque vous avez terminé puis démarrez le gestionnaire de cluster avec la commande suivante :
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Vous devriez obtenir le résultat suivant :
MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 2021-05-10 08:23:05 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it... 2021-05-10 08:23:05 [MgmtSrvr] INFO -- Sucessfully created config directory
Maintenant, tuez le serveur en cours d'exécution avec la commande suivante :
pkill -f ndb_mgmd
Ensuite, créez un fichier de service systemd pour MySQL Cluster Manager afin de gérer le service :
nano /etc/systemd/system/ndb_mgmd.service
Ajoutez les lignes suivantes :
[Unit] Description=MySQL NDB Cluster Management Server After=network.target auditd.service [Service] Type=forking ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
Enregistrez et fermez le fichier puis rechargez le démon systemd avec la commande suivante :
systemctl daemon-reload
Ensuite, démarrez le gestionnaire de cluster et activez-le pour qu'il démarre au redémarrage du système avec la commande suivante :
systemctl start ndb_mgmd
systemctl enable ndb_mgmd
Vous pouvez maintenant vérifier l'état du service avec la commande suivante :
systemctl status ndb_mgmd
Vous devriez obtenir le résultat suivant :
? ndb_mgmd.service - MySQL NDB Cluster Management Server Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:23:53 UTC; 6s ago Process: 984 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS) Main PID: 985 (ndb_mgmd) Tasks: 12 (limit: 2359) Memory: 6.5M CGroup: /system.slice/ndb_mgmd.service ??985 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini May 10 08:23:53 master systemd[1]: Starting MySQL NDB Cluster Management Server... May 10 08:23:53 master ndb_mgmd[984]: MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 May 10 08:23:53 master systemd[1]: Started MySQL NDB Cluster Management Server.
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Installer et configurer des nœuds de données
Ensuite, nous allons packager le nœud de données sur d'autres serveurs et le configurer pour communiquer avec MySQL Cluster Manager.
Tout d'abord, installez les dépendances requises sur les deux nœuds de données avec la commande suivante :
apt-get install libclass-methodmaker-perl -y
Une fois toutes les dépendances installées, téléchargez la dernière version du fichier deb MySQL Data Nodes avec la commande suivante :
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
Une fois le téléchargement terminé, installez le fichier téléchargé avec la commande suivante :
dpkg -i mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
Par défaut, les nœuds de données stockent toutes les configurations dans le fichier /etc/my.cnf.
Créez donc un nouveau fichier /etc/my.cnf sur les deux nœuds de données avec la commande suivante :
nano /etc/my.cnf
Ajoutez l'adresse IP du cluster comme indiqué ci-dessous :
[mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
Enregistrez et fermez le fichier puis créez un répertoire de données sur les deux nœuds de données :
mkdir -p /usr/local/mysql/data
Maintenant, démarrez les nœuds de données avec la commande suivante :
ndbd
Vous devriez obtenir le résultat suivant :
2021-05-10 08:27:13 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' 2021-05-10 08:27:13 [ndbd] INFO -- Angel allocated nodeid: 2
Ensuite, tuez le processus ndbd en cours d'exécution avec la commande suivante :
pkill -f ndbd
Ensuite, créez un fichier de service systemd pour ndbd sur les deux nœuds de données avec la commande suivante :
nano /etc/systemd/system/ndbd.service
Ajoutez les lignes suivantes :
[Unit] Description=MySQL NDB Data Node Daemon After=network.target auditd.service [Service] Type=forking ExecStart=/usr/sbin/ndbd ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
Enregistrez et fermez le fichier puis rechargez le démon systemd avec la commande suivante :
systemctl daemon-reload
Ensuite, démarrez le service ndbd et faites-le démarrer au redémarrage du système avec la commande suivante :
systemctl start ndbd
systemctl enable ndbd
Vous pouvez également vérifier l'état du service ndbd à l'aide de la commande suivante :
systemctl status ndbd
Vous devriez obtenir le résultat suivant :
? ndbd.service - MySQL NDB Data Node Daemon Loaded: loaded (/etc/systemd/system/ndbd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:28:28 UTC; 12s ago Process: 740 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS) Main PID: 741 (ndbd) Tasks: 46 (limit: 2359) Memory: 827.1M CGroup: /system.slice/ndbd.service ??741 /usr/sbin/ndbd ??742 /usr/sbin/ndbd May 10 08:28:28 data1 systemd[1]: Starting MySQL NDB Data Node Daemon... May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel allocated nodeid: 2 May 10 08:28:28 data1 systemd[1]: Started MySQL NDB Data Node Daemon.
Installer et configurer le serveur MySQL
Ensuite, nous allons télécharger et installer les packages MySQL Server et Client sur le nœud MySQL Cluster Manager.
Tout d'abord, téléchargez la dernière version de MySQL Cluster Bundle à l'aide de la commande suivante :
wget https://cdn.mysql.com/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar
Ensuite, extrayez le fichier téléchargé dans le répertoire /opt avec la commande suivante :
tar -xvf mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar -C /opt
Ensuite, changez le répertoire en /opt et installez les dépendances requises avec la commande suivante :
cd /opt
apt-get install libaio1 libmecab2 libnuma1 psmisc -y
Ensuite, installez le fichier MySQL Common deb avec la commande suivante :
dpkg -i mysql-common*
Ensuite, installez les packages MySQL Client avec la commande suivante :
dpkg -i mysql-cluster-community-client_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-core_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-plugins_8.0.24-1debian10_amd64.deb
dpkg -i mysql-client_8.0.24-1debian10_amd64.deb
dpkg -i mysql-cluster-community-server*
Si vous obtenez une erreur de dépendance, exécutez la commande suivante :
apt-get install -f
Ensuite, installez le package MySQL Server avec la commande suivante :
dpkg -i mysql-server_8.0.24-1debian10_amd64.deb
Lors de l'installation, vous serez invité à définir un mot de passe root MySQL.
Après avoir installé le serveur MySQL, vous devrez modifier le fichier de configuration principal de MySQL et définir l'IP du cluster :
nano /etc/mysql/my.cnf
Ajoutez les lignes suivantes :
[mysqld] # Options for mysqld process: ndbcluster # run NDB storage engine [mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le service MySQL et activez-le pour qu'il démarre au redémarrage du système :
systemctl restart mysql
systemctl enable mysql
Vous pouvez vérifier l'état du serveur MySQL avec la commande suivante :
systemctl status mysql
Vous devriez voir le résultat suivant :
? mysql.service - MySQL Cluster Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:35:04 UTC; 7s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 1950 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 1985 (mysqld) Status: "Server is operational" Tasks: 47 (limit: 2359) Memory: 372.0M CGroup: /system.slice/mysql.service ??1985 /usr/sbin/mysqld May 10 08:35:01 master systemd[1]: Starting MySQL Cluster Community Server... May 10 08:35:04 master systemd[1]: Started MySQL Cluster Community Server.
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Tester le cluster MySQL
Maintenant, nous avons installé et configuré avec succès le cluster MySQL à trois nœuds. Ensuite, vous devrez vérifier si cela fonctionne ou non.
Tout d'abord, connectez-vous au nœud MySQL Cluster Manager et connectez-vous à MySQL avec la commande suivante :
mysql -u root -p
Fournissez votre mot de passe root MySQL puis vérifiez les informations du cluster avec la commande suivante :
mysql> SHOW ENGINE NDB STATUS \G
Si tout va bien, vous devriez obtenir le résultat suivant :
*************************** 1. row *************************** Type: ndbclus Name: connection Status: cluster_node_id=4, connected_host=104.245.33.61, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0 *************************** 2. row *************************** Type: ndbclus Name: NdbTransaction Status: created=2, free=2, sizeof=392 *************************** 3. row *************************** Type: ndbclus Name: NdbOperation Status: created=4, free=4, sizeof=944 *************************** 4. row *************************** Type: ndbclus Name: NdbIndexScanOperation Status: created=0, free=0, sizeof=1152 *************************** 5. row *************************** Type: ndbclus Name: NdbIndexOperation Status: created=0, free=0, sizeof=952 *************************** 6. row *************************** Type: ndbclus Name: NdbRecAttr Status: created=0, free=0, sizeof=88 *************************** 7. row *************************** Type: ndbclus Name: NdbApiSignal Status: created=16, free=16, sizeof=144 *************************** 8. row *************************** Type: ndbclus Name: NdbLabel Status: created=0, free=0, sizeof=200 *************************** 9. row *************************** Type: ndbclus Name: NdbBranch Status: created=0, free=0, sizeof=32 *************************** 10. row *************************** Type: ndbclus Name: NdbSubroutine Status: created=0, free=0, sizeof=72 *************************** 11. row *************************** Type: ndbclus Name: NdbCall Status: created=0, free=0, sizeof=24 *************************** 12. row *************************** Type: ndbclus Name: NdbBlob Status: created=0, free=0, sizeof=592 *************************** 13. row *************************** Type: ndbclus Name: NdbReceiver Status: created=0, free=0, sizeof=128 *************************** 14. row *************************** Type: ndbclus Name: NdbLockHandle Status: created=0, free=0, sizeof=48 *************************** 15. row *************************** Type: ndbclus Name: binlog Status: latest_epoch=897648164875, latest_trans_epoch=820338753551, latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0, latest_applied_binlog_epoch=0 15 rows in set (0.00 sec)
Maintenant, quittez le shell MySQL avec la commande suivante :
mysql> exit
Nous allons maintenant effectuer un autre test pour confirmer que le cluster fonctionne correctement.
Connectez la console de gestion du cluster avec la commande suivante :
ndb_mgm
Vous devriez voir le résultat suivant :
-- NDB Cluster -- Management Client -- ndb_mgm>
Maintenant, exécutez la commande suivante pour vérifier tous les nœuds de données :
ndb_mgm> SHOW
Vous devriez obtenir le résultat suivant :
Connected to Management Server at: 104.245.33.61:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @104.245.32.195 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0, *) id=3 @69.87.218.169 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24) [mysqld(API)] 1 node(s) id=4 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24)
Pour vérifier l'état du premier nœud de données, exécutez la commande suivante :
ndb_mgm> 2 STATUS
Vous devriez voir le résultat suivant :
Node 2: started (mysql-8.0.24 ndb-8.0.24)
Pour vérifier l'état du deuxième nœud de données, exécutez la commande suivante :
ndb_mgm> 3 STATUS
Vous devriez voir le résultat suivant :
Node 3: started (mysql-8.0.24 ndb-8.0.24)
Conclusion
Toutes nos félicitations! vous avez installé et configuré avec succès un cluster MySQL à trois nœuds sur le serveur Debian 10. Vous pouvez désormais utiliser cette configuration dans l'environnement de production pour obtenir évolutivité et disponibilité.