MySQL 9.0 群組複製可以使用下列其中一種方法,保護成員之間的群組通訊連線
使用其本身的安全協定實作,包括 TLS/SSL 以及使用允許清單來處理傳入的群組通訊系統 (GCS) 連線。
使用 MySQL 伺服器本身的連線安全性,而非群組複製的實作。使用 MySQL 協定表示可以使用標準使用者驗證方法來授予 (或撤銷) 群組的存取權,而非使用允許清單,而且伺服器協定的最新功能始終可在發行時使用。
可以透過將系統變數 group_replication_communication_stack
設定為 XCOM
(預設選項) 來使用群組複製本身的實作,或設定為 MYSQL
來使用 MySQL 伺服器的連線安全性,藉此進行選擇。
若要讓複製群組使用 MySQL 通訊堆疊,需要下列額外的組態。當您將群組的通訊堆疊從 XCom 通訊堆疊切換到 MySQL 通訊堆疊時,請務必確保滿足所有這些需求。
MySQL 通訊堆疊的群組複製需求
每個群組成員的
group_replication_local_address
系統變數所設定的網路位址,必須設定為 MySQL 伺服器正在接聽的一個 IP 位址和連接埠,如伺服器的bind_address
系統變數所指定。每個成員的 IP 位址和連接埠組合在群組中必須是唯一的。建議將每個群組成員的group_replication_group_seeds
系統變數設定為包含所有群組成員的所有本機位址。MySQL 通訊堆疊支援網路命名空間,而 XCom 通訊堆疊則不支援。如果群組成員的群組複製本機位址 (
group_replication_local_address
) 使用網路命名空間,則必須使用CHANGE REPLICATION SOURCE TO
陳述式為每個群組成員設定這些命名空間。此外,每個群組成員的report_host
伺服器系統變數必須設定為報告命名空間。所有群組成員都必須使用相同的命名空間,以避免在分散式復原期間發生位址解析的可能問題。必須將
group_replication_ssl_mode
系統變數設定為群組通訊所需的設定。此系統變數會控制是否針對群組通訊啟用或停用 TLS/SSL。使用 MySQL 通訊堆疊時,TLS/SSL 組態會取自群組複製的分散式復原設定。此設定在所有群組成員上應該都相同,以避免潛在的衝突。為了避免潛在的衝突,所有群組成員的
require_secure_transport
伺服器系統變數值應該相同。如果group_replication_ssl_mode
設定為REQUIRED
、VERIFY_CA
或VERIFY_IDENTITY
,請使用require_secure_transport=ON
。如果group_replication_ssl_mode
設定為DISABLED
,請使用require_secure_transport=OFF
。如果群組通訊啟用了 TLS/SSL,則必須設定群組複寫的「分散式復原」安全設定(如果尚未設定),或驗證已有的設定。MySQL 通訊堆疊不僅將這些設定用於成員間的分散式復原連線,也用於一般群組通訊的 TLS/SSL 設定。
group_replication_recovery_use_ssl
和其他group_replication_recovery_*
系統變數,請參閱 第 20.6.3.2 節,〈分散式復原的安全通訊端層 (SSL) 連線〉。當群組使用 MySQL 通訊堆疊時,不會使用群組複寫的允許清單,因此會忽略
group_replication_ip_allowlist
系統變數,也不需要設定它。群組複寫用於分散式復原的複寫使用者帳戶(使用
CHANGE REPLICATION SOURCE TO
陳述式設定),會在設定群組複寫連線時,由 MySQL 通訊堆疊進行驗證。所有群組成員都必須使用相同的這個使用者帳戶,並給予以下權限:GROUP_REPLICATION_STREAM
。使用者帳戶必須具有此權限,才能使用 MySQL 通訊堆疊建立群組複寫連線。CONNECTION_ADMIN
。必須具有此權限,才能確保在其中一個伺服器進入離線模式時,不會終止群組複寫連線。如果使用 MySQL 通訊堆疊時沒有此權限,則進入離線模式的成員會被逐出群組。
除了
REPLICATION SLAVE
和BACKUP_ADMIN
權限之外,所有複寫使用者帳戶都必須具有這些權限 (請參閱 第 20.2.1.3 節,〈分散式復原的使用者認證〉)。當您新增新的權限時,請務必在每個群組成員上發出SET SQL_LOG_BIN=0
(在您發出GRANT
陳述式之前),並在發出陳述式後發出SET SQL_LOG_BIN=1
,以確保本機交易不會干擾重新啟動群組複寫。
group_replication_communication_stack
實際上是群組範圍的設定,且所有群組成員上的設定都必須相同。但是,群組複寫本身並未執行這項群組範圍設定的檢查。具有與群組其他成員不同值的成員,因為通訊協定不相容,所以完全無法與其他成員通訊,也無法交換其設定的相關資訊。
這表示,雖然可以在群組複寫執行時變更系統變數的值,且在重新啟動群組成員上的群組複寫之後才會生效,但除非在所有成員上都變更了設定,否則該成員仍然無法重新加入群組。因此,您必須停止所有成員上的群組複寫,並在重新啟動群組之前,變更所有成員上系統變數的值。由於所有成員都已停止,因此必須完整重新啟動群組(由具有 group_replication_bootstrap_group=ON
的伺服器執行啟動),變更的值才會生效。您可以在群組成員停止時,對群組成員的設定進行其他必要的變更。
對於執行中的群組,請按照下列程序變更 group_replication_communication_stack
的值和其他必要設定,將群組從 XCom 通訊堆疊移轉至 MySQL 通訊堆疊,或是從 MySQL 通訊堆疊移轉至 XCom 通訊堆疊:
使用
STOP GROUP_REPLICATION
陳述式,停止每個群組成員上的群組複寫。最後停止主要成員,這樣您就不會觸發新的主要成員選舉,而必須等待選舉完成。在每個群組成員上,將系統變數
group_replication_communication_stack
設定為新的通訊堆疊,適當地設定為MYSQL
或XCOM
。您可以使用編輯 MySQL Server 設定檔 (在 Linux 和 Unix 系統上通常名為my.cnf
,在 Windows 系統上則名為my.ini
),或使用SET
陳述式來執行這項操作。例如:SET PERSIST group_replication_communication_stack="MYSQL";
如果您要將複寫群組從 XCom 通訊堆疊 (預設) 移轉至 MySQL 通訊堆疊,請在每個群組成員上,將所需的系統變數設定或重新設定為適當的設定,如以上清單所述。例如,必須將
group_replication_local_address
系統變數設定為 MySQL Server 正在接聽的其中一個 IP 位址和連接埠。同時,使用CHANGE REPLICATION SOURCE TO
陳述式來設定任何網路命名空間。如果您要將複寫群組從 XCom 通訊堆疊 (預設) 移轉至 MySQL 通訊堆疊,請在每個群組成員上,發出
GRANT
陳述式,為複寫使用者帳戶提供GROUP_REPLICATION_STREAM
和CONNECTION_ADMIN
權限。您需要將群組成員從停止群組複寫時套用的唯讀狀態中移除。同時,請務必在每個群組成員上發出SET SQL_LOG_BIN=0
(在您發出GRANT
陳述式之前),並在發出陳述式後發出SET SQL_LOG_BIN=1
,以確保本機交易不會干擾重新啟動群組複寫。例如:SET GLOBAL SUPER_READ_ONLY=OFF; SET SQL_LOG_BIN=0; GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%'; GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%'; SET SQL_LOG_BIN=1;
如果您要將複寫群組從 MySQL 通訊堆疊移回 XCom 通訊堆疊,請在每個群組成員上,將需求清單中的系統變數重新設定為適合 XCom 通訊堆疊的設定。第 20.9 節,〈群組複寫變數〉 列出系統變數及其預設值和 XCom 通訊堆疊的需求。
注意:XCom 通訊堆疊不支援網路命名空間,因此群組複寫本機位址 (
group_replication_local_address
系統變數) 無法使用這些。請發出CHANGE REPLICATION SOURCE TO
陳述式來取消設定這些。當您移回 XCom 通訊堆疊時,
group_replication_recovery_use_ssl
和其他group_replication_recovery_*
系統變數指定的設定,不會用於保護群組通訊安全。相反地,會使用群組複寫系統變數group_replication_ssl_mode
來啟用群組通訊連線的 SSL 使用,並指定連線的安全模式,而其餘的設定則取自伺服器的 SSL 設定。如需詳細資訊,請參閱 第 20.6.2 節,〈使用安全通訊端層 (SSL) 保護群組通訊連線〉。
若要重新啟動群組,請按照 第 20.5.2 節,〈重新啟動群組〉 中的程序執行,其中說明如何安全地啟動已執行和驗證交易的群組。必須由具有
group_replication_bootstrap_group=ON
的伺服器執行啟動,才能變更通訊堆疊,因為所有成員都必須關閉。現在,成員使用新的通訊堆疊相互連線。任何
group_replication_communication_stack
設定為 (或在 XCom 的情況下預設為) 先前通訊堆疊的伺服器,都無法再加入群組。請務必注意,因為群組複寫甚至看不到加入嘗試,所以不會檢查並拒絕加入的成員,並顯示錯誤訊息。相反地,當先前的通訊堆疊放棄嘗試與新的通訊堆疊聯繫時,加入嘗試會無訊息地失敗。