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の使用を開始するには、ここをクリックしてください!