

# 主动-主动集群的限制和注意事项
<a name="mysql-active-active-clusters-considerations-limitations"></a>

Amazon RDS 中的主动-主动集群通过将工作负载分配到多个实例来增强可用性和可扩展性。但是，在使用此架构时，需要记住一些重要的限制和注意事项。

以下各节概述了诸如复制延迟、冲突解决、资源分配和失效转移行为等关键因素。了解这些注意事项有助于确保主动-主动集群部署实现理想的性能和可靠性。

**Topics**
+ [RDS for MySQL 主动-主动集群的限制](#mysql-active-active-clusters-limitations)
+ [RDS for MySQL 主动-主动集群的注意事项和最佳实践](#mysql-active-active-clusters-considerations)

## RDS for MySQL 主动-主动集群的限制
<a name="mysql-active-active-clusters-limitations"></a>

以下限制适用于 RDS for MySQL 的主动-主动集群。
+ 对于主动-主动集群中的数据库实例，主用户名不能为 `rdsgrprepladmin`。此用户名保留用于组复制连接。
+ 对于在主动-主动集群中具有只读副本的数据库实例，除 `Replicating` 之外的长时间复制状态可能会导致日志文件超出存储限制。有关只读副本的状态的信息，请参阅[监控只读复制](USER_ReadRepl.Monitoring.md)。
+ 主动-主动集群中的数据库实例不支持蓝绿部署。有关更多信息，请参阅 [使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。
+ 主动-主动集群中的数据库实例不支持 Kerberos 身份验证。有关更多信息，请参阅 [对 Amazon RDS for MySQL 进行 Kerberos 身份验证](mysql-kerberos.md)。
+ 无法将多可用区数据库集群中的数据库实例添加到主动-主动集群。但是，可以将多可用区数据库实例部署中的数据库实例添加到主动-主动集群。有关更多信息，请参阅 [配置和管理 Amazon RDS 的多可用区部署](Concepts.MultiAZ.md)。
+ 由于组复制插件拒绝写入，因此不会在主动-主动集群中复制没有主键的表。
+ 不会在主动-主动集群中复制非 InnoDB 表。
+ 主动-主动集群不支持集群中不同数据库实例上的并发 DML 和 DDL 语句。
+ 您无法将主动-主动集群配置为使用单主模式作为该组的复制模式。对于此配置，我们建议改用多可用区数据库集群。有关更多信息，请参阅 [Amazon RDS 的多可用区数据库集群部署](multi-az-db-clusters-concepts.md)。
+ 主动-主动集群中的数据库实例不支持多源复制。
+ 跨区域主动-主动集群无法对组复制连接强制执行证书颁发机构（CA）验证。

## RDS for MySQL 主动-主动集群的注意事项和最佳实践
<a name="mysql-active-active-clusters-considerations"></a>

在使用 RDS for MySQL 主动-主动集群之前，请查看以下注意事项和最佳实践：
+ 主动-主动集群的数据库实例不能超过 9 个。
+ 使用组复制插件，您可以控制主动-主动集群的事务一致性保证。有关更多信息，请参阅 MySQL 文档中的 [Transaction Consistency Guarantees](https://dev.mysql.com/doc/refman/8.0/en/group-replication-consistency-guarantees.html)。
+ 当不同的数据库实例更新主动-主动集群中的同一行时，可能会发生冲突。有关冲突和冲突解决的信息，请参阅 MySQL 文档中的 [Group Replication](https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html)。
+ 为了实现容错，请在您的主动-主动集群中至少包含三个数据库实例。可以配置只具有一个或两个数据库实例的主动-主动集群，但该集群不具备容错能力。有关容错的信息，请参阅 MySQL 文档中的 [Fault-tolerance](https://dev.mysql.com/doc/refman/8.0/en/group-replication-fault-tolerance.html)。
+ 当数据库实例加入现有的主动-主动集群并且运行的引擎版本与集群中的最低引擎版本相同时，该数据库实例将以读写模式加入。
+ 当数据库实例加入现有的主动-主动集群并且运行的引擎版本高于集群中的最低引擎版本时，该数据库实例必须保持只读模式。
+ 如果您通过在数据库参数组中将数据库实例的 `rds.group_replication_enabled` 参数设置为 `1` 来为它启用组复制，但复制尚未启动或未能启动，则该数据库实例将置于超级只读模式以防止数据不一致。有关超级只读模式的信息，请参阅 [MySQL 文档](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_super_read_only)。
+ 您可以升级主动-主动集群中的数据库实例，但在主动-主动集群中的所有其它数据库实例都升级到相同的引擎版本或更高的引擎版本之前，该数据库实例是只读的。升级数据库实例时，升级完成后，数据库实例会自动加入同一个主动-主动集群。为避免数据库实例意外切换到只读模式，请对其禁用自动次要版本升级。有关升级 MySQL 数据库实例的信息，请参阅[升级 RDS for MySQL 数据库引擎](USER_UpgradeDBInstance.MySQL.md)。
+ 您可以将多可用区数据库实例部署中的数据库实例添加到现有的主动-主动集群中。您还可以将主动-主动集群中的单可用区数据库实例转换为多可用区数据库实例部署。如果多可用区部署中的主数据库实例出现故障，则该主实例会失效转移到备用实例。失效转移完成后，新的主数据库实例会自动加入同一个集群。有关多可用区数据库实例部署的更多信息，请参阅[Amazon RDS 的多可用区数据库实例部署](Concepts.MultiAZSingleStandby.md)。
+ 我们建议主动-主动集群中的数据库实例为其维护时段使用不同的时间范围。这种做法可以避免集群中的多个数据库实例同时脱机来进行维护。有关更多信息，请参阅 [Amazon RDS 维护时段](USER_UpgradeDBInstance.Maintenance.md#Concepts.DBMaintenance)。
+ 主动-主动集群可以使用 SSL 在数据库实例之间建立连接。要配置 SSL 连接，请设置 [ group\$1replication\$1recovery\$1use\$1ssl](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_recovery_use_ssl) 和 [group\$1replication\$1ssl\$1mode](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_ssl_mode) 参数。对于主动-主动集群中的所有数据库实例，这些参数的值必须匹配。

  目前，主动-主动集群不支持对 Amazon Web Services 区域之间的连接进行证书颁发机构（CA）验证。因此，对于跨区域集群，必须将 [group\$1replication\$1ssl\$1mode](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_ssl_mode) 参数设置为 `DISABLED`（默认）或 `REQUIRED`。
+ RDS for MySQL 主动-主动集群在多主模式下运行。[group\$1replication\$1enforce\$1update\$1everywhere\$1checks](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_enforce_update_everywhere_checks) 的默认值为 `ON`，参数是静态的。当此参数设置为 `ON` 时，应用程序无法插入到具有级联外键约束的表中。
+ RDS for MySQL 主动-主动集群使用 MySQL 通信堆栈来保护连接安全，而不是 XCOM。有关更多信息，请参阅 MySQL 文档中的 [Communication Stack for Connection Security Management](https://dev.mysql.com/doc/refman/8.0/en/group-replication-connection-security.html)。
+ 当数据库参数组与主动-主动集群中的数据库实例关联时，我们建议仅将此数据库参数组与集群中的其它数据库实例相关联。
+ 主动-主动集群仅支持 RDS for MySQL 数据库实例。这些数据库实例必须运行受支持的数据库引擎版本。
+ 当主动-主动集群中的数据库实例出现意外故障时，RDS 会自动开始恢复该数据库实例。如果数据库实例无法恢复，我们建议将其替换为新的数据库实例，方法是使用集群中运行状况良好的数据库实例执行时间点恢复。有关说明，请参阅[使用时间点恢复将数据库实例添加到主动-主动集群](mysql-active-active-clusters-adding.md#mysql-active-active-clusters-adding-pitr)。
+ 您可以删除主动-主动集群中的数据库实例，而不会影响集群中的其它数据库实例。有关删除数据库实例的信息，请参阅[删除数据库实例](USER_DeleteInstance.md)。
+ 当数据库实例无意中离开主动-主动集群时，`group_replication_exit_state_action` 参数会更改为 `OFFLINE_MODE`。在此状态下，无法访问数据库实例，您必须重启数据库实例才能使其恢复在线状态并重新加入集群。可以通过修改自定义参数组中的 `group_replication_exit_state_action` 参数来更改此行为。通过将参数设置为 `READ_ONLY`，当数据库实例无意中离开集群时，它会进入超级只读状态而不是离线状态。