

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用新的資料庫執行個體設定主動-主動叢集
<a name="mysql-active-active-clusters-setting-up"></a>

完成下列步驟，使用新的 Amazon RDS for MySQL 資料庫執行個體設定主動-主動叢集。

如果您要在多個 VPC 中設定具有資料庫執行個體的主動-主動叢集，請務必完成 [準備跨 VPC 主動-主動叢集](mysql-active-active-clusters-cross-vpc-prerequisites.md) 中的先決條件。

**Topics**
+ [步驟 1：在一或多個自訂參數群組中設定主動-主動叢集參數](#mysql-active-active-clusters-setting-up-parameter-group)
+ [步驟 2：為主動-主動叢集建立新的 RDS for MySQL 資料庫執行個體](#mysql-active-active-clusters-setting-up-db-instances)
+ [步驟 3：在主動-主動叢集中指定資料庫執行個體](#mysql-active-active-clusters-setting-up-associate-parameter-groups)
+ [步驟 4：初始化資料庫執行個體上的群組，並啟動複寫](#mysql-active-active-clusters-setting-up-start-replication-first)
+ [步驟 5：在主動-主動叢集中的其他資料庫執行個體上啟動複寫](#mysql-active-active-clusters-setting-up-start-replication-other)
+ [步驟 6：(建議) 檢查主動-主動叢集的狀態](#mysql-active-active-clusters-setting-up-view)
+ [步驟 7：(選用) 將資料匯入至主動-主動叢集中的資料庫執行個體](#mysql-active-active-clusters-import)

## 步驟 1：在一或多個自訂參數群組中設定主動-主動叢集參數
<a name="mysql-active-active-clusters-setting-up-parameter-group"></a>

主動-主動叢集中的 RDS for MySQL 資料庫執行個體必須與具有必要參數正確設定的自訂參數群組相關聯。如需參數及其各自必要設定的相關資訊，請參閱 [主動-主動叢集的必要參數設定](mysql-active-active-clusters-parameters.md)。

您可以在新的參數群組或現有的參數群組中設定這些參數。不過，為了避免意外影響不屬於主動-主動叢集的資料庫執行個體，強烈建議您建立新的自訂參數群組。主動-主動叢集中的資料庫執行個體可以與相同的資料庫參數群組或不同的資料庫參數群組建立關聯。

您可以使用 AWS 管理主控台 或 AWS CLI 建立新的自訂參數群組。如需詳細資訊，請參閱[在 Amazon RDS 中建立資料庫參數群組](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`的自訂資料庫參數群組：

針對 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 中的資料庫參數群組中的參數](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：為主動-主動叢集建立新的 RDS for MySQL 資料庫執行個體
<a name="mysql-active-active-clusters-setting-up-db-instances"></a>

下列版本的 RDS for MySQL 資料庫執行個體支援主動-主動叢集：
+ 所有 MySQL 8.4 版
+ MySQL 8.0.35 版和更高的次要版本

您可以為叢集建立最多九個新的資料庫執行個體。

您可以使用 AWS 管理主控台 或 AWS CLI 建立新的資料庫執行個體。如需建立資料庫執行個體的詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。當您建立資料庫執行個體時，請將其與您在上一個步驟中建立或修改的資料庫參數群組建立關聯。

## 步驟 3：在主動-主動叢集中指定資料庫執行個體
<a name="mysql-active-active-clusters-setting-up-associate-parameter-groups"></a>

在與每個資料庫執行個體相關聯的資料庫參數群組中，將 `group_replication_group_seeds` 參數設定為要包含在叢集中的資料庫執行個體端點。

您可以使用 AWS 管理主控台 或 AWS CLI 來設定 參數。設定此參數後，您不需要重新啟動資料庫執行個體。如需設定參數的詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](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,myactivedb2.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb3.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,myactivedb2.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb3.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

**提示**  
請確實設定與主動-主動叢集中的資料庫執行個體相關聯的每個資料庫參數群組中的 `group_replication_group_seeds` 參數。

## 步驟 4：初始化資料庫執行個體上的群組，並啟動複寫
<a name="mysql-active-active-clusters-setting-up-start-replication-first"></a>

您可以選擇任何新的資料庫來初始化群組，並啟動複寫。若要這樣做，請完成下列步驟：

1. 選擇主動-主動叢集中的資料庫執行個體，並連線至 SQL 用戶端中的該資料庫執行個體。如需連線至 RDS for MySQL 資料庫執行個體的詳細資訊，請參閱 [連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。

1. 在 SQL 用戶端中，執行下列預存程序，並將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。`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(1);
   ```

   此範例會將 `binlog retention hours` 值設定為 `168`，這表示二進位日誌檔案會在資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

   此範例會在 `mysql.rds_group_replication_start` 預存程序中指定 `1`，以使用目前的資料庫執行個體來初始化新群組。

   如需範例中所呼叫之預存程序的詳細資訊，請參閱 [管理主動-主動叢集](mysql-stored-proc-active-active-clusters.md)。

## 步驟 5：在主動-主動叢集中的其他資料庫執行個體上啟動複寫
<a name="mysql-active-active-clusters-setting-up-start-replication-other"></a>

對於主動-主動叢集中的每個資料庫執行個體，請使用 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`，這表示二進位日誌檔案會在每個資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

此範例會在 `mysql.rds_group_replication_start` 預存程序中指定 `0`，以將目前的資料庫執行個體加入現有的群組。

**提示**  
請確實在主動-主動叢集中的所有其他資料庫執行個體上執行這些預存程序。

## 步驟 6：(建議) 檢查主動-主動叢集的狀態
<a name="mysql-active-active-clusters-setting-up-view"></a>

若要確保叢集的每個成員都已正確設定，請連線至主動-主動叢集中的資料庫執行個體，並執行下列 SQL 命令，以檢查叢集的狀態：

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

您的輸出針對 `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)。

## 步驟 7：(選用) 將資料匯入至主動-主動叢集中的資料庫執行個體
<a name="mysql-active-active-clusters-import"></a>

您可以將資料從 MySQL 資料庫匯入至主動-主動叢集中的資料庫執行個體。匯入資料後，群組複寫會將其複寫至叢集中的其他資料庫執行個體。

如需匯入資料的相關資訊，請參閱 [以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫](mysql-importing-data-reduced-downtime.md)。