Wie möchten Sie den "obersten" Prozess für alle Ihre 5 Datenbankknoten zusammenführen und mit nur einem Einzeiler-Befehl nach CPU-Auslastung sortieren? Ja, du hast richtig gelesen! Wie wäre es mit interaktiven Diagrammen, die in der Terminalschnittstelle angezeigt werden? Wir haben den CLI-Client für ClusterControl namens s9s vor etwa einem Jahr eingeführt, und er war eine großartige Ergänzung zum Webinterface. Es ist auch Open Source..
In diesem Blogbeitrag zeigen wir Ihnen, wie Sie Ihre Datenbanken mit Ihrem Terminal und der s9s-Befehlszeilenschnittstelle überwachen können.
Einführung in s9s, die ClusterControl-CLI
ClusterControl CLI (oder s9s oder s9s CLI) ist ein Open-Source-Projekt und optionales Paket, das mit ClusterControl Version 1.4.1 eingeführt wurde. Es ist ein Befehlszeilentool zur Interaktion, Steuerung und Verwaltung Ihrer Datenbankinfrastruktur mit ClusterControl. Das s9s-Befehlszeilenprojekt ist Open Source und kann auf GitHub gefunden werden.
Ab Version 1.4.1 installiert das Installationsskript automatisch das Paket (s9s-tools) auf dem ClusterControl-Knoten.
Einige Voraussetzungen. Damit Sie die s9s-tools CLI ausführen können, muss Folgendes zutreffen:
- Ein laufender ClusterControl Controller (cmon).
- s9s-Client, als separates Paket installieren.
- Port 9501 muss vom s9s-Client erreichbar sein.
Die Installation der s9s-CLI ist unkompliziert, wenn Sie sie auf dem ClusterControl-Controller-Host selbst installieren:$ rm
$ rm -Rf ~/.s9s
$ wget http://repo.severalnines.com/s9s-tools/install-s9s-tools.sh
$ ./install-s9s-tools.sh
Sie können s9s-tools außerhalb des ClusterControl-Servers (Ihrem Workstation-Laptop oder Bastion-Host) installieren, solange die RPC-Schnittstelle (TLS) des ClusterControl-Controllers dem öffentlichen Netzwerk ausgesetzt ist (standardmäßig 127.0.0.1:9501). Weitere Details zur Konfiguration finden Sie auf der Dokumentationsseite.
Um zu überprüfen, ob Sie sich korrekt mit der ClusterControl-RPC-Schnittstelle verbinden können, sollten Sie die OK-Antwort erhalten, wenn Sie den folgenden Befehl ausführen:
$ s9s cluster --ping
PING OK 2.000 ms
Sehen Sie sich nebenbei auch die Einschränkungen bei der Verwendung dieses Tools an.
Beispielbereitstellung
Unsere Beispielbereitstellung besteht aus 8 Knoten in 3 Clustern:
- PostgreSQL-Streaming-Replikation - 1 Master, 2 Slaves
- MySQL-Replikation - 1 Master, 1 Slave
- MongoDB-Replikatsatz – 1 primärer, 2 sekundärer Knoten
Alle Datenbankcluster wurden von ClusterControl mithilfe des Bereitstellungsassistenten „Datenbankcluster bereitstellen“ bereitgestellt, und aus Sicht der Benutzeroberfläche sehen wir Folgendes im Cluster-Dashboard:
Cluster-Überwachung
Wir beginnen mit der Auflistung der Cluster:
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
23 STARTED postgresql_single system admins PostgreSQL 10 All nodes are operational.
24 STARTED replication system admins Oracle 5.7 Replication All nodes are operational.
25 STARTED mongodb system admins MongoDB 3.6 All nodes are operational.
Wir sehen die gleichen Cluster wie die UI. Wir können weitere Details zu dem jeweiligen Cluster erhalten, indem wir das Flag --stat verwenden. Auf diese Weise können auch mehrere Cluster und Knoten überwacht werden, die Befehlszeilenoptionen können sogar Platzhalter in den Knoten- und Clusternamen verwenden:
$ s9s cluster --stat *Replication
Oracle 5.7 Replication Name: Oracle 5.7 Replication Owner: system/admins
ID: 24 State: STARTED
Type: REPLICATION Vendor: oracle 5.7
Status: All nodes are operational.
Alarms: 0 crit 1 warn
Jobs: 0 abort 0 defnd 0 dequd 0 faild 7 finsd 0 runng
Config: '/etc/cmon.d/cmon_24.cnf'
LogFile: '/var/log/cmon_24.log'
HOSTNAME CPU MEMORY SWAP DISK NICs
10.0.0.104 1 6% 992M 120M 0B 0B 19G 13G 10K/s 54K/s
10.0.0.168 1 6% 992M 116M 0B 0B 19G 13G 11K/s 66K/s
10.0.0.156 2 39% 3.6G 2.4G 0B 0B 19G 3.3G 338K/s 79K/s
Die obige Ausgabe gibt eine Zusammenfassung unserer MySQL-Replikation zusammen mit Clusterstatus, Zustand, Anbieter, Konfigurationsdatei und so weiter. Unterhalb der Zeile sehen Sie die Liste der Knoten, die unter diese Cluster-ID fallen, mit einer zusammengefassten Ansicht der Systemressourcen für jeden Host, wie z. B. Anzahl der CPUs, Gesamtspeicher, Speichernutzung, Auslagerungsdatenträger und Netzwerkschnittstellen. Alle angezeigten Informationen werden aus der CMON-Datenbank abgerufen, nicht direkt von den tatsächlichen Knoten.
Sie können auch eine zusammengefasste Ansicht aller Datenbanken auf allen Clustern erhalten:
$ s9s cluster --list-databases --long
SIZE #TBL #ROWS OWNER GROUP CLUSTER DATABASE
7,340,032 0 0 system admins PostgreSQL 10 postgres
7,340,032 0 0 system admins PostgreSQL 10 template1
7,340,032 0 0 system admins PostgreSQL 10 template0
765,460,480 24 2,399,611 system admins PostgreSQL 10 sbtest
0 101 - system admins Oracle 5.7 Replication sys
Total: 5 databases, 789,577,728, 125 tables.
Die letzte Zeile fasst zusammen, dass wir insgesamt 5 Datenbanken mit 125 Tabellen haben, 4 davon befinden sich auf unserem PostgreSQL-Cluster.
Ein vollständiges Beispiel für die Verwendung der s9s-Cluster-Befehlszeilenoptionen finden Sie in der s9s-Cluster-Dokumentation.
Knotenüberwachung
Für die Knotenüberwachung verfügt die s9s-CLI über ähnliche Funktionen wie die Cluster-Option. Um eine zusammengefasste Ansicht aller Knoten zu erhalten, können Sie einfach Folgendes tun:
$ s9s node --list --long
STAT VERSION CID CLUSTER HOST PORT COMMENT
coC- 1.6.2.2662 23 PostgreSQL 10 10.0.0.156 9500 Up and running
poM- 10.4 23 PostgreSQL 10 10.0.0.44 5432 Up and running
poS- 10.4 23 PostgreSQL 10 10.0.0.58 5432 Up and running
poS- 10.4 23 PostgreSQL 10 10.0.0.60 5432 Up and running
soS- 5.7.23-log 24 Oracle 5.7 Replication 10.0.0.104 3306 Up and running.
coC- 1.6.2.2662 24 Oracle 5.7 Replication 10.0.0.156 9500 Up and running
soM- 5.7.23-log 24 Oracle 5.7 Replication 10.0.0.168 3306 Up and running.
mo-- 3.2.20 25 MongoDB 3.6 10.0.0.125 27017 Up and Running
mo-- 3.2.20 25 MongoDB 3.6 10.0.0.131 27017 Up and Running
coC- 1.6.2.2662 25 MongoDB 3.6 10.0.0.156 9500 Up and running
mo-- 3.2.20 25 MongoDB 3.6 10.0.0.35 27017 Up and Running
Total: 11
Die Spalte ganz links gibt den Typ des Knotens an. Für diese Bereitstellung steht „c“ für ClusterControl Controller, „p“ für PostgreSQL, „m“ für MongoDB, „e“ für Memcached und s für generische MySQL-Knoten. Der nächste ist der Hoststatus – „o“ für online, „ l“ für offline, „f“ für ausgefallene Knoten und so weiter. Als nächstes kommt die Rolle des Knotens im Cluster. Es kann M für Master, S für Slave, C für Controller und – für alles andere sein. Die restlichen Spalten sind ziemlich selbsterklärend.
Sie können die gesamte Liste abrufen, indem Sie sich die Manpage dieser Komponente ansehen:
$ man s9s-node
Von dort aus können wir mit dem Flag --stats zu detaillierteren Statistiken für alle Knoten springen:
$ s9s node --stat --cluster-id=24
10.0.0.104:3306
Name: 10.0.0.104 Cluster: Oracle 5.7 Replication (24)
IP: 10.0.0.104 Port: 3306
Alias: - Owner: system/admins
Class: CmonMySqlHost Type: mysql
Status: CmonHostOnline Role: slave
OS: centos 7.0.1406 core Access: read-only
VM ID: -
Version: 5.7.23-log
Message: Up and running.
LastSeen: Just now SSH: 0 fail(s)
Connect: y Maintenance: n Managed: n Recovery: n Skip DNS: y SuperReadOnly: n
Pid: 16592 Uptime: 01:44:38
Config: '/etc/my.cnf'
LogFile: '/var/log/mysql/mysqld.log'
PidFile: '/var/lib/mysql/mysql.pid'
DataDir: '/var/lib/mysql/'
10.0.0.168:3306
Name: 10.0.0.168 Cluster: Oracle 5.7 Replication (24)
IP: 10.0.0.168 Port: 3306
Alias: - Owner: system/admins
Class: CmonMySqlHost Type: mysql
Status: CmonHostOnline Role: master
OS: centos 7.0.1406 core Access: read-write
VM ID: -
Version: 5.7.23-log
Message: Up and running.
Slaves: 10.0.0.104:3306
LastSeen: Just now SSH: 0 fail(s)
Connect: n Maintenance: n Managed: n Recovery: n Skip DNS: y SuperReadOnly: n
Pid: 975 Uptime: 01:52:53
Config: '/etc/my.cnf'
LogFile: '/var/log/mysql/mysqld.log'
PidFile: '/var/lib/mysql/mysql.pid'
DataDir: '/var/lib/mysql/'
10.0.0.156:9500
Name: 10.0.0.156 Cluster: Oracle 5.7 Replication (24)
IP: 10.0.0.156 Port: 9500
Alias: - Owner: system/admins
Class: CmonHost Type: controller
Status: CmonHostOnline Role: controller
OS: centos 7.0.1406 core Access: read-write
VM ID: -
Version: 1.6.2.2662
Message: Up and running
LastSeen: 28 seconds ago SSH: 0 fail(s)
Connect: n Maintenance: n Managed: n Recovery: n Skip DNS: n SuperReadOnly: n
Pid: 12746 Uptime: 01:10:05
Config: ''
LogFile: '/var/log/cmon_24.log'
PidFile: ''
DataDir: ''
Das Drucken von Diagrammen mit dem s9s-Client kann ebenfalls sehr informativ sein. Diese stellt die vom Controller gesammelten Daten in verschiedenen Grafiken dar. Es gibt fast 30 Diagramme, die von diesem Tool unterstützt werden, wie hier aufgelistet, und s9s-node zählt sie alle auf. Das Folgende zeigt das Serverlast-Histogramm aller Knoten für die Cluster-ID 1, wie es von CMON direkt von Ihrem Terminal erfasst wurde:
Es ist möglich, Start- und Enddatum und -uhrzeit einzustellen. Man kann kurze Zeiträume (wie die letzte Stunde) oder längere Zeiträume (wie eine Woche oder einen Monat) anzeigen. Im Folgenden sehen Sie ein Beispiel für die Anzeige der Festplattennutzung für die letzte Stunde:
Mit der Option --density kann für jedes Diagramm eine andere Ansicht gedruckt werden. Dieses Dichtediagramm zeigt nicht die Zeitreihe, sondern wie häufig die angegebenen Werte gesehen wurden (X-Achse stellt den Dichtewert dar):
Wenn das Terminal Unicode-Zeichen nicht unterstützt, können sie mit der Option --only-ascii ausgeschaltet werden:
Die Graphen sind farbig, wobei beispielsweise gefährlich hohe Werte rot dargestellt werden. Die Liste der Knoten kann mit der Option --nodes gefiltert werden, wobei Sie die Knotennamen angeben oder gegebenenfalls Platzhalter verwenden können.
Prozessüberwachung
Eine weitere coole Sache an der s9s-CLI ist, dass sie eine Prozessliste des gesamten Clusters bereitstellt – eine „Spitze“ für alle Knoten, alle Prozesse zu einem zusammengeführt. Der folgende Befehl führt den Befehl „top“ auf allen Datenbankknoten für die Cluster-ID 24 aus, sortiert nach dem höchsten CPU-Verbrauch und fortlaufend aktualisiert:
$ s9s process --top --cluster-id=24
Oracle 5.7 Replication - 04:39:17 All nodes are operational.
3 hosts, 4 cores, 10.6 us, 4.2 sy, 84.6 id, 0.1 wa, 0.3 st,
GiB Mem : 5.5 total, 1.7 free, 2.6 used, 0.1 buffers, 1.1 cached
GiB Swap: 0 total, 0 used, 0 free,
PID USER HOST PR VIRT RES S %CPU %MEM COMMAND
12746 root 10.0.0.156 20 1359348 58976 S 25.25 1.56 cmon
1587 apache 10.0.0.156 20 462572 21632 S 1.38 0.57 httpd
390 root 10.0.0.156 20 4356 584 S 1.32 0.02 rngd
975 mysql 10.0.0.168 20 1144260 71936 S 1.11 7.08 mysqld
16592 mysql 10.0.0.104 20 1144808 75976 S 1.11 7.48 mysqld
22983 root 10.0.0.104 20 127368 5308 S 0.92 0.52 sshd
22548 root 10.0.0.168 20 127368 5304 S 0.83 0.52 sshd
1632 mysql 10.0.0.156 20 3578232 1803336 S 0.50 47.65 mysqld
470 proxysql 10.0.0.156 20 167956 35300 S 0.44 0.93 proxysql
338 root 10.0.0.104 20 4304 600 S 0.37 0.06 rngd
351 root 10.0.0.168 20 4304 600 R 0.28 0.06 rngd
24 root 10.0.0.156 20 0 0 S 0.19 0.00 rcu_sched
785 root 10.0.0.156 20 454112 11092 S 0.13 0.29 httpd
26 root 10.0.0.156 20 0 0 S 0.13 0.00 rcuos/1
25 root 10.0.0.156 20 0 0 S 0.13 0.00 rcuos/0
22498 root 10.0.0.168 20 127368 5200 S 0.09 0.51 sshd
14538 root 10.0.0.104 20 0 0 S 0.09 0.00 kworker/0:1
22933 root 10.0.0.104 20 127368 5200 S 0.09 0.51 sshd
28295 root 10.0.0.156 20 127452 5016 S 0.06 0.13 sshd
2238 root 10.0.0.156 20 197520 10444 S 0.06 0.28 vc-agent-007
419 root 10.0.0.156 20 34764 1660 S 0.06 0.04 systemd-logind
1 root 10.0.0.156 20 47628 3560 S 0.06 0.09 systemd
27992 proxysql 10.0.0.156 20 11688 872 S 0.00 0.02 proxysql_galera
28036 proxysql 10.0.0.156 20 11688 876 S 0.00 0.02 proxysql_galera
Es gibt auch ein --list-Flag, das ein ähnliches Ergebnis ohne kontinuierliche Aktualisierung zurückgibt (ähnlich dem "ps"-Befehl):
$ s9s process --list --cluster-id=25
Auftragsüberwachung
Jobs sind Aufgaben, die von der Steuerung im Hintergrund ausgeführt werden, sodass die Client-Anwendung nicht warten muss, bis der gesamte Job abgeschlossen ist. ClusterControl führt Verwaltungsaufgaben aus, indem es jeder Aufgabe eine ID zuweist, und lässt den internen Scheduler entscheiden, ob zwei oder mehr Jobs parallel ausgeführt werden können. Beispielsweise kann mehr als eine Cluster-Bereitstellung gleichzeitig ausgeführt werden, ebenso wie andere lang andauernde Vorgänge wie Sicherungen und automatisches Hochladen von Sicherungen in den Cloud-Speicher.
Bei jedem Verwaltungsvorgang wäre es hilfreich, wenn wir den Fortschritt und den Status eines bestimmten Jobs überwachen könnten, wie z. B. das Aufskalieren eines neuen Slaves für unsere MySQL-Replikation. Der folgende Befehl fügt einen neuen Slave, 10.0.0.77, hinzu, um unsere MySQL-Replikation zu skalieren:
$ s9s cluster --add-node --nodes="10.0.0.77" --cluster-id=24
Job with ID 66992 registered.
Wir können dann die Job-ID 66992 mit der Job-Option überwachen:
$ s9s job --log --job-id=66992
addNode: Verifying job parameters.
10.0.0.77:3306: Adding host to cluster.
10.0.0.77:3306: Testing SSH to host.
10.0.0.77:3306: Installing node.
10.0.0.77:3306: Setup new node (installSoftware = true).
10.0.0.77:3306: Setting SELinux in permissive mode.
10.0.0.77:3306: Disabling firewall.
10.0.0.77:3306: Setting vm.swappiness = 1
10.0.0.77:3306: Installing software.
10.0.0.77:3306: Setting up repositories.
10.0.0.77:3306: Installing helper packages.
10.0.0.77: Upgrading nss.
10.0.0.77: Upgrading ca-certificates.
10.0.0.77: Installing socat.
...
10.0.0.77: Installing pigz.
10.0.0.77: Installing bzip2.
10.0.0.77: Installing iproute2.
10.0.0.77: Installing tar.
10.0.0.77: Installing openssl.
10.0.0.77: Upgrading openssl openssl-libs.
10.0.0.77: Finished with helper packages.
10.0.0.77:3306: Verifying helper packages (checking if socat is installed successfully).
10.0.0.77:3306: Uninstalling existing MySQL packages.
10.0.0.77:3306: Installing replication software, vendor oracle, version 5.7.
10.0.0.77:3306: Installing software.
...
Oder wir können das Flag --wait verwenden und erhalten einen Spinner mit Fortschrittsbalken:
$ s9s job --wait --job-id=66992
Add Node to Cluster
- Job 66992 RUNNING [ █] ---% Add New Node to Cluster
Das war es für die heutige Monitoring-Ergänzung. Wir hoffen, dass Sie die CLI ausprobieren und einen Mehrwert daraus ziehen. Viel Spaß beim Clustern