文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  連線安全管理通訊堆疊

20.6.1 連線安全管理通訊堆疊

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 設定為 REQUIREDVERIFY_CAVERIFY_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 SLAVEBACKUP_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 通訊堆疊:

  1. 使用 STOP GROUP_REPLICATION 陳述式,停止每個群組成員上的群組複寫。最後停止主要成員,這樣您就不會觸發新的主要成員選舉,而必須等待選舉完成。

  2. 在每個群組成員上,將系統變數 group_replication_communication_stack 設定為新的通訊堆疊,適當地設定為 MYSQLXCOM。您可以使用編輯 MySQL Server 設定檔 (在 Linux 和 Unix 系統上通常名為 my.cnf,在 Windows 系統上則名為 my.ini),或使用 SET 陳述式來執行這項操作。例如:

    SET PERSIST group_replication_communication_stack="MYSQL";
  3. 如果您要將複寫群組從 XCom 通訊堆疊 (預設) 移轉至 MySQL 通訊堆疊,請在每個群組成員上,將所需的系統變數設定或重新設定為適當的設定,如以上清單所述。例如,必須將 group_replication_local_address 系統變數設定為 MySQL Server 正在接聽的其中一個 IP 位址和連接埠。同時,使用 CHANGE REPLICATION SOURCE TO 陳述式來設定任何網路命名空間。

  4. 如果您要將複寫群組從 XCom 通訊堆疊 (預設) 移轉至 MySQL 通訊堆疊,請在每個群組成員上,發出 GRANT 陳述式,為複寫使用者帳戶提供 GROUP_REPLICATION_STREAMCONNECTION_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;
  5. 如果您要將複寫群組從 MySQL 通訊堆疊移回 XCom 通訊堆疊,請在每個群組成員上,將需求清單中的系統變數重新設定為適合 XCom 通訊堆疊的設定。第 20.9 節,〈群組複寫變數〉 列出系統變數及其預設值和 XCom 通訊堆疊的需求。

    注意:
  6. 若要重新啟動群組,請按照 第 20.5.2 節,〈重新啟動群組〉 中的程序執行,其中說明如何安全地啟動已執行和驗證交易的群組。必須由具有 group_replication_bootstrap_group=ON 的伺服器執行啟動,才能變更通訊堆疊,因為所有成員都必須關閉。

  7. 現在,成員使用新的通訊堆疊相互連線。任何 group_replication_communication_stack 設定為 (或在 XCom 的情況下預設為) 先前通訊堆疊的伺服器,都無法再加入群組。請務必注意,因為群組複寫甚至看不到加入嘗試,所以不會檢查並拒絕加入的成員,並顯示錯誤訊息。相反地,當先前的通訊堆疊放棄嘗試與新的通訊堆疊聯繫時,加入嘗試會無訊息地失敗。