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


MySQL Shell 8.0  /  ...  /  AdminAPI および MySQL Router の使用

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

6.4.2 AdminAPI および MySQL Router の使用

このセクションでは、MySQL Router および AdminAPI の使用方法について説明します。

InnoDB クラスタ の高可用性のテスト

InnoDB クラスタ の高可用性が機能するかどうかをテストするには、インスタンスを強制終了して予期しない停止をシミュレートします。 クラスタは、インスタンスがクラスタを離れたことを検出し、それ自体を再構成します。 クラスタ自体の再構成方法は、単一プライマリクラスタとマルチプライマリクラスタのどちらを使用しているか、およびインスタンスがクラスタ内で機能するロールによって正確に異なります。

シングルプライマリモードの場合:

  • 現在のプライマリがクラスタから離れると、セカンダリインスタンスのいずれかが新しいプライマリとして選択され、インスタンスの優先順位は最も低い server_uuid になります。MySQL Router は、新しく選択されたプライマリに読取り/書込み接続をリダイレクトします。

  • 現在のセカンダリがクラスタから離れると、MySQL Router はインスタンスへの読取り専用接続のリダイレクトを停止します。

詳細は、シングルプライマリモード を参照してください。

マルチプライマリモードの場合:

  • 現在の「R/W」インスタンスがクラスタから離れると、MySQL Router は読取り/書込み接続を他のプライマリにリダイレクトします。 残りのインスタンスがクラスタ内の最後のプライマリであった場合、クラスタは完全に失われ、MySQL Router ポートに接続できません。

詳細は、マルチプライマリモード を参照してください。

クラスタから離れるインスタンスをシミュレートするには様々な方法があります。たとえば、インスタンス上の MySQL サーバーを強制的に停止したり、サンドボックスのデプロイメントをテストする場合は AdminAPI dba.killSandboxInstance() を使用できます。 この例では、3 つのサーバーインスタンスを持つ単一プライマリサンドボックスクラスタデプロイメントがあり、ポート 3310 でリスニングしているインスタンスが現在のプライマリであると想定しています。 予期せずにクラスタから離れるインスタンスをシミュレートします:

mysql-js> dba.killSandboxInstance(3310)

クラスタは変更を検出し、新しいプライマリを自動的に選択します。 セッションがデフォルトの読取り/書込み クラシック MySQL プロトコル ポートであるポート 6446 に接続されている場合、MySQL Router はクラスタトポロジへの変更を検出し、新しく選択されたプライマリにセッションをリダイレクトする必要があります。 これを確認するには、\sql コマンドを使用して MySQL Shell で SQL モードに切り替え、インスタンスの port 変数を選択して、セッションがリダイレクトされたインスタンスを確認します。 元のプライマリへの接続が失われたため、最初の SELECT ステートメントが失敗することに注意してください。 これは、現在のセッションがクローズされたことを意味し、MySQL Shell は自動的に再接続し、コマンドを再発行すると新しいポートが確認されます。

mysql-js> \sql
Switching to SQL mode... Commands end with ;
mysql-sql> SELECT @@port;
ERROR: 2013 (HY000): Lost connection to MySQL server during query
The global session got disconnected.
Attempting to reconnect to 'root@localhost:6446'...
The global session was successfully reconnected.
mysql-sql> SELECT @@port;
+--------+
| @@port |
+--------+
|   3330 |
+--------+
1 row in set (0.00 sec)

この例では、ポート 3330 のインスタンスが新しいプライマリとして選択されています。 これは、InnoDB クラスタ が自動フェイルオーバーを提供し、MySQL Router が新しいプライマリインスタンスに自動的に再接続し、高可用性を備えていることを示しています。

クラスタルーターの操作

クラスタまたは ReplicaSet に対して MySQL Router の複数のインスタンスをブートストラップできます。 バージョン 8.0.19 から、登録されているすべての MySQL Router インスタンスのリストを表示するには、次のコマンドを発行します:

Cluster.listRouters()

結果には、メタデータ内の名前、ホスト名、ポートなど、登録されている各 MySQL Router インスタンスに関する情報が表示されます。 たとえば、次のように発行します:

mysql-js> Cluster.listRouters()
{
    "clusterName": "example",
    "routers": {
        "ic-1:3306": {
            "hostname": "ic-1:3306",
            "lastCheckIn": "2020-01-16 11:43:45",
            "roPort": 6447,
            "roXPort": 64470,
            "rwPort": 6446,
            "rwXPort": 64460,
            "version": "8.0.19"
        }
    }
}

返される情報は次のとおりです:

  • MySQL Router インスタンスの名前。

  • メタデータに格納されている MySQL Router から定期 ping によって生成される最終チェックインタイムスタンプ

  • MySQL Router インスタンスが実行されているホスト名

  • MySQL Router が クラシック MySQL プロトコル 接続用に公開する読取り専用および読取り/書込みポート

  • MySQL Router が X プロトコル 接続用に公開する読取り専用および読取り/書込みポート

  • この MySQL Router インスタンスのバージョン。 version を返すためのサポートが 8.0.19 で追加されました。 この操作を以前のバージョンの MySQL Router に対して実行する場合、バージョンフィールドは null です。

また、Cluster.listRouters() 操作では、MySQL Shell でサポートされているメタデータバージョンをサポートしていないインスタンスのリストを表示できます。 たとえば、Cluster.listRouters({'onlyUpgradeRequired':'true'}) を発行して、onlyUpgradeRequired オプションを使用します。 返されるリストには、メタデータのアップグレードが必要な Cluster に登録された MySQL Router インスタンスのみが表示されます。 セクション6.2.8.2「InnoDB クラスタ メタデータのアップグレード」を参照してください。

MySQL Router インスタンスはメタデータから自動的に削除されないため、たとえば、より多くのインスタンスをブートストラップすると、InnoDB クラスタ メタデータには、増加するインスタンスへの参照数が含まれます。 登録された MySQL Router インスタンスをクラスタメタデータから削除するには、バージョン 8.0.19 で追加された Cluster.removeRouterMetadata(router) 操作を使用します。 Cluster.listRouters() 操作を使用して、削除する MySQL Router インスタンスの名前を取得し、router として渡します。 たとえば、クラスタに登録された MySQL Router インスタンスが次のようになっているとします:

mysql-js> Cluster.listRouters(){

    "clusterName": "testCluster",
    "routers": {
        "myRouter1": {
            "hostname": "example1.com",
            "lastCheckIn": null,
            "routerId": "1",
            "roPort": "6447",
            "rwPort": "6446"
            "version": null
        },
        "myRouter2": {
            "hostname": "example2.com",
            "lastCheckIn": "2019-11-27 16:25:00",
            "routerId": "3",
            "roPort": "6447",
            "rwPort": "6446"
            "version": "8.0.19"
        }
    }
}

myRouter1 という名前のインスタンスに lastCheckIn および version 用の null があるという事実に基づいて、次のコマンドを発行してメタデータからこの古いインスタンスを削除することにしました:

mysql-js> cluster.removeRouterMetadata('myRouter1')

指定した MySQL Router インスタンスは、InnoDB クラスタ メタデータから削除することでクラスタから登録解除されます。