Nécessite ClusterControl 1.6 ou version ultérieure. S'applique aux instances/clusters basés sur MySQL.
À certaines occasions, vous souhaiterez peut-être exécuter plusieurs instances de MySQL sur une seule machine. Vous voudrez peut-être donner à différents utilisateurs l'accès à leurs propres serveurs MySQL qu'ils gèrent eux-mêmes, ou vous voudrez peut-être tester une nouvelle version de MySQL tout en préservant une configuration de production existante.
Il est possible d'utiliser un binaire de serveur MySQL différent par instance, ou d'utiliser le même binaire pour plusieurs instances (ou une combinaison des deux approches). Par exemple, vous pouvez exécuter un serveur à partir de MySQL 5.6 et un autre à partir de MySQL 5.7, pour voir comment les différentes versions gèrent une certaine charge de travail. Ou vous pouvez exécuter plusieurs instances de la dernière version de MySQL, chacune gérant un ensemble différent de bases de données.
Que vous utilisiez ou non des binaires de serveur distincts, chaque instance que vous exécutez doit être configurée avec des valeurs uniques pour plusieurs paramètres de fonctionnement. Cela élimine le risque de conflit entre les instances. Vous pouvez utiliser MySQL Sandbox pour créer plusieurs instances MySQL. Ou vous pouvez utiliser mysqld_multi disponible dans MySQL pour démarrer ou arrêter n'importe quel nombre de processus mysqld distincts s'exécutant sur différents ports TCP/IP et sockets UNIX.
Dans cet article de blog, nous allons vous montrer comment configurer ClusterControl pour surveiller plusieurs instances MySQL exécutées sur un hôte.
Limitation du contrôle de cluster
Au moment de la rédaction, ClusterControl ne prend pas en charge la surveillance de plusieurs instances sur un hôte par cluster/groupe de serveurs. Il suppose les bonnes pratiques suivantes :
- Une seule instance MySQL par hôte (serveur physique ou machine virtuelle).
- La redondance des données MySQL doit être configurée sur le serveur N+1.
- Toutes les instances MySQL s'exécutent avec une configuration uniforme sur l'ensemble du cluster/groupe de serveurs, par exemple, le port d'écoute, le journal des erreurs, datadir, basedir, socket sont identiques.
En ce qui concerne les points mentionnés ci-dessus, ClusterControl suppose que dans un groupe cluster/serveur :
- Les instances MySQL sont configurées de manière uniforme dans un cluster ; même port, même emplacement des journaux, répertoire de base/données et autres configurations critiques.
- Il surveille, gère et déploie une seule instance MySQL par hôte.
- Le client MySQL doit être installé sur l'hôte et disponible sur le chemin de l'exécutable pour l'utilisateur du système d'exploitation correspondant.
- MySQL est lié à une adresse IP accessible par le nœud ClusterControl.
- Il continue de surveiller les statistiques de l'hôte, par exemple CPU/RAM/disque/réseau pour chaque instance MySQL individuellement. Dans un environnement avec plusieurs instances par hôte, vous devez vous attendre à des statistiques d'hôte redondantes puisqu'il surveille le même hôte plusieurs fois.
Avec les hypothèses ci-dessus, les fonctionnalités ClusterControl suivantes ne fonctionnent pas pour un hôte avec plusieurs instances :
Sauvegarde - Percona Xtrabackup ne prend pas en charge plusieurs instances par hôte et mysqldump exécuté par ClusterControl se connecte uniquement au socket par défaut.
Gestion des processus - ClusterControl utilise le standard 'pgrep -f mysqld_safe' pour vérifier si MySQL est en cours d'exécution sur cet hôte. Avec plusieurs instances MySQL, il s'agit d'une approche faussement positive. En tant que tel, la récupération automatique pour le nœud/cluster ne fonctionnera pas.
Gestion de la configuration - ClusterControl provisionne le répertoire de configuration MySQL standard. Il réside généralement sous /etc/ et /etc/mysql.
Solution
La surveillance de plusieurs instances MySQL sur une machine est toujours possible avec ClusterControl avec une solution de contournement simple. Chaque instance MySQL doit être traitée comme une seule entité par groupe de serveurs.
Dans cet exemple, nous avons 3 instances MySQL sur un seul hôte créé avec MySQL Sandbox :
ClusterControl surveille plusieurs instances sur le même hôteNous avons créé nos instances MySQL à l'aide des commandes suivantes :
$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
Par défaut, MySQL Sandbox crée des instances mysql qui écoutent 127.0.0.1. Il est nécessaire de configurer chaque nœud de manière appropriée pour qu'il écoute toutes les adresses IP disponibles. Voici le récapitulatif de nos instances MySQL chez l'hébergeur :
[[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json
{
"node1":
{
"host": "master",
"port": "15024",
"socket": "/tmp/mysql_sandbox15024.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node2":
{
"host": "master",
"port": "15025",
"socket": "/tmp/mysql_sandbox15025.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node3":
{
"host": "master",
"port": "15026",
"socket": "/tmp/mysql_sandbox15026.sock",
"username": "[email protected]%",
"password": "msandbox"
}
}
L'étape suivante consiste à modifier la configuration des instances nouvellement créées. Accédez à my.cnf pour chacun d'eux et hachez la variable bind_address :
[[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
sandbox 13086 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
sandbox 13805 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
sandbox 14065 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
[[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
#bind_address = 127.0.0.1
Installez ensuite mysql sur votre nœud maître et redémarrez toutes les instances à l'aide du script restart_all.
[[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
[[email protected] multi_msb_mysql-5_7_23]$ ./restart_all
# executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "stop" on node 1
executing "stop" on node 2
executing "stop" on node 3
# executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "start" on node 1
. sandbox server started
executing "start" on node 2
. sandbox server started
executing "start" on node 3
. sandbox server started
Depuis ClusterControl, nous devons effectuer une "importation" pour chaque instance car nous devons les isoler dans un groupe différent pour que cela fonctionne.
ClusterControl importe le serveur existantPour node1, saisissez les informations suivantes dans ClusterControl> Import :
ClusterControl importe le serveur existantAssurez-vous de mettre les bons ports (différents pour différentes instances) et l'hôte (identique pour toutes les instances).
Vous pouvez suivre la progression en cliquant sur l'icône Activité/Jobs dans le menu supérieur.
ClusterControl importe les détails du serveur existantVous verrez node1 dans l'interface utilisateur une fois que ClusterControl aura terminé le travail. Répétez les mêmes étapes pour ajouter deux autres nœuds avec les ports 15025 et 15026. Vous devriez voir quelque chose comme ci-dessous une fois qu'ils sont ajoutés :
Tableau de bord ClusterControlVoilà. Nous venons d'ajouter nos instances MySQL existantes dans ClusterControl pour la surveillance. Bonne surveillance !
PS. :Pour démarrer avec ClusterControl, cliquez ici !