Hoe zou je het "top"-proces voor al je 5 databaseknooppunten willen samenvoegen en sorteren op CPU-gebruik met slechts een one-liner-opdracht? Ja, je leest het goed! Hoe zit het met interactieve grafieken in de terminalinterface? We hebben ongeveer een jaar geleden de CLI-client voor ClusterControl, s9s genaamd, geïntroduceerd en het is een geweldige aanvulling op de webinterface. Het is ook open source..
In deze blogpost laten we u zien hoe u uw databases kunt controleren met uw terminal en s9s CLI.
Inleiding tot s9s, The ClusterControl CLI
ClusterControl CLI (of s9s of s9s CLI), is een open source project en optioneel pakket geïntroduceerd met ClusterControl versie 1.4.1. Het is een opdrachtregeltool voor interactie, controle en beheer van uw database-infrastructuur met behulp van ClusterControl. Het s9s-opdrachtregelproject is open source en is te vinden op GitHub.
Vanaf versie 1.4.1 zal het installatiescript het pakket (s9s-tools) automatisch installeren op het ClusterControl-knooppunt.
Enkele voorwaarden. Om s9s-tools CLI te kunnen gebruiken, moet het volgende waar zijn:
- Een draaiende ClusterControl-controller (cmon).
- s9s-client, installeer als een afzonderlijk pakket.
- Poort 9501 moet bereikbaar zijn voor de s9s-client.
Het installeren van de s9s CLI is eenvoudig als u het op de ClusterControl Controller-host zelf installeert:$ rm
$ rm -Rf ~/.s9s
$ wget http://repo.severalnines.com/s9s-tools/install-s9s-tools.sh
$ ./install-s9s-tools.sh
U kunt s9s-tools installeren buiten de ClusterControl-server (uw werkstationlaptop of bastionhost), zolang de ClusterControl Controller RPC (TLS)-interface is blootgesteld aan het openbare netwerk (standaard 127.0.0.1:9501). U kunt meer details vinden over hoe u dit kunt configureren op de documentatiepagina.
Om te controleren of u correct verbinding kunt maken met de ClusterControl RPC-interface, moet u het antwoord OK krijgen wanneer u de volgende opdracht uitvoert:
$ s9s cluster --ping
PING OK 2.000 ms
Kijk terzijde ook eens naar de beperkingen bij het gebruik van deze tool.
Voorbeeld implementatie
Onze voorbeeldimplementatie bestaat uit 8 knooppunten in 3 clusters:
- PostgreSQL-streamingreplicatie - 1 master, 2 slaves
- MySQL-replicatie - 1 master, 1 slave
- MongoDB-replicaset - 1 primaire, 2 secundaire knooppunten
Alle databaseclusters zijn geïmplementeerd door ClusterControl met behulp van de implementatiewizard "Deploy Database Cluster" en vanuit het oogpunt van de gebruikersinterface is dit wat we zouden zien in het clusterdashboard:
Clusterbewaking
We beginnen met het opsommen van de clusters:
$ 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.
We zien dezelfde clusters als de UI. We kunnen meer details over het specifieke cluster krijgen door de --stat-vlag te gebruiken. Meerdere clusters en knooppunten kunnen op deze manier ook worden bewaakt, de opdrachtregelopties kunnen zelfs jokertekens gebruiken in de knooppunt- en clusternamen:
$ 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
De uitvoer hierboven geeft een samenvatting van onze MySQL-replicatie samen met de clusterstatus, staat, leverancier, configuratiebestand enzovoort. Langs de lijn kunt u de lijst met knooppunten zien die onder deze cluster-ID vallen met een samengevat overzicht van systeembronnen voor elke host, zoals het aantal CPU's, het totale geheugen, geheugengebruik, wisselschijf en netwerkinterfaces. Alle getoonde informatie wordt opgehaald uit de CMON-database, niet rechtstreeks uit de daadwerkelijke knooppunten.
U kunt ook een overzicht krijgen van alle databases op alle clusters:
$ 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.
De laatste regel vat samen dat we in totaal 5 databases hebben met 125 tabellen, waarvan 4 op ons PostgreSQL-cluster.
Voor een compleet voorbeeld van gebruik op s9s-clusteropdrachtregelopties, bekijk de s9s-clusterdocumentatie.
Knooppuntbewaking
Voor knooppuntbewaking heeft s9s CLI vergelijkbare functies als de clusteroptie. Om een overzicht van alle knooppunten te krijgen, kunt u eenvoudig het volgende doen:
$ 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
De meest linkse kolom specificeert het type node. Voor deze implementatie staat "c" voor ClusterControl Controller, 'p' voor PostgreSQL, "m" voor MongoDB, "e" voor Memcached en s voor generieke MySQL-knooppunten. De volgende is de hoststatus - "o" voor online, " l" voor offline, "f" voor mislukte knooppunten enzovoort. De volgende is de rol van het knooppunt in het cluster. Het kan M zijn voor master, S voor slave, C voor controller en - voor al het andere. De overige kolommen spreken voor zich.
Je kunt de hele lijst krijgen door naar de man-pagina van dit onderdeel te kijken:
$ man s9s-node
Van daaruit kunnen we naar meer gedetailleerde statistieken springen voor alle knooppunten met --stats vlag:
$ 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: ''
Grafieken afdrukken met de s9s-client kan ook zeer informatief zijn. Dit presenteert de gegevens die de verwerkingsverantwoordelijke heeft verzameld in verschillende grafieken. Er worden bijna 30 grafieken ondersteund door deze tool, zoals hier vermeld en s9s-node somt ze allemaal op. Het volgende toont het serverbelastinghistogram van alle knooppunten voor cluster-ID 1 zoals verzameld door CMON, rechtstreeks vanaf uw terminal:
Het is mogelijk om de start- en einddatum en -tijd in te stellen. Men kan korte periodes (zoals het laatste uur) of langere periodes (zoals een week of een maand) bekijken. Het volgende is een voorbeeld van het bekijken van het schijfgebruik van het afgelopen uur:
Met de --density optie kan voor elke grafiek een andere weergave worden afgedrukt. Deze dichtheidsgrafiek toont niet de tijdreeks, maar hoe vaak de gegeven waarden werden gezien (X-as geeft de dichtheidswaarde weer):
Als de terminal geen Unicode-tekens ondersteunt, kan de optie --only-ascii ze uitschakelen:
De grafieken hebben kleuren, waarbij gevaarlijk hoge waarden bijvoorbeeld in rood worden weergegeven. De lijst met knooppunten kan worden gefilterd met de optie --nodes, waar u de knooppuntnamen kunt specificeren of indien nodig jokertekens kunt gebruiken.
Procesbewaking
Een ander cool ding over s9s CLI is dat het een proceslijst van het hele cluster biedt - een "top" voor alle knooppunten, alle processen samengevoegd tot één. De volgende opdracht voert de opdracht "top" uit op alle databaseknooppunten voor cluster-ID 24, gesorteerd op het meeste CPU-verbruik en continu bijgewerkt:
$ 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
Er is ook een --list vlag die een soortgelijk resultaat retourneert zonder continue update (vergelijkbaar met "ps" commando):
$ s9s process --list --cluster-id=25
Taakbewaking
Taken zijn taken die door de controller op de achtergrond worden uitgevoerd, zodat de clienttoepassing niet hoeft te wachten tot de hele taak is voltooid. ClusterControl voert beheertaken uit door aan elke taak een ID toe te kennen en laat de interne planner beslissen of twee of meer taken parallel kunnen worden uitgevoerd. Er kan bijvoorbeeld meer dan één clusterimplementatie tegelijkertijd worden uitgevoerd, evenals andere langlopende bewerkingen zoals back-up en automatische upload van back-ups naar cloudopslag.
Bij elke beheeroperatie zou het handig zijn als we de voortgang en status van een specifieke taak zouden kunnen volgen, zoals bijvoorbeeld het uitschalen van een nieuwe slaaf voor onze MySQL-replicatie. De volgende opdracht voegt een nieuwe slaaf toe, 10.0.0.77 om onze MySQL-replicatie uit te schalen:
$ s9s cluster --add-node --nodes="10.0.0.77" --cluster-id=24
Job with ID 66992 registered.
We kunnen dan de jobID 66992 controleren met behulp van de job-optie:
$ 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.
...
Of we kunnen de --wait vlag gebruiken en een spinner met voortgangsbalk krijgen:
$ s9s job --wait --job-id=66992
Add Node to Cluster
- Job 66992 RUNNING [ █] ---% Add New Node to Cluster
Dat is het voor het monitoringsupplement van vandaag. We hopen dat u de CLI eens zult proberen en er waarde uit zult halen. Gelukkig clusteren