5つのデータベースノードすべての「最上位」プロセスをどのようにマージし、ワンライナーコマンドだけでCPU使用率で並べ替えますか?ええ、あなたはそれを正しく読んでいます!ターミナルインターフェイスにインタラクティブなグラフが表示されるのはどうですか?約1年前にs9sと呼ばれるClusterControl用のCLIクライアントを導入しました。これは、Webインターフェイスを補完するものです。オープンソースでもあります。
このブログ投稿では、ターミナルとs9sCLIを使用してデータベースを監視する方法を紹介します。
s9s、ClusterControlCLIの概要
ClusterControl CLI(またはs9sまたはs9s CLI)は、ClusterControlバージョン1.4.1で導入されたオープンソースプロジェクトおよびオプションのパッケージです。これは、ClusterControlを使用してデータベースインフラストラクチャを操作、制御、および管理するためのコマンドラインツールです。 s9sコマンドラインプロジェクトはオープンソースであり、GitHubにあります。
バージョン1.4.1以降、インストーラースクリプトは、ClusterControlノードにパッケージ(s9s-tools)を自動的にインストールします。
いくつかの前提条件。 s9s-tools CLIを実行するには、次の条件が満たされている必要があります。
- 実行中のClusterControlコントローラー(cmon)。
- s9sクライアント、別のパッケージとしてインストールします。
- ポート9501は、s9sクライアントから到達可能である必要があります。
ClusterControlコントローラーホスト自体にインストールする場合、s9sCLIのインストールは簡単です。$rm
$ rm -Rf ~/.s9s
$ wget http://repo.severalnines.com/s9s-tools/install-s9s-tools.sh
$ ./install-s9s-tools.sh
ClusterControl Controller RPC(TLS)インターフェイスがパブリックネットワーク(デフォルトは127.0.0.1:9501)に公開されている限り、ClusterControlサーバー(ワークステーションのラップトップまたは要塞ホスト)の外部にs9s-toolsをインストールできます。これを構成する方法の詳細については、ドキュメントページをご覧ください。
ClusterControl RPCインターフェースに正しく接続できるかどうかを確認するには、次のコマンドを実行したときにOK応答を取得する必要があります。
$ s9s cluster --ping
PING OK 2.000 ms
補足として、このツールを使用する際の制限も確認してください。
導入例
この展開例は、3つのクラスターにまたがる8つのノードで構成されています。
- PostgreSQLストリーミングレプリケーション-1つのマスター、2つのスレーブ
- MySQLレプリケーション-1マスター、1スレーブ
- MongoDBレプリカセット-1つのプライマリノード、2つのセカンダリノード
すべてのデータベースクラスターは、「データベースクラスターの展開」展開ウィザードを使用してClusterControlによって展開され、UIの観点からは、これがクラスターダッシュボードに表示されます。
クラスターモニタリング
まず、クラスターを一覧表示します。
$ 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.
UIと同じクラスターが表示されます。 --statフラグを使用すると、特定のクラスターの詳細を取得できます。この方法で複数のクラスターとノードを監視することもできます。コマンドラインオプションでは、ノード名とクラスター名にワイルドカードを使用することもできます。
$ 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
上記の出力は、クラスターのステータス、状態、ベンダー、構成ファイルなどとともに、MySQLレプリケーションの概要を示しています。将来的には、このクラスターIDに該当するノードのリストが表示され、CPUの数、合計メモリ、メモリ使用量、スワップディスク、ネットワークインターフェイスなどの各ホストのシステムリソースの概要が表示されます。表示されるすべての情報は、実際のノードから直接取得されるのではなく、CMONデータベースから取得されます。
すべてのクラスター上のすべてのデータベースの要約ビューを取得することもできます:
$ 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.
最後の行は、125個のテーブルを持つ合計5つのデータベースがあり、そのうちの4つがPostgreSQLクラスター上にあることを要約しています。
s9sクラスターのコマンドラインオプションの使用例については、s9sクラスターのドキュメントをご覧ください。
ノードモニタリング
ノード監視の場合、s9sCLIにはクラスターオプションと同様の機能があります。すべてのノードの要約ビューを取得するには、次のようにするだけです。
$ 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
左端の列は、ノードのタイプを指定します。このデプロイメントでは、「c」はClusterControlコントローラー、「p」はPostgreSQL、「m」はMongoDB、「e」はMemcached、sは汎用MySQLノードを表します。次はホストステータスです。「o」はオンライン、「オフラインの場合は「l」、障害が発生したノードの場合は「f」など。次はクラスター内のノードの役割です。マスターの場合はM、スレーブの場合はS、コントローラーの場合はC、その他すべての場合はCになります。残りの列はかなり自明です。
このコンポーネントのマニュアルページを見ると、すべてのリストを取得できます。
$ man s9s-node
そこから、-statsフラグを使用してすべてのノードのより詳細な統計にジャンプできます:
$ 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: ''
s9sクライアントでグラフを印刷することも非常に有益です。これにより、コントローラーが収集したデータがさまざまなグラフに表示されます。ここにリストされているように、このツールでサポートされているグラフはほぼ30あり、s9s-nodeはそれらすべてを列挙します。以下は、CMONによって端末から直接収集された、クラスターID1のすべてのノードのサーバー負荷ヒストグラムを示しています。
開始日時と終了日時を設定することができます。短い期間(過去1時間など)または長い期間(1週間または1か月など)を表示できます。以下は、過去1時間のディスク使用率を表示する例です。
--densityオプションを使用すると、グラフごとに異なるビューを印刷できます。この密度グラフは時系列ではなく、指定された値が表示された頻度を示しています(X軸は密度値を表します):
端末がUnicode文字をサポートしていない場合、-only-asciiオプションでUnicode文字をオフに切り替えることができます:
グラフには色があり、たとえば危険なほど高い値は赤で表示されます。ノードのリストは--nodesオプションでフィルタリングできます。このオプションでは、ノード名を指定するか、必要に応じてワイルドカードを使用できます。
プロセス監視
s9s CLIのもう1つの優れた点は、クラスター全体のプロセスリストを提供することです。これは、すべてのノードの「トップ」であり、すべてのプロセスが1つにマージされます。次のコマンドは、クラスターID 24のすべてのデータベースノードで「top」コマンドを実行し、CPU消費量が最も多い順に並べ替えて、継続的に更新します。
$ 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
継続的な更新なしで同様の結果を返す--listフラグもあります(「ps」コマンドと同様):
$ s9s process --list --cluster-id=25
ジョブモニタリング
ジョブは、コントローラーによってバックグラウンドで実行されるタスクであるため、クライアントアプリケーションは、ジョブ全体が終了するまで待機する必要はありません。 ClusterControlは、すべてのタスクにIDを割り当てることによって管理タスクを実行し、内部スケジューラーが2つ以上のジョブを並行して実行できるかどうかを決定できるようにします。たとえば、複数のクラスタデプロイメントを同時に実行したり、バックアップやクラウドストレージへのバックアップの自動アップロードなどの他の長時間実行操作を実行したりできます。
どのような管理操作でも、MySQLレプリケーションの新しいスレーブをスケールアウトするなど、特定のジョブの進行状況とステータスを監視できれば便利です。次のコマンドは、新しいスレーブ10.0.0.77を追加して、MySQLレプリケーションをスケールアウトします。
$ s9s cluster --add-node --nodes="10.0.0.77" --cluster-id=24
Job with ID 66992 registered.
次に、ジョブオプションを使用してjobID66992を監視できます。
$ 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.
...
または、-waitフラグを使用して、プログレスバー付きのスピナーを取得することもできます:
$ s9s job --wait --job-id=66992
Add Node to Cluster
- Job 66992 RUNNING [ █] ---% Add New Node to Cluster
今日のモニタリングサプリメントは以上です。 CLIを試して、その価値を引き出していただければ幸いです。ハッピークラスタリング