Documentation Home
MySQL Shell 8.0
Download this Manual
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


MySQL Shell 8.0  /  ...  /  MySQL Router のブートストラップ

このページは機械翻訳したものです。

6.4.1 MySQL Router のブートストラップ

InnoDB ReplicaSet または InnoDB クラスタ に対して MySQL Router をブートストラップして、ルーティングを自動的に構成します。 ブートストラッププロセスは、MySQL Router を実行する特定の方法で、通常のルーティングは開始されず、かわりにメタデータに基づいて mysqlrouter.conf ファイルが構成されます。 コマンドラインで MySQL Router を強化するには、mysqlrouter コマンドの起動時に --bootstrap オプションを渡し、メタデータからトポロジ情報を取得して、サーバーインスタンスへのルーティング接続を構成します。 または、Windows では、MySQL Installer を使用して MySQL Router をブートストラップします。MySQL Installer での MySQL Router の構成 を参照してください。 MySQL Router がブートストラップされると、クライアントアプリケーションはパブリッシュするポートに接続します。MySQL Router は、着信ポートに基づいてクライアント接続をインスタンスに自動的にリダイレクトします。たとえば、6646 は、クラシック MySQL プロトコル を使用した読取り/書込み接続にデフォルトで使用されます。 たとえば、インスタンスに予期しない障害が発生したためにトポロジが変更された場合、MySQL Router はその変更を検出し、ルーティングを残りのインスタンスに自動的に調整します。 これにより、クライアントアプリケーションでフェイルオーバーを処理したり、基礎となるトポロジに注意する必要がなくなります。 詳細は、Routing for MySQL InnoDB Clusterを参照してください。

注記

サーバーインスタンスにリダイレクトするように MySQL Router を手動で構成しないでください。 これにより、MySQL Router はメタデータから構成を取得できるため、常に --bootstrap オプションを使用してください。 Cluster Metadata and Stateを参照してください。

MySQL Router ユーザーの構成

MySQL Router が InnoDB クラスタ または InnoDB ReplicaSet に接続する場合、適切な権限を持つユーザーアカウントが必要です。 MySQL Router バージョン 8.0.19 からは、この内部ユーザーは --account オプションを使用して指定できます。 以前のバージョンでは、MySQL Router はクラスタのブートストラップごとに内部アカウントを作成したため、時間の経過とともに多数のアカウントが構築される可能性がありました。 MySQL Shell バージョン 8.0.20 から、AdminAPI を使用して MySQL Router に必要なユーザーアカウントを設定できます。 setupRouterAccount(user, [options]) 操作を使用して、MySQL ユーザーアカウントを作成するか、既存のアカウントをアップグレードし、MySQL Router で InnoDB クラスタ または InnoDB ReplicaSet の操作に使用できるようにします。 これは、InnoDB クラスタ および InnoDB ReplicaSet で MySQL Router を構成するための推奨方法です。

変数 testCluster によって参照される InnoDB クラスタ に myRouter1 という名前の新しい MySQL Router アカウントを追加するには、次のコマンドを発行します:

mysqlsh> testCluster.setupRouterAccount(myRouter1)

この場合、ドメインは指定されないため、アカウントはワイルドカード (%) 文字を使用して作成されるため、作成されたユーザーはどのドメインからでも接続できます。 example.com ドメインからのみ接続できるようにアカウントを制限するには、次のコマンドを発行します:

mysqlsh> testCluster.setupRouterAccount(myRouter1@example.com)

この操作では、パスワードの入力を求められ、適切な権限を持つ MySQL Router ユーザーが設定されます。 InnoDB クラスタ または InnoDB ReplicaSet に複数のインスタンスがある場合、作成された MySQL Router ユーザーはすべてのインスタンスに伝播されます。

MySQL Router ユーザーがすでに構成されている場合 (たとえば、8.0.20 より前のバージョンを使用していた場合)、setupRouterAccount() 操作を使用して既存のユーザーを再構成できます。 この場合は、true に設定された update オプションを渡します。 たとえば、myOldRouter ユーザーを再構成するには、次のように発行します:

mysqlsh> testCluster.setupRouterAccount(myOldRouter, {'update':1})

MySQL Router のデプロイ

MySQL Router の推奨デプロイメントは、アプリケーションと同じホスト上にあります。 サンドボックスデプロイメントを使用する場合、すべてが単一のホストで実行されるため、MySQL Router を同じホストにデプロイします。 本番デプロイメントを使用する場合は、クライアントアプリケーションのホストに使用する各マシンに MySQL Router インスタンスをデプロイすることをお薦めします。 アプリケーションインスタンスが接続する共通マシンに MySQL Router をデプロイすることもできます。 詳細は、Installing MySQL Routerを参照してください。

InnoDB クラスタ または InnoDB ReplicaSet に基づいて MySQL Router をブートストラップするには、オンラインインスタンスへの URI のような接続文字列が必要です。 mysqlrouter コマンドを実行し、--bootstrap=instance オプションを指定します。ここで、instance はオンラインインスタンスへの URI のような接続文字列です。MySQL Router はインスタンスに接続し、含まれているメタデータキャッシュプラグインを使用して、サーバーインスタンスアドレスとそのロールのリストで構成されるメタデータを取得します。 例:

shell> mysqlrouter --bootstrap icadmin@ic-1:3306 --user=mysqlrouter

MySQL Router で使用するインスタンスパスワードおよび暗号化キーの入力を求められます。 この暗号化キーは、MySQL Router がクラスタへの接続に使用するインスタンスパスワードを暗号化するために使用されます。 クライアント接続に使用できるポートも表示されます。 ブートストラップ関連のその他のオプションは、Bootstrapping Options を参照してください。

ヒント

この時点で、MySQL Router は接続をルーティングするために起動されていません。 ブートストラップは別のプロセスです。

MySQL Router ブートストラッププロセスでは、前述の icadmin@ic-1:3306 の例で、--bootstrap オプションに渡されたアドレスから取得されたメタデータに基づいて設定された mysqlrouter.conf ファイルが作成されます。 MySQL Router では、取得されたメタデータに基づいて、metadata_cache セクションを含む mysqlrouter.conf ファイルが自動的に構成されます。 MySQL Router 8.0.14 以降を使用している場合、--bootstrap オプションは、dynamic_state によって構成されたパスでアクティブな MySQL メタデータサーバーアドレスを追跡および格納するように MySQL Router を自動的に構成します。 これにより、MySQL Router の再起動時に、どの MySQL メタデータサーバーアドレスが最新であるかが確実に認識されます。 詳細は、dynamic_state のドキュメントを参照してください。

以前の MySQL Router バージョンでは、メタデータサーバー情報は MySQL Router の初期ブートストラップ操作中に定義され、クラスタ内のすべてのサーバーインスタンスのアドレスを含む bootstrap_server_addresses として構成ファイルに静的に格納されていました。 例:

[metadata_cache:prodCluster]
router_id=1
bootstrap_server_addresses=mysql://icadmin@ic-1:3306,mysql://icadmin@ic-2:3306,mysql://icadmin@ic-3:3306
user=mysql_router1_jy95yozko3k2
metadata_cluster=prodCluster
ttl=300
ヒント

MySQL Router 8.0.13 以前を使用している場合、MySQL Router のブートストラップ後に別のサーバーインスタンスを追加してクラスタのトポロジを変更するときは、更新されたメタデータに基づいて bootstrap_server_addresses を更新する必要があります。 --bootstrap オプションを使用して MySQL Router を再起動するか、mysqlrouter.conf ファイルの bootstrap_server_addresses セクションを手動で編集して MySQL Router を再起動します。

生成された MySQL Router 構成により、クラスタへの接続に使用する TCP ポートが作成されます。 デフォルトでは、クラシック MySQL プロトコル と X プロトコル の両方を使用してクラスタと通信するためのポートが作成されます。 X プロトコル を使用するには、サーバーインスタンスに X プラグイン がインストールおよび構成されている必要があります。これは、MySQL 8.0 以降のデフォルトです。 デフォルトで使用可能な TCP ポートは次のとおりです:

  • 6446 - MySQL Router が受信接続をプライマリサーバーインスタンスにリダイレクトする クラシック MySQL プロトコル 読取り/書込みセッションの場合。

  • 6447 - MySQL Router が受信接続をセカンダリサーバーインスタンスのいずれかにリダイレクトする クラシック MySQL プロトコル 読取り専用セッションの場合。

  • 64460 - MySQL Router が受信接続をプライマリサーバーインスタンスにリダイレクトする X プロトコル 読取り/書込みセッションの場合。

  • 64470 - MySQL Router が受信接続をセカンダリサーバーインスタンスのいずれかにリダイレクトする X プロトコル 読取り専用セッションの場合。

MySQL Router の構成によっては、ポート番号が前述のものと異なる場合があります。 たとえば、--conf-base-port オプションまたは group_replication_single_primary_mode 変数を使用する場合です。 MySQL Router を起動すると、正確なポートがリストされます。

着信接続のリダイレクト方法は、使用されている基礎となるトポロジによって異なります。 たとえば、単一プライマリクラスタを使用している場合、MySQL Router はデフォルトで X プロトコル および クラシック MySQL プロトコル ポートを公開します。これらのポートは、クライアントが読取り/書込みセッションのために接続し、クラスタの単一プライマリにリダイレクトされます。 マルチプライマリクラスタでは、読取り/書込みセッションはラウンドロビン方式でプライマリインスタンスのいずれかにリダイレクトされます。 たとえば、ポート 6446 への最初の接続は ic-1 インスタンスにリダイレクトされ、ポート 6446 への次の接続は ic-2 インスタンスにリダイレクトされます。 受信読取り専用接続の場合、MySQL Router は接続をセカンダリインスタンスのいずれかにラウンドロビン方式でリダイレクトします。 この動作を変更するには、routing_strategy オプションを参照してください。

ブートストラップして構成したら、MySQL Router を起動します。 --bootstrap オプションを指定してシステム全体のインストールを使用した場合は、次のコマンドを発行します:

shell> mysqlrouter &

--directory オプションを使用して MySQL Router をディレクトリにインストールした場合は、インストール先のディレクトリにある start.sh スクリプトを使用します。 または、システムのブート時に MySQL Router を自動的に起動するようにサービスを設定します。Starting MySQL Router を参照してください。 前述のように、MySQL Shell などの MySQL クライアントをいずれかの着信 MySQL Router ポートに接続し、クライアントがいずれかのサーバーインスタンスに透過的に接続される方法を確認できるようになりました。

shell> mysqlsh --uri root@localhost:6442

実際に接続しているインスタンスを確認するには、port ステータス変数に対して SQL クエリーを発行します。

mysql-js> \sql
Switching to SQL mode... Commands end with ;
mysql-sql> select @@port;
+--------+
| @@port |
+--------+
|   3310 |
+--------+

MySQL Router での ReplicaSets の使用

MySQL Router 8.0.19 以降を使用して InnoDB ReplicaSet に対してブートストラップできます。セクション6.4「MySQL Router」 を参照してください。 生成される MySQL Router 構成ファイルの唯一の違いは、cluster_type オプションの追加です。 MySQL Router が ReplicaSet に対してブートストラップされると、生成される構成ファイルには次のものが含まれます:

cluster_type=rs

MySQL Router を InnoDB ReplicaSet とともに使用する場合は、次の点に注意してください:

  • MySQL Router の読取り/書込みポートは、クライアント接続を ReplicaSet のプライマリインスタンスに転送

  • ReplicaSet のセカンダリインスタンスへの MySQL Router ダイレクトクライアント接続の読取り専用ポート (ただし、プライマリに転送することもできます)

  • MySQL Router は、プライマリインスタンスから ReplicaSet トポロジに関する情報を取得

  • プライマリインスタンスが使用できなくなり、別のインスタンスがに昇格されると、MySQL Router は自動的にリカバリ

InnoDB クラスタ とまったく同じ方法で、ReplicaSet に対してブートストラップされた MySQL Router インスタンスを操作します。 ReplicaSet.listRouters() および ReplicaSet.removeRouterMetadata() の詳細は、クラスタルーターの操作 を参照してください。