設定適用於 MySQL 的 RDS 的主動-主動式叢集 - Amazon Relational Database Service

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

設定適用於 MySQL 的 RDS 的主動-主動式叢集

您可以使用 MySQL 群組複寫外掛程式,為 RDS for MySQL 設定主動-主動式叢集。執行 8.0.35 版及更高版本次要版本的 MySQL 資料庫執行個體適用於 RDS 版本,支援群組複寫外掛程式。

如需 MySQL 群組複寫的相關資訊,請參閱 MySQL 說明文件中的群組複寫。MySQL 文件包含有關此功能的詳細資訊,而本主題說明如何在 RDS for MySQL 資料庫執行個體上設定和管理外掛程式。

注意

為了簡潔起見,本主題中所有提及的「主動-主動」叢集都是指使用 MySQL 群組複寫外掛程式的主動-主動式叢集。

主動-主動叢集的使用案例

下列案例是使用主動-主動式叢集的最佳選擇:

  • 需要叢集中所有資料庫執行個體以支援寫入作業的應用程式。群組複製外掛程式可讓主動-主動叢集中每個資料庫執行個體上的資料保持一致。如需其運作方式的詳細資訊,請參閱 MySQL 文件中的群組複寫

  • 需要資料庫持續可用性的應用程式。使用主動-主動叢集時,資料會保留在叢集中的所有資料庫執行個體上。如果一個資料庫執行個體失敗,應用程式可以將流量重新路由到叢集中的另一個資料庫執行個

  • 可能需要在叢集中的不同資料庫執行個體之間分割讀取和寫入作業以進行負載平衡的應用程式。使用主動-主動叢集,您的應用程式可以傳送讀取流量至特定資料庫執行個體,並將流量寫入其他執行個體 您也可以隨時切換要傳送讀取或寫入的資料庫執行個體。

主動-主動式叢集的考量事項和最佳做法

在您使用 RDS for MySQL 主動-主動式叢集之前,請先檢閱下列考量事項和最佳做法:

  • 主動-主動叢集不能有九個以上的資料庫執行個體。

  • 使用群組複寫外掛程式,您可以控制主動-主動叢集的交易一致性保證。如需詳細資訊,請參閱 MySQL 文件中的交易一致性保證

  • 當不同的資料庫執行個體更新主動-主動叢集中的相同資料列時,可能會發生衝突。如需有關衝突和解決衝突的資訊,請參閱 MySQL 文件中的群組複寫

  • 對於容錯,請在主動-主動叢集中包含至少三個資料庫執行個體。您可以僅使用一或兩個資料庫執行個體來設定主動-主動叢集,但該叢集不具備容錯能力。如需容錯的相關資訊,請參閱 MySQL 文件中的容錯能力。

  • 當資料庫執行個體加入現有的主動-主動叢集並執行與叢集中最低引擎版本相同的引擎版本時,資料庫執行個體會以讀寫模式加入。

  • 當資料庫執行個體加入現有的主動-主動叢集並執行的引擎版本高於叢集中的最低引擎版本時,資料庫執行個體必須保持為唯讀模式。

  • 如果您1在資料庫參數群組中將資料庫執行個體的rds.group_replication_enabled參數設定為來啟用資料庫執行個體的群組複製,但複寫尚未啟動或無法啟動,則資料庫執行個體會進入 super-read-only 模式以避免資料不一致。如需有關 super-read-only 模式的資訊,請參閱 MySQL 文件

  • 您可以升級主動-主動叢集中的資料庫執行個體,但資料庫執行個體是唯讀的,直到主動-主動叢集中的所有其他資料庫執行個體升級至相同的引擎版本或更高版本的引擎。升級資料庫執行個體時,資料庫執行個體會在升級完成時自動加入相同的主動-主動叢集。若要避免資料庫執行個體意外切換為唯讀模式,請停用該執行個體的自動次要版本升級。如需升級 MySQL 資料庫執行個體的相關資訊,請參閱升級 MySQL 資料庫引擎

  • 您可以將異地同步備份資料庫執行個體部署中的資料庫執行個體新增至現有的主動-主動叢集。您也可以將主動-主動叢集中的單一可用區資料庫執行個體轉換為異地同步備份資料庫執行個體部署。如果異地同步備份部署中的主要資料庫執行個體失敗,則該主要執行個體容錯移轉至待命執行個體。新的主資料庫執行個體會在容錯移轉完成後自動加入相同的叢集。如需異地同步備份資料庫執行個體部署的詳情,請參閱多可用區域資料庫執行個體部署

  • 建議主動-主動叢集中的資料庫執行個體對其維護時段有不同的時間範圍。此做法可避免叢集中的多個資料庫執行個體同時離線進行維護。如需詳細資訊,請參閱 Amazon RDS 維護時段

  • 主動-主動叢集可以在資料庫執行個體之間的連線使用 SSL。若要設定 SSL 連線,請設定群組複製 _ 恢復使用 SSL 和群組複製模式參數這些參數的值必須與主動-主動叢集中的所有資料庫執行個體相符。

    目前,主動-主動叢集不支援兩者之間的連線的憑證授權單位 (CA) 驗證。 AWS 區域因此,必須將群組複製 _ssl_mode 參數設定為 DISABLED (預設值) 或針對跨區域叢集。REQUIRED

  • RDS for MySQL 主動-主動式叢集會以多主要模式執行。群組複製 _ 強制 _ 更新 _ 無處不在檢查的預設值和參數是靜態的。ON將此參數設定為時ON,應用程式無法插入具有階層式外部索引鍵條件約束的資料表中。

  • 適用於 MySQL 的 RDS 主動-主動式叢集會使用 MySQL 通訊堆疊來確保連線安全性,而不是 XCOM。如需詳細資訊,請參閱 MySQL 文件中的連線安全性管理的通訊堆疊

  • 當資料庫參數群組與主動-主動叢集中的資料庫執行個體相關聯時,我們建議您只將此資料庫參數群組與叢集中的其他資料庫執行個體建立關聯。

  • 主動-主動式叢集僅支援適用於 MySQL 資料庫執行個體的 RDS。這些資料庫執行個體必須執行受支援的資料庫引擎版本。

  • 當主動-主動叢集中的資料庫執行個體發生未預期的故障時,RDS 會自動啟動資料庫執行個體的復原。如果資料庫執行個體無法復原,建議您使用叢集中運作良好的資料庫執行個體進行 point-in-time 復原,以新的資料庫執行個體取代它。如需說明,請參閱使用復原將資料庫執行個體新增至主動-主動叢集 point-in-time

  • 您可以刪除主動-主動叢集中的資料庫執行個體,而不會影響叢集中的其他資料庫執行個體。如需刪除資料庫執行個體的相關資訊,請參閱刪除資料庫執行個體

跨 VPC 主動-主動式叢集的先決條件

您可以在多個 VPC 中使用資料庫執行個體來設定主動-主動叢集。VPC 可以位於相同 AWS 區域 或不 AWS 區域同。

注意

在多個之間傳送流量 AWS 區域 可能會產生額外費用。如需詳細資訊,請參閱通用架構的資料傳輸成本概觀

如果您要在單一 VPC 中設定主動-主動叢集,則可以略過這些步驟並繼續前往。使用新的資料庫執行個體設定主動-主動叢集

為資料庫執行個體位於多個 VPC 中的主動-主動叢集做好準備
  1. 請確定 CIDR 區塊中的 IPv4 位址範圍符合下列需求:

    • 虛擬私人雲端的 CIDR 區塊中的 IPv4 位址範圍無法重疊。

    • CIDR 區塊中的所有 IPv4 位址範圍都必須低於128.0.0.0/subnet_mask或高於 128.0.0.0/ 子網路遮罩。

    下列範圍說明了這些需求:

    • 10.1.0.0/16在一個 VPC 和另一個 VPC 10.2.0.0/16 中受到支援。

    • 172.1.0.0/16在一個 VPC 和另一個 VPC 172.2.0.0/16 中受到支援。

    • 10.1.0.0/16在一個 VPC 和另一個 VPC 10.1.0.0/16受支援,因為範圍重疊。

    • 10.1.0.0/16在一個 VPC 和另一個 VPC 172.1.0.0/16受支持,因為一個在下面128.0.0.0/subnet_mask,另一個在上面。128.0.0.0/subnet_mask

    如需 CIDR 區塊的相關資訊,請參閱 Amazon VPC 使用者指南中的 V PC CIDR 區塊

  2. 在每個 VPC 中,請確定 DNS 解析和 DNS 主機名稱均已啟用。

    如需指示,請參閱 Amazon VPC 使用者指南中的檢視和更新虛擬私人雲端的 DNS 屬性

  3. 設定 VPC,以便您可以使用下列其中一種方式來路由 VPC 之間的流量:

主動-主動叢集的必要參數設定

當您設定 RDS for MySQL 主動-主動式叢集時,需要下列參數設定。

參數 描述 必要的設定

binlog_format

設定二進位記錄格式。適用於 MySQL 的 RDS 的預設值為MIXED。如需詳細資訊,請參閱 MySQL 文件

ROW

enforce_gtid_consistency

強制執行陳述式的 GTID 一致性。適用於 MySQL 的 RDS 的預設值為OFF。如需詳細資訊,請參閱 MySQL 文件

ON

group_replication_group_name

將群組複寫名稱設定為 UUID。UUID 格式為。11111111-2222-3333-4444-555555555555您可以透過連線至 MySQL 資料庫執行個體並執行來產生 MySQL UUID。SELECT UUID()主動-主動叢集中所有資料庫執行個體的值必須相同。如需詳細資訊,請參閱 MySQL 文件

一個 MySQL 的 UUID

gtid-mode

控制以 GTID 為基礎的記錄。適用於 MySQL 的 RDS 的預設值為OFF_PERMISSIVE。如需詳細資訊,請參閱 MySQL 文件

ON

rds.custom_dns_resolution

指定是否允許從 VPC 擬私人雲端中的 Amazon DNS 伺服器進行 DNS 解析。使用rds.group_replication_enabled參數啟用群組複寫時,必須啟用 DNS 解析。使用rds.group_replication_enabled參數停用群組複寫時,無法啟用 DNS 解析。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的 Amazon DNS 伺服器

1

rds.group_replication_enabled

指定是否啟用資料庫執行個體的群組複寫。必須在主動-主動叢集中的資料庫執行個體上啟用群組複寫。

1

slave_preserve_commit_order

控制交易在複本上確認的順序。適用於 MySQL 的 RDS 的預設值為ON。如需詳細資訊,請參閱 MySQL 文件

ON

將現有的資料庫執行個體轉換為主動-主動叢集

您要移轉至主動-主動叢集的資料庫執行個體的資料庫引擎版本必須是 MySQL 8.0.35 或更新版本。如果您需要升級引擎版本,請參閱升級 MySQL 資料庫引擎

如果要在多個 VPC 中設定具有資料庫執行個體的主動-主動叢集,請確定已完成中的先決條件。跨 VPC 主動-主動式叢集的先決條件

完成下列步驟,即可將現有的資料庫執行個體移轉到適用於 RDS for MySQL 的主動-主動叢集。

步驟 1:在一或多個自訂參數群組中設定主動-主動叢集參數

主動-主動叢集中的 RDS for MySQL 資料庫執行個體必須與具有所需參數設定正確的自訂參數群組相關聯。如需有關參數和每個參數所需設定的資訊,請參閱主動-主動叢集的必要參數設定

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

您可以使用 AWS Management Console 或建 AWS CLI 立新的自訂參數群組。如需詳細資訊,請參閱 建立資料庫參數群組。下列範例會執行命create-db-parameter-group AWS CLI 令,以建立名為的自訂資料庫參數群組myactivepg

對於LinuxmacOS、或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 來設定自訂參數群組中的參數。如需詳細資訊,請參閱 修改資料庫參數群組中的參數

下列範例會執行modify-db-parameter-group AWS CLI 命令來設定參數:

對於LinuxmacOS、或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:將資料庫執行個體與已設定所需群組複寫參數的資料庫參數群組產生關聯

將資料庫執行個體與您在上一個步驟中建立或修改的參數群組產生關聯。如需說明,請參閱將資料庫參數群組與資料庫執行個體建立關聯

重新啟動資料庫執行個體以使新參數設定生效。如需說明,請參閱重新啟動中的資料庫執行個體

步驟 3:建立主動-主動叢集

在與資料庫執行個體關聯的資料庫參數群組中,將group_replication_group_seeds參數設定為要轉換之資料庫執行個體的端點。

您可以使用 AWS Management Console 或 AWS CLI 來設定參數。設定此參數後,您不需要重新啟動資料庫執行個體。如需設定參數的詳細資訊,請參閱修改資料庫參數群組中的參數

下列範例會執行modify-db-parameter-group AWS CLI 命令來設定參數:

對於LinuxmacOS、或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 資料庫執行個體

若要為主動-主動叢集建立其他資料庫執行個體,請在要轉換的資料庫執行個體上執行 point-in-time 復原。如需說明,請參閱使用復原將資料庫執行個體新增至主動-主動叢集 point-in-time

主動-主動叢集最多可以有九個資料庫執行個體。在資料庫執行個體上執行 point-in-time復原,直到您擁有要用於叢集的資料庫執行個體數量為止。執行時 point-in-recovery,請務必將要新增的資料庫執行個體與rds.group_replication_enabled設定為的資料庫參數群組建立關聯1。否則,群組複寫將不會在新增的資料庫執行個體上啟動。

步驟 5:在要轉換的資料庫執行個體上初始化群組

初始化群組並開始複寫:

  1. Connect 到要在 SQL 用戶端中轉換的資料庫執行個體。如需連線至適用於 MySQL 的 RDS 資料庫執行個體的詳細資訊,請參閱連接至執行 MySQL 資料庫引擎的資料庫執行個體

  2. 在 SQL 用戶端中,執行下列預存程序,並以使用者的密碼取代 Group_replication_user_passwordrdsgrprepladminrdsgrprepladmin使用者會保留給主動-主動叢集中的群組複寫連線使用。在主動-主動叢集中的所有資料庫執行個體上,此使用者的密碼必須相同。

    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,表示二進位記錄檔會在資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

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

    如需範例中呼叫之預存程序的詳細資訊,請參閱管理主動-主動叢集

步驟 6:在主動-主動叢集中的其他資料庫執行個體上開始複寫

對於主動-主動叢集中的每個資料庫執行個體,請使用 SQL 用戶端連線至執行個體,然後執行下列預存程序。以使用者的密碼取代群組複製密碼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,表示每個資料庫執行個體會保留二進位記錄檔七天。您可以調整此值以符合您的需求。

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

提示

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

步驟 7:(建議) 檢查作用中-主動叢集的狀態

若要確定叢集的每個成員都已正確設定,請連線至主動-主動叢集中的資料庫執行個體,然後執行下列 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 文件中的群組複寫伺服器狀態

使用新的資料庫執行個體設定主動-主動叢集

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

如果要在多個 VPC 中設定具有資料庫執行個體的主動-主動叢集,請確定已完成中的先決條件。跨 VPC 主動-主動式叢集的先決條件

步驟 1:在一或多個自訂參數群組中設定主動-主動叢集參數

主動-主動叢集中的 RDS for MySQL 資料庫執行個體必須與具有所需參數設定正確的自訂參數群組相關聯。如需有關參數和每個參數所需設定的資訊,請參閱主動-主動叢集的必要參數設定

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

您可以使用 AWS Management Console 或建 AWS CLI 立新的自訂參數群組。如需詳細資訊,請參閱 建立資料庫參數群組。下列範例會執行命create-db-parameter-group AWS CLI 令,以建立名為的自訂資料庫參數群組myactivepg

對於LinuxmacOS、或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 來設定自訂參數群組中的參數。如需詳細資訊,請參閱 修改資料庫參數群組中的參數

下列範例會執行modify-db-parameter-group AWS CLI 命令來設定參數:

對於LinuxmacOS、或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 資料庫執行個體

適用於 MySQL 資料庫執行個體的 RDS 版本 8.0.35 及更高版本支援主動-主動式叢集。您最多可以為叢集建立九個新的資料庫執行個體。

您可以使用 AWS Management Console 或來建立新 AWS CLI 的資料庫執行個體。如需建立資料庫執行個體的詳細資訊,請參閱 建立 Amazon RDS 資料庫執行個體。建立資料庫執行個體時,請將其與您在上一個步驟中建立或修改的資料庫參數群組產生關聯。

步驟 4:指定主動-主動叢集中的資料庫執行個體

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

您可以使用 AWS Management Console 或 AWS CLI 來設定參數。設定此參數後,您不需要重新啟動資料庫執行個體。如需設定參數的詳細資訊,請參閱修改資料庫參數群組中的參數

下列範例會執行modify-db-parameter-group AWS CLI 命令來設定參數:

對於LinuxmacOS、或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

步驟 5:初始化資料庫執行個體上的群組並開始複寫

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

  1. 在主動-主動叢集中選擇資料庫執行個體,然後在 SQL 用戶端中連線到該資料庫執行個體。如需連線至適用於 MySQL 的 RDS 資料庫執行個體的詳細資訊,請參閱連接至執行 MySQL 資料庫引擎的資料庫執行個體

  2. 在 SQL 用戶端中,執行下列預存程序,並以使用者的密碼取代 Group_replication_user_passwordrdsgrprepladminrdsgrprepladmin使用者會保留給主動-主動叢集中的群組複寫連線使用。在主動-主動叢集中的所有資料庫執行個體上,此使用者的密碼必須相同。

    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,表示二進位記錄檔會在資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

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

    如需範例中呼叫之預存程序的詳細資訊,請參閱管理主動-主動叢集

步驟 6:在主動-主動叢集中的其他資料庫執行個體上開始複寫

對於主動-主動叢集中的每個資料庫執行個體,請使用 SQL 用戶端連線至執行個體,然後執行下列預存程序。以使用者的密碼取代群組複製密碼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,表示每個資料庫執行個體會保留二進位記錄檔七天。您可以調整此值以符合您的需求。

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

提示

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

步驟 7:(建議) 檢查作用中-主動叢集的狀態

若要確定叢集的每個成員都已正確設定,請連線至主動-主動叢集中的資料庫執行個體,然後執行下列 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 文件中的群組複寫伺服器狀態

步驟 8:(選擇性) 將資料匯入主動-主動叢集中的資料庫執行個體

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

如需匯入資料的資訊,請參閱將資料匯入至 Amazon RDS MariaDB 或 MySQL 資料庫,並減少停機時間

將資料庫執行個體新增至主動-主動叢集

您可以透過還原資料庫快照或將資料庫執行個體還原到某個時間點,將資料庫執行個體新增至主動-主動叢集。主動-主動叢集最多可包含九個資料庫執行個體。

當您將資料庫執行個體復原到某個時間點時,它通常會包含比從資料庫快照還原的資料庫執行個體更新的交易。當資料庫執行個體有較近的交易時,開始複寫時需要套用的交易較少。因此,使用 point-in-time 復原將資料庫執行個體新增至叢集通常會比從資料庫快照還原快照快照更快。

使用復原將資料庫執行個體新增至主動-主動叢集 point-in-time

您可以透過對叢集中的資料庫執行個體執行 point-in-time 復原,將資料庫執行個體新增至主動-主動叢集。

如需將資料庫執行個體復原至其他時間點的相關資訊 AWS 區域,請參閱將自動備份複製到另一個 AWS 區域

使用復原將資料庫執行個體新增至主動-主動叢集 point-in-time
  1. 透過在主動-主動叢集中的資料庫執行個體上執行 point-in-time 復原,以建立新的資料庫執行個體。

    您可以在叢集中的任何資料庫執行個體執行 point-in-time 復原,以建立新的資料庫執行個體。如需說明,請參閱將資料庫執行個體還原至指定的時間

    重要

    在期間 point-in-time-recovery,請將新資料庫執行個體與已設定主動-主動叢集參數的資料庫參數群組產生關聯。否則,群組複寫將不會在新的資料庫執行個體上啟動。如需有關參數和每個參數所需設定的資訊,請參閱主動-主動叢集的必要參數設定

    提示

    如果您在開始 point-in-time 復原之前拍攝資料庫執行個體的快照,您可能可以減少在新資料庫執行個體上套用交易所需的時間。

  2. 將資料庫執行個體新增至與主動-主動叢集中資料庫執行個體相關聯的每個資料庫參數群組中的參數,包括您與新資料庫執行個體相關聯的資料庫參數群組。group_replication_group_seeds

    如需設定參數的詳細資訊,請參閱修改資料庫參數群組中的參數

  3. 在 SQL 用戶端中,連接到新的資料庫執行個體,然後呼叫神秘的 rds_ 群組複製 _ 設定恢復通道預存程序。以使用者的密碼取代群組複製密碼rdsgrprepladmin

    call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
  4. 使用 SQL 用戶端呼叫我們的群組複製啟動預存程序以開始複寫:

    call mysql.rds_group_replication_start(0);

使用資料庫快照將資料庫執行個體新增至主動-主動叢集

您可以在叢集中建立資料庫執行個體的資料庫快照,然後還原資料庫快照,將資料庫執行個體新增至主動-主動叢集。

如需將快照複製到其他快照的詳細資訊 AWS 區域,請參閱跨區域快照複製

使用資料庫快照將資料庫執行個體新增至主動-主動叢集
  1. 在主動-主動叢集中建立資料庫執行個體的資料庫快照。

    您可以建立叢集中任何資料庫執行個體的資料庫快照。如需說明,請參閱為單一可用區資料庫執行個體建立資料庫快照

  2. 從資料庫快照還原資料庫執行個體。

    在快照還原作業期間,請將新資料庫執行個體與已設定主動-主動叢集參數的資料庫參數群組建立關聯。如需有關參數和每個參數所需設定的資訊,請參閱主動-主動叢集的必要參數設定

    如需從資料庫快照還原資料庫執行個體的詳細資訊,請參閱還原至資料庫執行個體

  3. 將資料庫執行個體新增至與主動-主動叢集中資料庫執行個體相關聯的每個資料庫參數群組中的參數,包括您與新資料庫執行個體相關聯的資料庫參數群組。group_replication_group_seeds

    如需設定參數的詳細資訊,請參閱修改資料庫參數群組中的參數

  4. 在 SQL 用戶端中,連接到新的資料庫執行個體,然後呼叫神秘的 rds_ 群組複製 _ 設定恢復通道預存程序。以使用者的密碼取代群組複製密碼rdsgrprepladmin

    call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
  5. 使用 SQL 用戶端呼叫我們的群組複製啟動預存程序以開始複寫:

    call mysql.rds_group_replication_start(0);

監視主動-主動叢集

您可以透過連線至叢集中的資料庫執行個體,並執行下列 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 文件中的群組複寫伺服器狀態

停止主動-主動叢集中資料庫執行個體上的群組複寫

您可以在主動-主動叢集中的資料庫執行個體上停止群組複寫。停止群組複寫時,資料庫執行個體會進入 super-read-only模式,直到重新啟動複製或從主動-主動叢集移除該資料庫執行個體為止。如需有關 super-read-only 模式的資訊,請參閱 MySQL 文件

暫時停止主動-主動叢集的群組複製
  1. 使用 SQL 用戶端 Connect 至主動-主動叢集中的資料庫執行個體。

    如需連線至適用於 MySQL 的 RDS 資料庫執行個體的詳細資訊,請參閱連接至執行 MySQL 資料庫引擎的資料庫執行個體

  2. 在 SQL 用戶端中,呼叫預神秘的 rds_ 群組複製 _ 停止存程序:

    call mysql.rds_group_replication_stop();

重新命名主動-主動叢集中的資料庫執行個體

您可以變更主動-主動叢集中資料庫執行個體的名稱。若要重新命名主動-主動叢集中的多個資料庫執行個體,請一次執行一個資料庫執行個體。因此,在重新命名下一個資料庫執行個體之前,請重新命名一個資料庫執行個體,並將其重新連接

重新命名主動-主動叢集中的資料庫執行個體
  1. Connect 至 SQL 用戶端中的資料庫執行個體,然後呼叫神秘的 rds_ 群組複製 _ 停止預存程序:

    call mysql.rds_group_replication_stop();
  2. 依照中的指示重新命名資料庫執行個體重新命名資料庫執行個體

  3. 修改與主動-主動叢集中資料庫執行個體相關聯的每個資料庫參數群組中的參數。group_replication_group_seeds

    在參數設定中,將舊的資料庫執行個體端點取代為新的資料庫執行個體端點。如需設定參數的詳細資訊,請參閱修改資料庫參數群組中的參數

  4. Connect 至 SQL 用戶端中的資料庫執行個體,然後呼叫我們的群組複製啟動預存程序:

    call mysql.rds_group_replication_start(0);

從主動-主動叢集移除資料庫執行個體

從主動-主動叢集中移除資料庫執行個體時,該執行個體會還原為獨立資料庫執行個體。

從主動-主動叢集移除資料庫執行個體
  1. Connect 至 SQL 用戶端中的資料庫執行個體,然後呼叫神秘的 rds_ 群組複製 _ 停止預存程序:

    call mysql.rds_group_replication_stop();
  2. 修改將保留在主動-主動叢集中的資料庫執行個體的group_replication_group_seeds參數。

    group_replication_group_seeds參數中,刪除要從主動-主動叢集移除的資料庫執行個體。如需設定參數的詳細資訊,請參閱修改資料庫參數群組中的參數

  3. 修改要從主動-主動叢集移除的資料庫執行個體參數,使其不再是叢集的一部分。

    您可以將資料庫執行個體與不同的參數群組產生關聯,也可以修改與資料庫執行個體關聯的資料庫參數群組中的參數。要修改的參數包括group_replication_group_namerds.group_replication_enabled、和group_replication_group_seeds。如需有關主動-主動叢集參數的詳細資訊,請參閱。主動-主動叢集的必要參數設定

    如果您修改資料庫參數群組中的參數,請確定資料庫參數群組未與主動-主動叢集中的其他資料庫執行個體相關聯。

  4. 重新啟動您從主動-主動叢集移除的資料庫執行個體,以使新參數設定生效。

    如需說明,請參閱重新啟動中的資料庫執行個體

適用於 MySQL 的 RDS 主動-主動式叢集的限制

下列限制適用於適用於 MySQL 版 RDS 的主動-主動式叢集:

  • 主要使用者名稱不能用rdsgrprepladmin於主動-主動叢集中的資料庫執行個體。此使用者名稱會保留給群組複寫連線使用。

  • 對於主動-主動叢集中具有僅供讀取複本的資料庫執行個體,長時間複寫狀態Replicating可能會導致記錄檔超出儲存限制。如需僅供讀取複本狀態的相關資訊,請參閱監控僅供讀取複本

  • 主動-主動叢集中的資料庫執行個體不支援藍/綠部署。如需詳細資訊,請參閱 使用 Amazon RDS 藍/綠部署進行資料庫更新

  • 主動-主動叢集中的資料庫執行個體不支援 Kerberos 驗證。如需詳細資訊,請參閱 針對 MySQL 使用 Kerberos 身分驗證

  • 異地同步備份資料庫叢集中的資料庫執行個體無法新增至主動-主動叢集。

    不過,異地同步備份資料庫執行個體部署中的資料庫執行個體可新增至主動-主動叢集。

    如需詳細資訊,請參閱 設定及管理多可用區部署

  • 沒有主索引鍵的資料表不會在主動-主動叢集中複寫,因為群組複寫外掛程式拒絕寫入。

  • 非 InnoDB 表不會在主動-主動叢集中複寫。

  • 主動-主動叢集不支援叢集中不同資料庫執行個體上的並行 DML 和 DDL 陳述式。

  • 您無法將主動-主動叢集設定為針對群組的複寫模式使用單一主要模式。對於此配置,我們建議改用異地同步備份資料庫叢集。如需詳細資訊,請參閱 多可用區域資料庫叢集部署

  • 主動-主動叢集中的資料庫執行個體不支援多來源複寫。

  • 跨區域主動-主動叢集無法針對群組複寫連線強制執行憑證授權單位 (CA) 驗證。