En tant qu'administrateurs système et développeurs, nous passons beaucoup de temps dans un terminal. Nous avons donc apporté ClusterControl au terminal avec notre outil d'interface de ligne de commande appelé s9s. s9s fournit une interface simple à l'API ClusterControl RPC v2. Vous le trouverez très utile lorsque vous travaillez avec des déploiements à grande échelle, car la CLI vous permettra de concevoir des fonctionnalités et des flux de travail plus complexes.
Ce billet de blog explique comment utiliser s9s pour automatiser la gestion de Galera Cluster pour MySQL ou MariaDB, ainsi qu'une simple configuration de réplication maître-esclave.
Configuration
Vous pouvez trouver des instructions d'installation pour votre système d'exploitation particulier dans la documentation. Ce qu'il est important de noter, c'est que si vous utilisez les derniers outils s9s, de GitHub, il y a un léger changement dans la façon dont vous créez un utilisateur. La commande suivante fonctionnera correctement :
s9s user --create --generate-key --controller="https://localhost:9501" dba
En général, deux étapes sont nécessaires si vous souhaitez configurer la CLI localement sur l'hôte ClusterControl. Tout d'abord, vous devez créer un utilisateur, puis apporter des modifications au fichier de configuration - toutes les étapes sont incluses dans la documentation.
Déploiement
Une fois que l'interface de ligne de commande a été correctement configurée et dispose d'un accès SSH aux hôtes de votre base de données cible, vous pouvez démarrer le processus de déploiement. Au moment de la rédaction, vous pouvez utiliser la CLI pour déployer des clusters MySQL, MariaDB et PostgreSQL. Commençons par un exemple de déploiement de Percona XtraDB Cluster 5.7. Une seule commande est nécessaire pour cela.
s9s cluster --create --cluster-type=galera --nodes="10.0.0.226;10.0.0.227;10.0.0.228" --vendor=percona --provider-version=5.7 --db-admin-passwd="pass" --os-user=root --cluster-name="PXC_Cluster_57" --wait
La dernière option "--wait" signifie que la commande attendra la fin du travail, indiquant sa progression. Vous pouvez l'ignorer si vous le souhaitez - dans ce cas, la commande s9s reviendra immédiatement au shell après avoir enregistré une nouvelle tâche dans cmon. C'est parfaitement bien car cmon est le processus qui gère le travail lui-même. Vous pouvez toujours vérifier la progression d'une tâche séparément, en utilisant :
[email protected]:~# s9s job --list -l
--------------------------------------------------------------------------------------
Create Galera Cluster
Installing MySQL on 10.0.0.226 [██▊ ]
26.09%
Created : 2017-10-05 11:23:00 ID : 1 Status : RUNNING
Started : 2017-10-05 11:23:02 User : dba Host :
Ended : Group: users
--------------------------------------------------------------------------------------
Total: 1
Prenons un autre exemple. Cette fois, nous allons créer un nouveau cluster, la réplication MySQL :simple paire maître - esclave. Encore une fois, une seule commande suffit :
[email protected]:~# s9s cluster --create --nodes="10.0.0.229?master;10.0.0.230?slave" --vendor=percona --cluster-type=mysqlreplication --provider-version=5.7 --os-user=root --wait
Create MySQL Replication Cluster
/ Job 6 FINISHED [██████████] 100% Cluster created
Nous pouvons maintenant vérifier que les deux clusters sont opérationnels :
[email protected]:~# s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED galera dba users PXC_Cluster_57 All nodes are operational.
2 STARTED replication dba users cluster_2 All nodes are operational.
Total: 2
Bien sûr, tout cela est également visible via l'interface graphique :
Ajoutons maintenant un équilibreur de charge ProxySQL :
[email protected]:~# s9s cluster --add-node --nodes="proxysql://10.0.0.226" --cluster-id=1
WARNING: admin/admin
WARNING: proxy-monitor/proxy-monitor
Job with ID 7 registered.
Cette fois, nous n'avons pas utilisé l'option "--wait", donc si nous voulons vérifier la progression, nous devons le faire nous-mêmes. Veuillez noter que nous utilisons un ID de travail qui a été renvoyé par la commande précédente, nous n'obtiendrons donc des informations que sur ce travail particulier :
[email protected]:~# s9s job --list --long --job-id=7
--------------------------------------------------------------------------------------
Add ProxySQL to Cluster
Waiting for ProxySQL [██████▋ ]
65.00%
Created : 2017-10-06 14:09:11 ID : 7 Status : RUNNING
Started : 2017-10-06 14:09:12 User : dba Host :
Ended : Group: users
--------------------------------------------------------------------------------------
Total: 7
Scaling out
Des nœuds peuvent être ajoutés à notre cluster Galera via une seule commande :
s9s cluster --add-node --nodes 10.0.0.229 --cluster-id 1
Job with ID 8 registered.
[email protected]:~# s9s job --list --job-id=8
ID CID STATE OWNER GROUP CREATED RDY TITLE
8 1 FAILED dba users 14:15:52 0% Add Node to Cluster
Total: 8
Quelque chose s'est mal passé. Nous pouvons vérifier ce qui s'est passé exactement :
[email protected]:~# s9s job --log --job-id=8
addNode: Verifying job parameters.
10.0.0.229:3306: Adding host to cluster.
10.0.0.229:3306: Testing SSH to host.
10.0.0.229:3306: Installing node.
10.0.0.229:3306: Setup new node (installSoftware = true).
10.0.0.229:3306: Detected a running mysqld server. It must be uninstalled first, or you can also add it to ClusterControl.
Bon, cette adresse IP est déjà utilisée pour notre serveur de réplication. Nous aurions dû utiliser une autre IP gratuite. Essayons cela :
[email protected]:~# s9s cluster --add-node --nodes 10.0.0.231 --cluster-id 1
Job with ID 9 registered.
[email protected]:~# s9s job --list --job-id=9
ID CID STATE OWNER GROUP CREATED RDY TITLE
9 1 FINISHED dba users 14:20:08 100% Add Node to Cluster
Total: 9
Gérer
Disons que nous voulons faire une sauvegarde de notre maître de réplication. Nous pouvons le faire à partir de l'interface graphique, mais parfois nous devrons peut-être l'intégrer à des scripts externes. ClusterControl CLI conviendrait parfaitement à un tel cas. Voyons quels clusters nous avons :
[email protected]:~# s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED galera dba users PXC_Cluster_57 All nodes are operational.
2 STARTED replication dba users cluster_2 All nodes are operational.
Total: 2
Ensuite, vérifions les hôtes de notre cluster de réplication, avec l'ID de cluster 2 :
[email protected]:~# s9s nodes --list --long --cluster-id=2
STAT VERSION CID CLUSTER HOST PORT COMMENT
soM- 5.7.19-17-log 2 cluster_2 10.0.0.229 3306 Up and running
soS- 5.7.19-17-log 2 cluster_2 10.0.0.230 3306 Up and running
coC- 1.4.3.2145 2 cluster_2 10.0.2.15 9500 Up and running
Comme nous pouvons le voir, il y a trois hôtes que ClusterControl connaît - deux d'entre eux sont des hôtes MySQL (10.0.0.229 et 10.0.0.230), le troisième est l'instance ClusterControl elle-même. N'imprimons que les hôtes MySQL pertinents :
[email protected]:~# s9s nodes --list --long --cluster-id=2 10.0.0.2*
STAT VERSION CID CLUSTER HOST PORT COMMENT
soM- 5.7.19-17-log 2 cluster_2 10.0.0.229 3306 Up and running
soS- 5.7.19-17-log 2 cluster_2 10.0.0.230 3306 Up and running
Total: 3
Dans la colonne "STAT", vous pouvez y voir quelques caractères. Pour plus d'informations, nous vous suggérons de consulter la page de manuel des nœuds s9s (man s9s-nodes). Ici, nous allons simplement résumer les éléments les plus importants. Le premier caractère nous renseigne sur le type de nœud :"s" signifie qu'il s'agit d'un nœud MySQL normal, "c" - contrôleur ClusterControl. Le deuxième caractère décrit l'état du nœud :"o" nous indique qu'il est en ligne. Troisième caractère - rôle du nœud. Ici, "M" décrit un maître et "S" - un esclave tandis que "C" signifie contrôleur. Enfin, le quatrième caractère nous indique si le nœud est en mode maintenance. "-" signifie qu'il n'y a pas de maintenance planifiée. Sinon, nous verrions "M" ici. Ainsi, à partir de ces données, nous pouvons voir que notre maître est un hôte avec IP :10.0.0.229. Prenons-en une sauvegarde et stockons-la sur le contrôleur.
[email protected]:~# s9s backup --create --nodes=10.0.0.229 --cluster-id=2 --backup-method=xtrabackupfull --wait
Create Backup
| Job 12 FINISHED [██████████] 100% Command ok
Nous pouvons alors vérifier s'il s'est bien déroulé. A noter l'option "--backup-format" qui permet de définir quelles informations doivent être imprimées :
[email protected]:~# s9s backup --list --full --backup-format="Started: %B Completed: %E Method: %M Stored on: %S Size: %s %F\n" --cluster-id=2
Started: 15:29:11 Completed: 15:29:19 Method: xtrabackupfull Stored on: 10.0.0.229 Size: 543382 backup-full-2017-10-06_152911.xbstream.gz
Total 1
Guide DevOps de la gestion des bases de données de ManyninesDécouvrez ce que vous devez savoir pour automatiser et gérer vos bases de données open sourceTélécharger gratuitementRessources connexesAutomatisation de la base de données :Intégration de la CLI de ClusterControl avec votre ChatBotComment utiliser s9s - L'interface de ligne de commande de ClusterControl Surveillance
Toutes les bases de données doivent être surveillées. ClusterControl utilise des conseillers pour surveiller certaines des métriques à la fois sur MySQL et sur le système d'exploitation. Lorsqu'une condition est remplie, une notification est envoyée. ClusterControl fournit également un ensemble complet de graphiques, à la fois en temps réel et historiques pour la planification post-mortem ou de capacité. Parfois, ce serait formidable d'avoir accès à certaines de ces métriques sans avoir à passer par l'interface graphique. ClusterControl CLI le permet via la commande s9s-node. Des informations sur la façon de procéder peuvent être trouvées dans la page de manuel de s9s-node. Nous allons montrer quelques exemples de ce que vous pouvez faire avec CLI.
Tout d'abord, examinons l'option "--node-format" de la commande "s9s node". Comme vous pouvez le voir, il existe de nombreuses options pour imprimer du contenu intéressant.
[email protected]:~# s9s node --list --node-format "%N %T %R %c cores %u%% CPU utilization %fmG of free memory, %tMB/s of net TX+RX, %M\n" "10.0.0.2*"
10.0.0.226 galera none 1 cores 13.823200% CPU utilization 0.503227G of free memory, 0.061036MB/s of net TX+RX, Up and running
10.0.0.227 galera none 1 cores 13.033900% CPU utilization 0.543209G of free memory, 0.053596MB/s of net TX+RX, Up and running
10.0.0.228 galera none 1 cores 12.929100% CPU utilization 0.541988G of free memory, 0.052066MB/s of net TX+RX, Up and running
10.0.0.226 proxysql 1 cores 13.823200% CPU utilization 0.503227G of free memory, 0.061036MB/s of net TX+RX, Process 'proxysql' is running.
10.0.0.231 galera none 1 cores 13.104700% CPU utilization 0.544048G of free memory, 0.045713MB/s of net TX+RX, Up and running
10.0.0.229 mysql master 1 cores 11.107300% CPU utilization 0.575871G of free memory, 0.035830MB/s of net TX+RX, Up and running
10.0.0.230 mysql slave 1 cores 9.861590% CPU utilization 0.580315G of free memory, 0.035451MB/s of net TX+RX, Up and running
Avec ce que nous avons montré ici, vous pouvez probablement imaginer des cas d'automatisation. Par exemple, vous pouvez surveiller l'utilisation du processeur des nœuds et si elle atteint un certain seuil, vous pouvez exécuter un autre travail s9s pour faire tourner un nouveau nœud dans le cluster Galera. Vous pouvez également, par exemple, surveiller l'utilisation de la mémoire et envoyer des alertes si elle dépasse un certain seuil.
La CLI peut faire plus que cela. Tout d'abord, il est possible de vérifier les graphiques depuis la ligne de commande. Bien sûr, ceux-ci ne sont pas aussi riches en fonctionnalités que les graphiques de l'interface graphique, mais il suffit parfois de voir un graphique pour trouver un modèle inattendu et décider s'il vaut la peine d'être approfondi.
[email protected]:~# s9s node --stat --cluster-id=1 --begin="00:00" --end="14:00" --graph=load 10.0.0.231
[email protected]:~# s9s node --stat --cluster-id=1 --begin="00:00" --end="14:00" --graph=sqlqueries 10.0.0.231
Lors de situations d'urgence, vous souhaiterez peut-être vérifier l'utilisation des ressources dans le cluster. Vous pouvez créer une sortie de type top qui combine les données de tous les nœuds du cluster :
[email protected]:~# s9s process --top --cluster-id=1
PXC_Cluster_57 - 14:38:01 All nodes are operational.
4 hosts, 7 cores, 2.2 us, 3.1 sy, 94.7 id, 0.0 wa, 0.0 st,
GiB Mem : 2.9 total, 0.2 free, 0.9 used, 0.2 buffers, 1.6 cached
GiB Swap: 3 total, 0 used, 3 free,
PID USER HOST PR VIRT RES S %CPU %MEM COMMAND
8331 root 10.0.2.15 20 743748 40948 S 10.28 5.40 cmon
26479 root 10.0.0.226 20 278532 6448 S 2.49 0.85 accounts-daemon
5466 root 10.0.0.226 20 95372 7132 R 1.72 0.94 sshd
651 root 10.0.0.227 20 278416 6184 S 1.37 0.82 accounts-daemon
716 root 10.0.0.228 20 278304 6052 S 1.35 0.80 accounts-daemon
22447 n/a 10.0.0.226 20 2744444 148820 S 1.20 19.63 mysqld
975 mysql 10.0.0.228 20 2733624 115212 S 1.18 15.20 mysqld
13691 n/a 10.0.0.227 20 2734104 130568 S 1.11 17.22 mysqld
22994 root 10.0.2.15 20 30400 9312 S 0.93 1.23 s9s
9115 root 10.0.0.227 20 95368 7192 S 0.68 0.95 sshd
23768 root 10.0.0.228 20 95372 7160 S 0.67 0.94 sshd
15690 mysql 10.0.2.15 20 1102012 209056 S 0.67 27.58 mysqld
11471 root 10.0.0.226 20 95372 7392 S 0.17 0.98 sshd
22086 vagrant 10.0.2.15 20 95372 4960 S 0.17 0.65 sshd
7282 root 10.0.0.226 20 0 0 S 0.09 0.00 kworker/u4:2
9003 root 10.0.0.226 20 0 0 S 0.09 0.00 kworker/u4:1
1195 root 10.0.0.227 20 0 0 S 0.09 0.00 kworker/u4:0
27240 root 10.0.0.227 20 0 0 S 0.09 0.00 kworker/1:1
9933 root 10.0.0.227 20 0 0 S 0.09 0.00 kworker/u4:2
16181 root 10.0.0.228 20 0 0 S 0.08 0.00 kworker/u4:1
1744 root 10.0.0.228 20 0 0 S 0.08 0.00 kworker/1:1
28506 root 10.0.0.228 20 95372 7348 S 0.08 0.97 sshd
691 messagebus 10.0.0.228 20 42896 3872 S 0.08 0.51 dbus-daemon
11892 root 10.0.2.15 20 0 0 S 0.08 0.00 kworker/0:2
15609 root 10.0.2.15 20 403548 12908 S 0.08 1.70 apache2
256 root 10.0.2.15 20 0 0 S 0.08 0.00 jbd2/dm-0-8
840 root 10.0.2.15 20 316200 1308 S 0.08 0.17 VBoxService
14694 root 10.0.0.227 20 95368 7200 S 0.00 0.95 sshd
12724 n/a 10.0.0.227 20 4508 1780 S 0.00 0.23 mysqld_safe
10974 root 10.0.0.227 20 95368 7400 S 0.00 0.98 sshd
14712 root 10.0.0.227 20 95368 7384 S 0.00 0.97 sshd
16952 root 10.0.0.227 20 95368 7344 S 0.00 0.97 sshd
17025 root 10.0.0.227 20 95368 7100 S 0.00 0.94 sshd
27075 root 10.0.0.227 20 0 0 S 0.00 0.00 kworker/u4:1
27169 root 10.0.0.227 20 0 0 S 0.00 0.00 kworker/0:0
881 root 10.0.0.227 20 37976 760 S 0.00 0.10 rpc.mountd
100 root 10.0.0.227 0 0 0 S 0.00 0.00 deferwq
102 root 10.0.0.227 0 0 0 S 0.00 0.00 bioset
11876 root 10.0.0.227 20 9588 2572 S 0.00 0.34 bash
11852 root 10.0.0.227 20 95368 7352 S 0.00 0.97 sshd
104 root 10.0.0.227 0 0 0 S 0.00 0.00 kworker/1:1H
Lorsque vous regardez en haut, vous verrez des statistiques de CPU et de mémoire agrégées sur l'ensemble du cluster.
[email protected]:~# s9s process --top --cluster-id=1
PXC_Cluster_57 - 14:38:01 All nodes are operational.
4 hosts, 7 cores, 2.2 us, 3.1 sy, 94.7 id, 0.0 wa, 0.0 st,
GiB Mem : 2.9 total, 0.2 free, 0.9 used, 0.2 buffers, 1.6 cached
GiB Swap: 3 total, 0 used, 3 free,
Vous trouverez ci-dessous la liste des processus de tous les nœuds du cluster.
PID USER HOST PR VIRT RES S %CPU %MEM COMMAND
8331 root 10.0.2.15 20 743748 40948 S 10.28 5.40 cmon
26479 root 10.0.0.226 20 278532 6448 S 2.49 0.85 accounts-daemon
5466 root 10.0.0.226 20 95372 7132 R 1.72 0.94 sshd
651 root 10.0.0.227 20 278416 6184 S 1.37 0.82 accounts-daemon
716 root 10.0.0.228 20 278304 6052 S 1.35 0.80 accounts-daemon
22447 n/a 10.0.0.226 20 2744444 148820 S 1.20 19.63 mysqld
975 mysql 10.0.0.228 20 2733624 115212 S 1.18 15.20 mysqld
13691 n/a 10.0.0.227 20 2734104 130568 S 1.11 17.22 mysqld
Cela peut être extrêmement utile si vous avez besoin de déterminer ce qui cause la charge et quel nœud est le plus affecté.
Espérons que l'outil CLI vous facilite l'intégration de ClusterControl avec des scripts externes et des outils d'orchestration d'infrastructure. Nous espérons que vous apprécierez cet outil et si vous avez des commentaires sur la façon de l'améliorer, n'hésitez pas à nous le faire savoir.