sql >> データベース >  >> NoSQL >> MongoDB

ClusterControlCLIを使用してデータベースサーバーを監視する方法

    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を試して、その価値を引き出していただければ幸いです。ハッピークラスタリング


    1. mongo.lockファイルの用途は何ですか?

    2. Redisでソートされたセットを使用したインデックス作成

    3. MongoDBのインデックス

    4. MongoDBのオブジェクトを部分的に更新して、新しいオブジェクトが既存のオブジェクトとオーバーレイ/マージされるようにするにはどうすればよいですか?