MySQL Shell 9.0  /  MySQL InnoDB ClusterSet  /  InnoDB ClusterSet 需求

8.1 InnoDB ClusterSet 需求

InnoDB ClusterSet 部署的基礎是 MySQL 8.0.27 或更高版本中現有的 InnoDB 叢集,以及一些可以形成複本叢集的獨立 MySQL 伺服器實例,為此主要叢集提供容錯能力。如果您想嘗試 InnoDB ClusterSet,可以使用 MySQL Shell 在本機上設定沙箱部署。您需要安裝 MySQL Server 8.0.27 或更高版本和 MySQL Router 8.0.27 或更高版本。使用 MySQL Shell 中的 AdminAPI 命令,您可以建立沙箱 MySQL 伺服器實例,使用其中一些建立 InnoDB 叢集,然後依照本節中的指示,使用其他實例作為複本叢集來設定 InnoDB ClusterSet 部署。有關部署和管理沙箱實例的說明,請參閱第 6.8 節,「AdminAPI MySQL 沙箱」

重要事項

建議您一律使用最新版本的 MySQL Shell、MySQL Router 和 MySQL Server。最新版本的 MySQL Shell 可以與任何 GA 版本的 MySQL 8.0 或更高版本搭配使用。

若要設定 InnoDB ClusterSet 的生產部署,請確保您已準備好下列元件

軟體元件

需要 MySQL Server 8.0.27 或更高版本、MySQL Shell 8.0.27 或更高版本和 MySQL Router 8.0.27 或更高版本,才能設定 InnoDB ClusterSet 部署。這些是 AdminAPI 所需的軟體元件。請參閱第 6.2 節,「安裝 AdminAPI 軟體元件」

一律使用可用的最新版本 MySQL Shell 和 MySQL Router,並確保其版本與 MySQL Server 版本相同或更高。這兩種產品都可以管理較舊的 MySQL Server 版本,但較舊的版本無法管理較新 MySQL Server 版本中的功能。

InnoDB 叢集

現有的 InnoDB 叢集,將作為主要叢集。這是 InnoDB ClusterSet 部署提供容錯功能的叢集。群組複寫群組可以採用為 InnoDB 叢集。有關設定 InnoDB 叢集或採用群組複寫群組的說明,請參閱第 7.4 節,「部署生產 InnoDB 叢集」

將作為主要叢集的 InnoDB 叢集必須符合下列需求

  • 叢集不得已是 InnoDB ClusterSet 部署的一部分。一個 InnoDB 叢集只能參與一個 InnoDB ClusterSet 部署。

  • 叢集中的所有成員伺服器實例都必須為 MySQL 8.0.27 或更高版本。

  • InnoDB 叢集元資料版本必須為 2.1.0 或更高版本。當您在叢集上執行任何操作 (例如 dba.getCluster() 命令) 時,如果叢集的元資料需要更新,AdminAPI 會警告您。您可以在 MySQL Shell 8.0.27 或更高版本中執行 dba.upgradeMetadata() 命令,將元資料更新為適合 InnoDB ClusterSet 作業的版本。請注意,升級叢集的元資料後,較舊的 MySQL Shell 版本無法管理該元資料。如需詳細資訊,請參閱第 6.11 節,「升級元資料結構描述」

  • 叢集必須處於單一主要模式。InnoDB 叢集可以處於單一主要或多重主要模式,但 InnoDB ClusterSet 不支援多重主要模式。您可以使用 MySQL Shell 中的 cluster.switchToSinglePrimaryMode() 命令,將多重主要模式的叢集轉換為單一主要模式,並選擇一個實例作為主要伺服器。

  • 對於版本從 8.0.27 到 8.2.0 的 MySQL 伺服器實例,對於屬於 InnoDB ClusterSet 的 InnoDB 叢集,group_replication_view_change_uuid 系統變數必須在叢集中的所有成員伺服器上設定為相同的值,以為檢視變更事件提供替代 UUID。從 MySQL 8.0.27 開始,使用 dba.createCluster() 命令建立的 InnoDB 叢集,會在所有成員伺服器上產生並設定系統變數的值。在 MySQL 8.0.27 之前建立的 InnoDB 叢集可能未設定系統變數,但如果沒有該系統變數,InnoDB ClusterSet 建立程序會檢查此情況並失敗並發出警告。

    注意

    執行 MySQL Server 8.3.0 或更高版本的 InnoDB 叢集不需要此設定。

    Cluster.rescan() 命令可用於在 InnoDB 叢集中所有成員伺服器上產生和設定 group_replication_view_change_uuid 的值。該命令會傳回警告訊息,讓您知道必須為系統變數設定值,或者您可以啟用選項 updateViewChangeUuid,以便在掃描期間自動產生和設定值。重新啟動叢集後,您可以重試 InnoDB ClusterSet 建立程序。

  • 任何成員伺服器上都不得有來自群組外部伺服器的輸入複寫通道。群組複寫自動建立的通道 (group_replication_appliergroup_replication_recovery) 是允許的。

  • 您需要知道叢集的 InnoDB 叢集伺服器組態帳戶使用者名稱和密碼 (請參閱第 8.3 節,「InnoDB ClusterSet 的使用者帳戶」)。這是使用 dba.configureInstance 在 InnoDB 叢集中的成員伺服器上設定的帳戶。您需要在將形成複本叢集的 MySQL 伺服器實例上建立此帳戶,並使用它來設定這些實例。

    注意

    您無法使用 InnoDB 叢集管理員帳戶 (使用 cluster.setupAdminAccount() 設定) 來設定複本叢集的獨立 MySQL 伺服器實例。cluster.setupAdminAccount() 在獨立實例上不可用,如果您使用 dba.configureInstance 或手動在獨立實例上建立其中一個帳戶,它將隨後從主要叢集複寫,導致複寫停止並發生錯誤。

  • 在您建立 InnoDB ClusterSet 部署時,InnoDB 叢集必須在線上且狀態良好,而且必須可使用 MySQL Shell 存取其主要成員伺服器。

MySQL 伺服器實例

一些獨立的 MySQL 伺服器實例,您可以將其組成一個或多個複本叢集。建議每個複本叢集至少有三個成員伺服器以實現容錯,儘管 InnoDB ClusterSet 部署可以包含由單一伺服器實例組成的複本叢集。在生產部署中實現容錯時,每個複本叢集都將位於不同的位置,例如不同的資料中心。

您在複本叢集中使用的每個 MySQL 伺服器實例都必須符合下列需求

  • 伺服器不得已是 InnoDB ClusterSet 部署、InnoDB ClusterSet 或 InnoDB ReplicaSet 的一部分。

  • 您不需要伺服器上的資料。如果伺服器先前已用於處理交易,則在將其設為複本叢集的成員時,資料將會被覆寫 (除非交易恰好是主要叢集上的交易子集)。

  • 伺服器不得是目前執行中的群組複寫群組的一部分 (即使個別伺服器已離開群組)。您無法採用現有的群組複寫群組或其目前或前成員作為複本叢集。如果您想要使用目前位於複寫群組中的伺服器實例,請在群組的所有成員上執行 STOP GROUP_REPLICATION,以便群組完全離線。然後,可以使用 AdminAPI 將單獨的伺服器實例設為複本叢集。

    重要事項

    在將先前的群組複寫群組成員用作 InnoDB ClusterSet 複本叢集的成員時請務必謹慎,尤其是當您對群組複寫組態選項進行大量變更,或者如果群組是在較早版本中建立,並且您根據該版本中的情況進行了組態變更時。

    InnoDB ClusterSet 複本叢集的建立程序會覆寫任何現有的持續性群組複寫配置選項,若您在命令中指定了新的設定。它也會總是覆寫以下系統變數,即使您未在命令中指定它們:group_replication_group_namegroup_replication_group_seedsgroup_replication_local_addressgroup_replication_view_change_uuid(僅限 8.0.27 至 8.2.0 版本)和 group_replication_enforce_update_everywhere_checks。但是,您已變更的其他群組複寫配置選項會保持不變。這些自訂設定可能會干擾 InnoDB ClusterSet 的執行或效能,因為 InnoDB ClusterSet 預期在 InnoDB ClusterSet 複本叢集建立過程中未變更的群組複寫配置選項會使用 MySQL 8.0.27 的預設值。

    如果您確實想要使用已配置的群組複寫伺服器,請檢查並移除任何自訂設定(如果可能),尤其要檢查 group_replication_single_primary_mode 系統變數是否設定為預設值 ON。對於這種情況下的前群組複寫群組成員,最安全的選項是重新安裝 MySQL Server,而不是將安裝升級到 MySQL 8.0.27。

  • 伺服器必須為 MySQL 8.0.27 或更高版本。如果您想要透過複製來為複本叢集佈建更多成員伺服器,則所有伺服器必須是相同的發行版本,且在相同的作業系統上。

  • 伺服器必須具有伺服器 ID(server_id 系統變數)和伺服器 UUID(server_uuid 系統變數),這些 ID 和 UUID 在整個 InnoDB ClusterSet 中必須是唯一的,包括任何離線或無法連線的成員伺服器。

  • 伺服器上未配置任何輸入複寫通道。只允許群組複寫通道(group_replication_appliergroup_replication_recovery)。

  • 伺服器可以連線到 InnoDB ClusterSet 中的主要叢集,並且主要叢集可以連線到它。

  • 當您建立 InnoDB ClusterSet 部署時,伺服器必須在線上且狀況良好,並且可以使用 MySQL Shell 連線到它。

所需的用戶帳戶憑證、InnoDB ClusterSet metadata 和群組複寫配置將在 InnoDB ClusterSet 複本叢集建立過程中設定。

MySQL Router 執行個體

一個或多個 MySQL Router 執行個體,用於將用戶端應用程式流量路由到 InnoDB ClusterSet 部署中的適當叢集。建議將 MySQL Router 部署在與用戶端應用程式相同的主機上。

重要事項

如果您使用現有的 InnoDB Cluster 作為 InnoDB ClusterSet 部署中的主要叢集,並且您已針對該叢集啟動了 MySQL Router,請再次使用 --force 選項針對 InnoDB ClusterSet 啟動它,然後停止並重新啟動 MySQL Router。MySQL Router 執行個體之靜態組態檔案中的設定需要針對 InnoDB ClusterSet 進行更新。請依照第 8.5 節「整合 MySQL Router 與 InnoDB ClusterSet」中描述的程序來執行此操作。