

# 既存の DB インスタンスをアクティブ/アクティブクラスターに変換する
<a name="mysql-active-active-clusters-converting"></a>

アクティブ/アクティブクラスターに移行する DB インスタンスの DB エンジンバージョンは、次のいずれかである必要があります。
+ すべての MySQL 8.4 バージョン
+ MySQL 8.0.35 以降のマイナーバージョン

エンジンバージョンをアップグレードする必要がある場合は、「[RDS for MySQL DB エンジンのアップグレード](USER_UpgradeDBInstance.MySQL.md)」を参照してください。

複数の VPC に DB インスタンスを持つアクティブ/アクティブクラスターを設定する場合は、「[クロス VPC アクティブ/アクティブクラスターの準備](mysql-active-active-clusters-cross-vpc-prerequisites.md)」の前提条件を満たしていることを確認してください。

既存の DB インスタンスを RDS for MySQL のアクティブ/アクティブクラスターに移行するには、以下のステップを実行します。

**Topics**
+ [ステップ 1: 1 つ以上のカスタムパラメータグループでアクティブ/アクティブクラスターパラメータを設定する](#mysql-active-active-clusters-converting-parameter-group)
+ [ステップ 2: 必要なグループレプリケーションパラメータが設定されている DB パラメータグループに DB インスタンスを関連付ける](#mysql-active-active-clusters-converting-associate-parameter-group)
+ [ステップ 3: アクティブ/アクティブクラスターを作成する](#mysql-active-active-clusters-converting-associate-parameter-groups)
+ [ステップ 4: アクティブ/アクティブクラスター用の追加の RDS for MySQL DB インスタンスを作成する](#mysql-active-active-clusters-converting-add-db-instances)
+ [ステップ 5: 変換する DB インスタンスでグループを初期化する](#mysql-active-active-clusters-converting-start-replication-first)
+ [ステップ 6: アクティブ/アクティブクラスター内の他の DB インスタンスでレプリケーションを開始する](#mysql-active-active-clusters-converting-start-replication-other)
+ [ステップ 7: (推奨) アクティブ/アクティブクラスターのステータスを確認する](#mysql-active-active-clusters-converting-view)

## ステップ 1: 1 つ以上のカスタムパラメータグループでアクティブ/アクティブクラスターパラメータを設定する
<a name="mysql-active-active-clusters-converting-parameter-group"></a>

アクティブ/アクティブクラスターの RDS for MySQL DB インスタンスは、必須パラメータに正しい設定を持つカスタムパラメータグループに関連付けられている必要があります。パラメータとそれぞれの必須パラメータの詳細については、「[アクティブ/アクティブクラスターに必要なパラメータ設定](mysql-active-active-clusters-parameters.md)」を参照してください。

これらのパラメータは、新しいパラメータグループまたは既存のパラメータグループで設定できます。ただし、アクティブ/アクティブクラスターに含まれていない DB インスタンスに誤って影響しないように、新しいカスタムパラメータグループを作成することを強くお勧めします。アクティブ/アクティブクラスター内の DB インスタンスは、同じ DB パラメータグループまたは異なる DB パラメータグループに関連付けることができます。

AWS マネジメントコンソール または AWS CLI を使用して、新しいカスタムパラメータグループを作成できます。詳細については、「[Amazon RDS での DB パラメータグループの作成](USER_WorkingWithParamGroups.Creating.md)」を参照してください。次の例では、[create-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-parameter-group.html) AWS CLI コマンドを実行して、RDS for MySQL 8.0 で `myactivepg` という名前のカスタム DB パラメータグループを作成します。

Linux、macOS、Unix の場合:

```
aws rds create-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --db-parameter-group-family mysql8.0 \
  --description "Parameter group for active-active clusters"
```

Windows の場合:

```
aws rds create-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --db-parameter-group-family mysql8.0 ^
  --description "Parameter group for active-active clusters"
```

AWS マネジメントコンソール または AWS CLI を使用して、カスタムパラメータグループのパラメータを設定することもできます。詳細については、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。

次の例では、[modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI コマンドを実行して、RDS for MySQL 8.0 でパラメータを設定します。RDS for MySQL 8.4 でこの例を使用するには、`slave_preserve_commit_order` を `replica_preserve_commit_order` に変更します。

Linux、macOS、Unix の場合:

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" \
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" \
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

Windows の場合:

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" ^
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" ^
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

## ステップ 2: 必要なグループレプリケーションパラメータが設定されている DB パラメータグループに DB インスタンスを関連付ける
<a name="mysql-active-active-clusters-converting-associate-parameter-group"></a>

前のステップで作成または変更したパラメータグループに DB インスタンスを関連付けます。手順については、「[Amazon RDS で DB パラメータグループを DB インスタンスに関連付ける](USER_WorkingWithParamGroups.Associating.md)」を参照してください。

DB インスタンスを再起動して、新しいパラメータ設定を有効にします。手順については、「[ DB インスタンスの再起動](USER_RebootInstance.md)」を参照してください。

## ステップ 3: アクティブ/アクティブクラスターを作成する
<a name="mysql-active-active-clusters-converting-associate-parameter-groups"></a>

DB インスタンスに関連付けられている DB パラメータグループで、`group_replication_group_seeds` パラメータを、変換する DB インスタンスのエンドポイントに設定します。

AWS マネジメントコンソール または AWS CLI を使用して、パラメータを設定できます。このパラメータを設定した後に DB インスタンスを再起動する必要はありません。パラメータの設定の詳細については、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。

次の例では、[modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI コマンドを実行して、パラメータを設定します。

Linux、macOS、Unix の場合:

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

Windows の場合:

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

## ステップ 4: アクティブ/アクティブクラスター用の追加の RDS for MySQL DB インスタンスを作成する
<a name="mysql-active-active-clusters-converting-add-db-instances"></a>

アクティブ/アクティブクラスター用の追加の DB インスタンスを作成するには、変換する DB インスタンスでポイントインタイムリカバリを実行します。手順については、「[ポイントインタイムリカバリを使用してアクティブ/アクティブクラスターに DB インスタンスを追加する](mysql-active-active-clusters-adding.md#mysql-active-active-clusters-adding-pitr)」を参照してください。

アクティブ/アクティブクラスターには、最大 9 つの DB インスタンスを含めることができます。クラスターに必要な DB インスタンスの数に達するまで、DB インスタンスでポイントインタイムリカバリを実行します。ポイントインリカバリを実行するときは、追加する DB インスタンスを、`rds.group_replication_enabled` が `1` に設定されている DB パラメータグループに関連付ける必要があります。そうしないと、新しく追加された DB インスタンスでグループレプリケーションが開始されません。

## ステップ 5: 変換する DB インスタンスでグループを初期化する
<a name="mysql-active-active-clusters-converting-start-replication-first"></a>

グループを初期化し、レプリケーションを開始します。

1. SQL クライアントで変換する DB インスタンスに接続します。RDS for Oracle DB インスタンスへの接続の詳細については、「[MySQL DB インスタンスへの接続](USER_ConnectToInstance.md)」を参照してください。

1. SQL クライアントで、次のストアドプロシージャを実行し、*group\$1replication\$1user\$1password* を `rdsgrprepladmin` ユーザーのパスワードに置き換えます。`rdsgrprepladmin` ユーザーは、アクティブ/アクティブクラスターのグループレプリケーション接続用に予約されています。このユーザーのパスワードは、アクティブ/アクティブクラスター内のすべての DB インスタンスで同じである必要があります。

   ```
   call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
   call mysql.rds_group_replication_create_user('group_replication_user_password');
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   call mysql.rds_group_replication_start(1);
   ```

   この例では、`binlog retention hours` 値を `168` に設定します。つまり、バイナリログファイルは DB インスタンスで 7 日間保持されます。この値は、要件に合わせて調整できます。

   この例では、`mysql.rds_group_replication_start` ストアドプロシージャで `1` を指定し、現在の DB インスタンスで新しいグループを初期化します。

   この例で呼び出されるストアドプロシージャの詳細については、「[アクティブ/アクティブクラスターの管理](mysql-stored-proc-active-active-clusters.md)」を参照してください。

## ステップ 6: アクティブ/アクティブクラスター内の他の DB インスタンスでレプリケーションを開始する
<a name="mysql-active-active-clusters-converting-start-replication-other"></a>

アクティブ/アクティブクラスター内の各 DB インスタンスについて、SQL クライアントを使用してインスタンスに接続し、次のストアドプロシージャを実行します。*group\$1replication\$1user\$1password* を `rdsgrprepladmin` ユーザーのパスワードに置き換えます。

```
call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
call mysql.rds_group_replication_create_user('group_replication_user_password');
call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
call mysql.rds_group_replication_start(0);
```

この例では、`binlog retention hours` 値を `168` に設定します。つまり、バイナリログファイルは DB インスタンスで 7 日間保持されます。この値は、要件に合わせて調整できます。

この例では、`mysql.rds_group_replication_start` ストアドプロシージャで `0` を指定して、現在の DB インスタンスを既存のグループに結合します。

**ヒント**  
これらのストアドプロシージャは、アクティブ/アクティブクラスター内の他のすべての DB インスタンスで実行してください。

## ステップ 7: (推奨) アクティブ/アクティブクラスターのステータスを確認する
<a name="mysql-active-active-clusters-converting-view"></a>

クラスターの各メンバーが正しく設定されていることを確認するには、アクティブ/アクティブクラスター内の DB インスタンスに接続し、次の SQL コマンドを実行して、クラスターのステータスを確認します。

```
SELECT * FROM performance_schema.replication_group_members;
```

出力には、次のサンプル出力のように、各 DB インスタンスの `MEMBER_STATE` の `ONLINE` が表示されます。

```
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83  |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
```

可能な `MEMBER_STATE` 値の詳細については、MySQL ドキュメントの「[グループレプリケーションサーバーの状態](https://dev.mysql.com/doc/refman/8.0/en/group-replication-server-states.html)」を参照してください。