sql >> データベース >  >> RDS >> Mysql

同じマシンで実行されている複数のMySQLインスタンスを監視する方法-ClusterControlのヒントとコツ

    ClusterControl1.6以降が必要です。 MySQLベースのインスタンス/クラスターに適用されます。

    場合によっては、1台のマシンでMySQLの複数のインスタンスを実行したいことがあります。さまざまなユーザーに、自分で管理している自分のMySQLサーバーへのアクセスを許可したり、既存の本番環境のセットアップを妨げずに新しいMySQLリリースをテストしたりできます。

    インスタンスごとに異なるMySQLサーバーバイナリを使用することも、複数のインスタンスに同じバイナリを使用することもできます(または2つのアプローチの組み合わせ)。たとえば、MySQL5.6のサーバーとMySQL5.7のサーバーを実行して、さまざまなバージョンが特定のワークロードをどのように処理するかを確認できます。または、最新のMySQLバージョンの複数のインスタンスを実行し、それぞれが異なるデータベースのセットを管理する場合もあります。

    個別のサーバーバイナリを使用するかどうかに関係なく、実行する各インスタンスは、いくつかの操作パラメーターに対して一意の値で構成する必要があります。これにより、インスタンス間の競合の可能性が排除されます。 MySQL Sandboxを使用して、複数のMySQLインスタンスを作成できます。または、MySQLで利用可能なmysqld_multiを使用して、さまざまなTCP/IPポートおよびUNIXソケットで実行されている任意の数の個別のmysqldプロセスを開始または停止できます。

    このブログ投稿では、1つのホストで実行されている複数のMySQLインスタンスを監視するようにClusterControlを構成する方法を紹介します。

    ClusterControlの制限

    執筆時点では、ClusterControlは、クラスター/サーバーグループごとに1つのホスト上の複数のインスタンスの監視をサポートしていません。次のベストプラクティスを前提としています。

    • ホスト(物理サーバーまたは仮想マシン)ごとに1つのMySQLインスタンスのみ。
    • MySQLデータの冗長性はN+1サーバーで構成する必要があります。
    • すべてのMySQLインスタンスは、クラスター/サーバーグループ全体で統一された構成で実行されています。たとえば、リスニングポート、エラーログ、datadir、basedir、socketは同一です。

    上記の点に関して、ClusterControlは、クラスター/サーバーグループ内で次のことを前提としています。

    • MySQLインスタンスはクラスター全体で均一に構成されます。同じポート、同じ場所のログ、ベース/データディレクトリ、その他の重要な構成。
    • ホストごとに1つのMySQLインスタンスのみを監視、管理、およびデプロイします。
    • MySQLクライアントはホストにインストールされ、対応するOSユーザーの実行可能パスで使用可能である必要があります。
    • MySQLは、ClusterControlノードが到達可能なIPアドレスにバインドされています。
    • 各MySQLインスタンスのCPU/RAM/ディスク/ネットワークなどのホスト統計を個別に監視し続けます。ホストごとに複数のインスタンスがある環境では、同じホストを複数回監視するため、冗長なホスト統計を期待する必要があります。

    上記の仮定では、次のClusterControl機能は、複数のインスタンスを持つホストでは機能しません。

    バックアップ-PerconaXtrabackupは、ホストごとに複数のインスタンスをサポートせず、ClusterControlによって実行されるmysqldumpはデフォルトのソケットにのみ接続します。

    プロセス管理-ClusterControlは、標準の「pgrep -f mysqld_safe」を使用して、MySQLがそのホストで実行されているかどうかを確認します。複数のMySQLインスタンスがある場合、これは誤検知のアプローチです。そのため、ノード/クラスタの自動リカバリは機能しません。

    構成管理-ClusterControlは標準のMySQL構成ディレクトリをプロビジョニングします。通常、/etc/および/etc/mysqlの下にあります。

    回避策

    マシン上の複数のMySQLインスタンスを監視することは、簡単な回避策でClusterControlを使用して引き続き可能です。各MySQLインスタンスは、サーバーグループごとに単一のエンティティとして扱う必要があります。

    この例では、MySQL Sandboxで作成された単一のホスト上に3つのMySQLインスタンスがあります:

    ClusterControlは同じホスト上の複数のインスタンスを監視します

    次のコマンドを使用してMySQLインスタンスを作成しました:

    $ su - sandbox
    $ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

    デフォルトでは、MySQLSandboxは127.0.0.1をリッスンするmysqlインスタンスを作成します。使用可能なすべてのIPアドレスをリッスンするように、各ノードを適切に構成する必要があります。ホスト内のMySQLインスタンスの概要は次のとおりです。

    [[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json 
    {
    "node1":  
        {
            "host":     "master",
            "port":     "15024",
            "socket":   "/tmp/mysql_sandbox15024.sock",
            "username": "[email protected]%",
            "password": "msandbox"
        }
    ,
    "node2":  
        {
            "host":     "master",
            "port":     "15025",
            "socket":   "/tmp/mysql_sandbox15025.sock",
            "username": "[email protected]%",
            "password": "msandbox"
        }
    ,
    "node3":  
        {
            "host":     "master",
            "port":     "15026",
            "socket":   "/tmp/mysql_sandbox15026.sock",
            "username": "[email protected]%",
            "password": "msandbox"
        }
    }

    次のステップは、新しく作成されたインスタンスの構成を変更することです。それらのそれぞれについてmy.cnfに移動し、bind_address変数をハッシュします:

    [[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
    sandbox  13086     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
    sandbox  13805     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
    sandbox  14065     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
    [[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
    #bind_address = 127.0.0.1

    次に、マスターノードにmysqlをインストールし、restart_allスクリプトを使用してすべてのインスタンスを再起動します。

    [[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
    [[email protected] multi_msb_mysql-5_7_23]$ ./restart_all  
    # executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
    executing "stop" on node 1
    executing "stop" on node 2
    executing "stop" on node 3
    # executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
    executing "start" on node 1
    . sandbox server started
    executing "start" on node 2
    . sandbox server started
    executing "start" on node 3
    . sandbox server started

    ClusterControlから、インスタンスを機能させるために別のグループに分離する必要があるため、インスタンスごとに「インポート」を実行する必要があります。

    ClusterControlは既存のサーバーをインポートします

    node1の場合、ClusterControl>インポートに次の情報を入力します:

    ClusterControlは既存のサーバーをインポートします

    適切なポート(インスタンスごとに異なります)とホスト(すべてのインスタンスで同じ)を配置してください。

    トップメニューの[アクティビティ/ジョブ]アイコンをクリックすると、進行状況を監視できます。

    ClusterControlは既存のサーバーの詳細をインポートします

    ClusterControlがジョブを終了すると、UIにnode1が表示されます。同じ手順を繰り返して、ポート15025と15026を持つ別の2つのノードを追加します。追加すると、次のように表示されます。

    ClusterControlダッシュボード

    どうぞ。監視のために、既存のMySQLインスタンスをClusterControlに追加しました。ハッピーモニタリング!

    PS:ClusterControlの使用を開始するには、ここをクリックしてください!


    1. INNER JOIN状態で「OR」を使用するのは悪い考えですか?

    2. SQL Server(T-SQL)でテーブルのパーティション情報を取得する2つの方法

    3. VirtualBoxから仮想マシンを削除する方法

    4. varchar(8000)よりもvarchar(500)の方が有利ですか?