使用新的数据库实例设置主动-主动集群
完成以下步骤,使用新的 Amazon RDS for MySQL 数据库实例设置主动-主动集群。
如果您要在多个 VPC 中设置具有数据库实例的主动-主动集群,请务必完成跨 VPC 主动-主动集群的准备工作中的先决条件。
主题
步骤 1:在一个或多个自定义参数组中设置主动-主动集群参数
主动-主动集群中的 RDS for MySQL 数据库实例必须与一个自定义参数组相关联,该参数组对于所需参数具有正确的设置。有关参数和每个参数所需设置的信息,请参阅主动-主动集群所需的参数设置。
您可以在新的参数组或现有参数组中设置这些参数。但是,为避免意外影响不属于主动-主动集群的数据库实例,我们强烈建议您创建一个新的自定义参数组。主动-主动集群中的数据库实例可以与相同的数据库参数组或不同的数据库参数组相关联。
您可以使用 AWS Management Console或 AWS CLI 创建新的自定义参数组。有关更多信息,请参阅 在 Amazon RDS 中创建数据库参数组。以下示例运行 create-db-parameter-group AWS CLI 命令以创建名为
的自定义数据库参数组: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 Management Console或 AWS CLI 设置自定义参数组中的参数。有关更多信息,请参阅 在 Amazon RDS 中修改数据库参数组中的参数。
以下示例运行 modify-db-parameter-group AWS CLI 命令来设置参数:
对于 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 数据库实例
版本 8.0.35 及更高版本的 RDS for MySQL 数据库实例支持主动-主动集群。您可为集群创建最多九个新的数据库实例。
您可以使用 AWS Management Console或 AWS CLI 来创建新的数据库实例。有关创建数据库实例的更多信息,请参阅 创建 Amazon RDS 数据库实例。创建数据库实例时,将其与您在上一步中创建或修改的数据库参数组相关联。
步骤 3:指定主动-主动集群中的数据库实例
在与每个数据库实例关联的数据库参数组中,将 group_replication_group_seeds
参数设置为要包含在集群中的数据库实例的端点。
可以使用 AWS Management Console或 AWS CLI 来设置参数。设置此参数后,您无需重启数据库实例。有关设置参数的更多信息,请参阅 在 Amazon RDS 中修改数据库参数组中的参数。
以下示例运行 modify-db-parameter-group 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:在数据库实例上初始化组并开始复制
您可以选择任何新数据库来初始化组并开始复制。为此,请完成以下步骤:
-
在主动-主动集群中选择一个数据库实例,然后在 SQL 客户端中连接到该数据库实例。有关连接到 RDS for MySQL 数据库实例的更多信息,请参阅连接到运行 MySQL 数据库引擎的数据库实例。
-
在 SQL 客户端中,运行以下存储过程并将
group_replication_user_password
替换为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
,以使用当前数据库实例初始化新组。有关此示例中调用的存储过程的更多信息,请参阅管理主动-主动集群。
步骤 5:在主动-主动集群中的其它数据库实例上开始复制
对于主动-主动集群中的每个数据库实例,使用 SQL 客户端连接到该实例,然后运行以下存储过程。将 group_replication_user_password
替换为 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:(建议)检查主动-主动集群的状态
要确保集群的每个成员都配置正确,请通过连接到主动-主动集群中的数据库实例并运行以下 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 文档中的 Group Replication Server States
步骤 7:(可选)将数据导入到主动-主动集群中的数据库实例
您可以将数据从 MySQL 数据库导入到主动-主动集群中的数据库实例。导入数据后,组复制会将其复制到集群中的其它数据库实例。
有关导入用户的信息,请参阅将数据导入到停机时间更少的 Amazon RDS MariaDB 或 MySQL 实例。