6.2 MySQL InnoDB クラスタ
6.2.2 本番 InnoDB クラスタ のデプロイ
本番環境で作業している場合、InnoDB クラスタ を構成する MySQL サーバーインスタンスは、セクション 6.5「AdminAPI MySQL サンドボックス」 で説明されているように、単一のマシンではなく、ネットワークの一 部として複数のホストマシンで実行されます。 これらの手順に進む前に、サーバーインスタンスとしてクラスタ に追加する各マシンに必要なソフトウェアをインストールする必要があります。コンポーネントのインストール を参照してください。
次の図は、このセクションで使用するシナリオを示しています:
本番 InnoDB クラスタ のデプロイ
図 6.2 本番デプロイメント
本番 InnoDB クラスタ のデプロイ
重要
すべてのインスタンスがローカルにデプロイされるサンドボックスデプロイメントとは 異なり、AdminAPI がローカルファイルアクセス権を持ち、構成の変更を永続化できる マシンでは、本番デプロイメントでインスタンスの構成の変更を永続化する必要があり ます。 これを行う方法は、インスタンスで実行されている MySQL のバージョンによっ て異なります。設定の永続化 を参照してください。
サーバー接続情報を AdminAPI に渡すには、URI のような接続文字列またはデータディクショナリを使用しま す。URI 類似文字列またはキーと値のペアを使用したサーバーへの接続 を参照してください。 このドキュメント では、URI のような文字列を示します。
このセクションでは、次のことを前提としています:
• インスタンスへ MySQL コンポーネントがインストールされている
• MySQL Shell がインストールされ、およびインスタンスを指定して接続できる
• 適切な管理ユーザーが作成されている
6.2.2.1 新しい本番 InnoDB クラスタ のデプロイ
次の各セクションでは、新しい本番 InnoDB クラスタ をデプロイする方法について説明します。
• 本番インスタンスの構成
• クラスタの作成
• クラスタへのインスタンスの追加
• InnoDB クラスタによって作成されたユーザーアカウント
• InnoDB クラスタ ポートの構成
本番インスタンスの構成
AdminAPI には、インスタンスが InnoDB クラスタ 使用のために適切に構成されているかどうかをチェック し、InnoDB クラスタ と互換性のない設定が見つかった場合にインスタンスを構成する dba.configureInstance() 関数が用意されています。 インスタンスに対して dba.configureInstance() コマンドを実行すると、インスタン スを InnoDB クラスタ の使用に使用できるようにするために必要なすべての設定がチェックされます。 イン スタンスで構成の変更が不要な場合は、インスタンスの構成を変更する必要はなく、dba.configureInstance() コマンド出力によって、インスタンスで InnoDB クラスタ を使用する準備ができていることが確認されます。
インスタンスを InnoDB クラスタ と互換性を持たせるために変更が必要な場合は、互換性のない設定のレポー トが表示され、コマンドでインスタンスオプションファイルを変更できます。 MySQL Shell のインスタンス への接続方法およびインスタンスで実行されている MySQL のバージョンに応じて、これらの変更をリモート インスタンスオプションファイルに永続化することで永続化できます。設定の永続化 を参照してください。
構成変更の永続化をサポートしていないインスタンスでは、インスタンスをローカルに構成する必要がありま す。dba.configureLocalInstance() でのインスタンスの構成 を参照してください。 または、インスタンスオプショ ンファイルを手動で変更することもできます。詳細は、オプションファイルの使用 を参照してください。 構成の 変更方法に関係なく、構成の変更が検出されるように、MySQL の再起動が必要になる場合があります。
dba.configureInstance() コマンドの構文は次のとおりです:
dba.configureInstance([instance][, options])
ここで、instance はインスタンス定義で、options は操作を構成するための追加オプションを含むデータディク ショナリです。 このコマンドは、操作結果に関する説明テキストメッセージを返します。
instance 定義はインスタンスの接続データです。URI 類似文字列またはキーと値のペアを使用したサーバーへの
接続 を参照してください。 ターゲットインスタンスがすでに InnoDB クラスタ に属している場合、エラーが生成 され、プロセスは失敗します。オプションディクショナリには次のものを含めることができます:
•
mycnfPath - インスタンスの MySQL オプションファイルのパス。
•
outputMycnfPath - インスタンスの MySQL オプションファイルを書き込む代替出力パス。
本番 InnoDB クラスタ のデプロイ
•
password - 接続で使用されるパスワード。
•
clusterAdmin - 作成する InnoDB クラスタ 管理者ユーザーの名前。 サポートされているフォーマットは、標準
の MySQL アカウント名フォーマットです。 ユーザー名およびホスト名の識別子または文字列をサポートしま す。 デフォルトでは、引用符で囲まれていない場合、入力は文字列であるとみなされます。 管理用のユーザー アカウントの作成を参照してください。
•
clusterAdminPassword - clusterAdmin を使用して作成される InnoDB クラスタ 管理者アカウントのパスワー
ド。 このオプションを使用して指定できますが、これは潜在的なセキュリティリスクです。 このオプションを 指定せずに clusterAdmin オプションを指定すると、対話型プロンプトでパスワードの入力を求められます。• 非推奨であり、将来のバージョンでの削除がスケジュールされています
clearReadOnly - super_read_only をオフに設定する必要があることを確認するために使用されるブール
値。スーパー読取り専用およびインスタンス を参照してください。•
interactive - ユーザーにプロンプトが表示されず、確認プロンプトが表示されないように、コマンド実行で対話
型ウィザードを無効にするために使用されるブール値。
•
restart - 操作を終了するためにターゲットインスタンスのリモート再起動を実行する必要があることを示すブー
ル値。
接続パスワードはインスタンス定義に含めることができますが、これはセキュアではないためお薦めしません。
MySQL Shell セクション4.4「プラガブルパスワードストア」 を使用して、インスタンスパスワードを安全に格納 します。
インスタンスに対して dba.configureInstance() が発行されると、このコマンドはインスタンス設定が InnoDB クラスタ の使用に適しているかどうかをチェックします。 InnoDB クラスタ で必要な設定を示すレポート が表示されます。 インスタンスの設定を変更する必要がない場合は、InnoDB クラスタ で使用でき、クラ スタの作成 に進むことができます。 インスタンス設定が InnoDB クラスタ の使用に対して有効でない場 合、dba.configureInstance() コマンドは変更が必要な設定を表示します。 インスタンスを構成する前に、次の情 報を含むテーブルに示されている変更を確認するよう求められます:
•
Variable - 無効な構成変数。
•
Current Value - 無効な構成変数の現在の値。
•
Required Value - 構成変数に必要な値。
続行方法は、インスタンスが永続化設定をサポートしているかどうかによって異なります。設定の永続化 を参 照してください。 MySQL Shell が現在実行されている MySQL インスタンス (つまり、ローカルインスタンス) に対して dba.configureInstance() を発行すると、インスタンスの自動構成が試行されます。 リモートインスタ ンスに対して dba.configureInstance() が発行されたときに、インスタンスが構成変更の永続化を自動的にサポー トしている場合は、これを選択できます。 リモートインスタンスが、InnoDB クラスタ で使用できるように構 成するための変更の永続化をサポートしていない場合は、インスタンスをローカルに構成する必要があります。
dba.configureLocalInstance() でのインスタンスの構成を参照してください。
一般に、dba.configureInstance() でオプションファイルを構成した後にインスタンスを再起動する必要はありま せんが、特定の設定によっては再起動が必要になる場合があります。 この情報は、dba.configureInstance() の発 行後に生成されるレポートに表示されます。 インスタンスが RESTART ステートメントをサポートしている場 合、MySQL Shell はインスタンスを停止してから起動できます。 これにより、インスタンスオプションファイル に加えられた変更が mysqld によって確実に検出されます。 詳細は、RESTART を参照してください。
注記
RESTART ステートメントを実行すると、インスタンスへの現在の接続が失われます。
自動再接続が有効な場合、サーバーの再起動後に接続が再確立されます。 それ以外の場 合は、接続を手動で再確立する必要があります。
dba.configureInstance() メソッドは、クラスタのメンバー間の接続に使用される適切なユーザーがクラスタの使用
に使用できることを検証します。管理用のユーザーアカウントの作成 を参照してください。クラスタを管理するユーザーを指定しない場合は、対話型モードでウィザードを使用して次のいずれかのオプ ションを選択できます:
• root ユーザーのリモート接続を有効にします。本番環境ではお薦めしません
• 新規ユーザーの作成
本番 InnoDB クラスタ のデプロイ
• ユーザーを手動で作成する必要がある自動構成はありません ヒント
インスタンスに super_read_only=ON がある場合は、AdminAPI で
super_read_only=OFF を設定できることを確認する必要がある場合があります。 詳し
くはスーパー読取り専用およびインスタンスをご覧ください。クラスタの作成
インスタンスを準備したら、MySQL Shell が接続されているインスタンスをクラスタのシードインスタンスとし て使用して、dba.createCluster() 関数を使用してクラスタを作成します。 シードインスタンスは、クラスタに追 加した他のインスタンスにレプリケートされ、シードインスタンスのレプリカになります。 この手順では、ic-1 インスタンスがシードとして使用されます。 dba.createCluster(name) MySQL Shell を発行すると、MySQL Shell の現在のグローバルセッションに接続されているサーバーインスタンスへの クラシック MySQL プロトコル セッ ションが作成されます。 たとえば、testCluster というクラスタを作成し、返されたクラスタを cluster という変 数に割り当てるには、次のようにします:
mysql-js> var cluster = dba.createCluster('testCluster') Validating instance at icadmin@ic-1:3306...
This instance reports its own address as ic-1 Instance configuration is suitable.
Creating InnoDB cluster 'testCluster' on 'icadmin@ic-1:3306'...
Adding Seed Instance...
Cluster successfully created. Use Cluster.addInstance() to add MySQL instances.
At least 3 instances are needed for the cluster to be able to withstand up to one server failure.
返されたクラスタを変数に割り当てるこのパターンを使用すると、Cluster オブジェクトメソッドを使用してクラ スタに対してさらに操作を実行できます。 返された Cluster オブジェクトは、MySQL Shell グローバルセッショ ンから独立した新しいセッションを使用します。 これにより、MySQL Shell グローバルセッションを変更した場 合、Cluster オブジェクトはインスタンスへのセッションを維持します。
クラスタを管理できるようにするには、必要な権限を持つ適切なユーザーがいることを確認する必要がありま す。 推奨される方法は、管理ユーザーを作成することです。 インスタンスの構成時に管理ユーザーを作成し なかった場合は、Cluster.setupAdminAccount() 操作を使用します。 たとえば、変数 cluster に割り当てられた InnoDB クラスタ を管理できる icadmin という名前のユーザーを作成するには、次のように発行します:
mysql-js> cluster.setupAdminAccount(icadmin)
クラスタ管理ユーザーの詳細は、AdminAPI のユーザーの構成 を参照してください。
dba.createCluster() 操作では、MySQL Shellinteractive オプションがサポートされます。 interactive がオンの場
合、プロンプトは次の状況で表示されます:• クラスタに属するインスタンスで実行され、adoptFromGr オプションが false の場合、既存のクラスタを採用 するかどうかを尋ねられます
•
force オプションが使用されていない (true に設定されていない) 場合、マルチプライマリクラスタの作成を確認
するよう求められます 注記
メタデータにアクセスできないというエラーが発生した場合は、ループバックネット ワークインタフェースが構成されている可能性があります。 InnoDB クラスタ を正しく 使用するには、ループバックインタフェースを無効にします。
クラスタが作成されたことを確認するには、クラスタインスタンスの status() 関数を使用します。
Cluster.status() によるクラスタステータスの確認を参照してください。
ヒント
サーバーインスタンスがクラスタに属したら、MySQL Shell および AdminAPI を使用し てのみ管理することが重要です。 クラスタに追加されたインスタンスでのグループレプ リケーションの構成の手動変更の試行はサポートされていません。 同様に、AdminAPI を使用してインスタンスを構成した後の、server_uuid などの InnoDB クラスタ に重要 なサーバー変数の変更はサポートされていません。