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


MySQL Shell 8.0  /  ...  /  InnoDB ReplicaSet のデプロイ

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

6.3.2 InnoDB ReplicaSet のデプロイ

InnoDB ReplicaSet は、InnoDB クラスタ と同様の方法でデプロイします。 まず、いくつかの MySQL サーバーインスタンスを構成します。最小インスタンスは 2 つです。セクション6.1「MySQL AdminAPI」 を参照してください。 一方はプライマリとして、このチュートリアル rs-1 では機能します。もう一方のインスタンスはセカンダリとして機能し、このチュートリアル rs-2 ではプライマリによって適用されるトランザクションをレプリケートします。 これは、非同期 MySQL レプリケーションから認識されるソースおよびレプリカと同等です。 次に、MySQL Shell を使用していずれかのインスタンスに接続し、ReplicaSet を作成します。 ReplicaSet を作成したら、それにインスタンスを追加できます。

InnoDB ReplicaSet はサンドボックスインスタンスと互換性があり、テスト目的などでローカルにデプロイするために使用できます。 手順については、サンドボックスインスタンスのデプロイを参照してください。 ただし、このチュートリアルでは、各インスタンスが異なるホストで実行されている本番 InnoDB ReplicaSet をデプロイすることを前提としています。

InnoDB ReplicaSet の前提条件

InnoDB ReplicaSet を使用するには、次の前提条件に注意する必要があります:

  • MySQL バージョン 8.0 以降を実行しているインスタンスのみがサポートされます

  • GTID ベースのレプリケーションのみがサポートされており、バイナリログファイルの位置レプリケーションは InnoDB ReplicaSet と互換性がありません

  • 行ベースのレプリケーション (RBR) のみがサポートされ、ステートメントベースのレプリケーション (SBR) はサポートされていません

  • レプリケーションフィルタはサポートされていません

  • 管理対象外レプリケーションチャネルはどのインスタンスでも許可されていません

  • ReplicaSet は最大 1 つのプライマリインスタンスで構成され、1 つまたは複数のセカンダリがサポートされます。 ReplicaSet に追加できるセカンダリ数に制限はありませんが、ReplicaSet に接続されている各 MySQL Router は各インスタンスを監視する必要があります。 したがって、ReplicaSet に追加されるインスタンスが多いほど、より多くの監視を行う必要があります。

  • ReplicaSet は、MySQL Shell によって完全に管理される必要があります。 たとえば、レプリケーションアカウントは MySQL Shell によって作成および管理されます。 たとえば、SQL ステートメントを直接使用してプライマリを変更するなど、MySQL Shell 外部のインスタンスに対する構成変更はサポートされていません。 InnoDB ReplicaSet を使用する場合は、常に MySQL Shell を使用してください。

AdminAPI および InnoDB ReplicaSet を使用すると、基礎となる概念を深く理解しなくても、MySQL レプリケーションを使用できます。 ただし、背景情報については、レプリケーション を参照してください。

InnoDB ReplicaSet インスタンスの構成

dba.configureReplicaSetInstance(instance) を使用して、レプリカセットで使用する各インスタンスを構成します。MySQL Shell は、インスタンスに接続して構成するか、instance を渡して特定のリモートインスタンスを構成できます。 ReplicaSet でインスタンスを使用するには、永続化設定をサポートする必要があります。 設定の永続化を参照してください。

管理タスクのためにインスタンスに接続する場合、適切な権限を持つユーザーが必要です。 ReplicaSet を管理するユーザーを作成するには、setupAdminAccount() 操作を使用することをお薦めします。 管理用のユーザーアカウントの作成を参照してください。 または、clusterAdmin オプションが指定されている場合は、dba.configureReplicaSetInstance() 操作で管理者アカウントをオプションで作成できます。 アカウントは、InnoDB ReplicaSet の管理に必要な正しい権限セットで作成されます。

ヒント

管理者アカウントは、同じクラスタまたはレプリカセットのすべてのインスタンスで同じユーザー名とパスワードを持つ必要があります。

rsadmin という名前のクラスタ管理者で、rs-1:3306 でインスタンスを構成するには、次のコマンドを発行します:

mysql-js> dba.configureReplicaSetInstance('root@rs-1:3306', {clusterAdmin: "'rsadmin'@'rs-1%'"});

対話型プロンプトは、指定されたユーザーに必要なパスワードを要求します。 MySQL Shell が現在接続されているインスタンスを構成するには、null のインスタンス定義を指定できます。 たとえば、次のコマンドを発行します:

mysql-js> dba.configureReplicaSetInstance('', {clusterAdmin: "'rsadmin'@'rs-1%'"});

対話型プロンプトは、指定されたユーザーに必要なパスワードを要求します。 これにより、MySQL Shell が現在接続されているインスタンスが InnoDB ReplicaSet での使用に有効かどうかがチェックされます。 可能であれば、InnoDB ReplicaSet と互換性のない設定が構成されます。 クラスタ管理者アカウントは、InnoDB ReplicaSet に必要な権限で作成されます。

InnoDB ReplicaSet の作成

インスタンスを構成したら、InnoDB クラスタ で使用される MySQL Group Replication ではなく、インスタンスに接続し、dba.createReplicaSet() を使用して MySQL 非同期レプリケーションを使用する管理対象 ReplicaSet を作成します。 MySQL Shell が現在接続されている MySQL インスタンスは、ReplicaSet の初期プライマリとして使用されます。

dba.createReplicaSet() 操作では、インスタンスの状態および構成が管理対象 ReplicaSet と互換性があることを確認するために複数のチェックが実行され、互換性がある場合はインスタンスでメタデータスキーマが初期化されます。 操作をチェックするが、実際にはインスタンスを変更しない場合は、dryRun オプションを使用します。 これにより、MySQL Shell が ReplicaSet を作成するために実行するアクションがチェックされ、表示されます。 ReplicaSet が正常に作成されると、ReplicaSet オブジェクトが返されます。 したがって、返された ReplicaSet を変数に割り当てることをお薦めします。 これにより、ReplicaSet.status() 操作をコールするなどして、ReplicaSet を操作できます。 インスタンス rs-1example という名前の ReplicaSet を作成し、rs 変数に割り当てるには、次のように発行します:

mysql-js> \connect root@rs-1:3306
...
mysql-js> var rs = dba.createReplicaSet("example")
A new replicaset with instance 'rs-1:3306' will be created.

* Checking MySQL instance at rs-1:3306

This instance reports its own address as rs-1:3306
rs-1:3306: Instance configuration is suitable.

* Updating metadata...

ReplicaSet object successfully created for rs-1:3306.
Use rs.add_instance() to add more asynchronously replicated instances to this replicaset
and rs.status() to check its status.

操作が成功したことを確認するには、返された ReplicaSet オブジェクトを操作します。 たとえば、ReplicaSet に関する情報を表示する ReplicaSet.status() 操作を提供します。 返された ReplicaSet はすでに変数 rs に割り当てられているため、次のコマンドを発行します:

mysql-js> rs.status()
{
    "replicaSet": {
        "name": "example",
        "primary": "rs-1:3306",
        "status": "AVAILABLE",
        "statusText": "All instances available.",
        "topology": {
            "rs-1:3306": {
                "address": "rs-1:3306",
                "instanceRole": "PRIMARY",
                "mode": "R/W",
                "status": "ONLINE"
            }
        },
        "type": "ASYNC"
    }
}

この出力は、example という名前の ReplicaSet が作成され、プライマリが rs-1 であることを示しています。 現在、インスタンスは 1 つのみで、次のタスクは ReplicaSet にインスタンスを追加することです。