InnoDB ClusterSet 部署的基礎是現有的 MySQL 8.0.27 或更高版本的 InnoDB Cluster,以及一些獨立的 MySQL 伺服器執行個體,這些執行個體可以組成複寫叢集,為此主要叢集提供災害容錯。如果您想試用 InnoDB ClusterSet,可以使用 MySQL Shell 在本機上設定沙箱部署。您需要安裝 MySQL Server 8.0.27 或更高版本和 MySQL Router 8.0.27 或更高版本。使用 MySQL Shell 中的 AdminAPI 命令,您可以建立沙箱 MySQL 伺服器執行個體,使用其中一些執行個體設定 InnoDB Cluster,然後按照本節中的說明,使用其他執行個體作為複寫叢集來設定 InnoDB ClusterSet 部署。有關部署和管理沙箱執行個體的說明,請參閱第 6.8 節,「AdminAPI MySQL 沙箱」。
建議您始終使用可用的最新版本 MySQL Shell、MySQL Router 和 MySQL Server。最新版本的 MySQL Shell 可與任何 GA 版本的 MySQL 8.0 或更高版本搭配使用。
若要設定 InnoDB ClusterSet 的生產部署,請確保您已安裝下列元件
設定 InnoDB ClusterSet 部署需要 MySQL Server 8.0.27 或更高版本、MySQL Shell 8.0.27 或更高版本和 MySQL Router 8.0.27 或更高版本。這些是 AdminAPI 所需的軟體元件。請參閱第 6.2 節,「安裝 AdminAPI 軟體元件」。
始終使用可用的最新版本 MySQL Shell 和 MySQL Router,並確保其版本與 MySQL Server 版本相同或更高。這兩種產品都可以管理較舊的 MySQL Server 版本,但較舊的版本無法管理較新 MySQL Server 版本中的功能。
作為主要叢集的現有 InnoDB Cluster。這是 InnoDB ClusterSet 部署提供災害容錯的叢集。Group Replication 群組可以採用為 InnoDB Cluster。有關設定 InnoDB Cluster 或採用 Group Replication 群組的說明,請參閱第 7.4 節,「部署生產 InnoDB Cluster」。
作為主要叢集的 InnoDB Cluster 必須符合以下需求
叢集不得已是 InnoDB ClusterSet 部署的一部分。一個 InnoDB Cluster 只能參與一個 InnoDB ClusterSet 部署。
叢集中的所有成員伺服器執行個體都必須是 MySQL 8.0.27 或更高版本。
InnoDB Cluster 中繼資料版本必須是 2.1.0 或更高版本。當您對叢集執行任何操作 (例如
dba.getCluster()
命令) 時,如果叢集的中繼資料需要更新,AdminAPI 會發出警告。您可以透過在 MySQL Shell 8.0.27 或更高版本中發出dba.upgradeMetadata()
命令,將中繼資料更新為適合 InnoDB ClusterSet 操作的版本。請注意,在您升級叢集的中繼資料後,較舊的 MySQL Shell 版本無法管理它。如需更多資訊,請參閱第 6.11 節,「升級中繼資料結構描述」。叢集必須處於單一主要模式。InnoDB Cluster 可以處於單一主要模式或多個主要模式,但 InnoDB ClusterSet 不支援多個主要模式。您可以在 MySQL Shell 中使用
命令,將處於多個主要模式的叢集轉換為單一主要模式,並選擇一個執行個體作為主要伺服器。cluster
.switchToSinglePrimaryMode()-
對於 MySQL Server 8.0.27 到 8.2.0 版的執行個體,對於屬於 InnoDB ClusterSet 的 InnoDB Cluster,
group_replication_view_change_uuid
系統變數必須在叢集中的所有成員伺服器上設定為相同的值,以便為檢視變更事件提供替代 UUID。從 MySQL 8.0.27 開始,使用dba.createCluster()
命令建立的 InnoDB Cluster 會在所有成員伺服器上產生並設定該系統變數的值。在 MySQL 8.0.27 之前建立的 InnoDB Cluster 可能沒有設定系統變數,但 InnoDB ClusterSet 建立程序會檢查此問題,如果缺少該變數,則會發出警告並失敗。注意執行 MySQL Server 8.3.0 或更高版本的 InnoDB Cluster 不需要此項。
可以使用
命令,在 InnoDB Cluster 中的所有成員伺服器上產生並設定Cluster
.rescan()group_replication_view_change_uuid
的值。此命令會傳回警告訊息,讓您知道必須為系統變數設定值,或者您可以啟用updateViewChangeUuid
選項,以在掃描期間自動產生和設定值。當您重新啟動叢集後,可以重試 InnoDB ClusterSet 建立程序。 任何成員伺服器上都不得有來自群組外部伺服器的任何輸入複寫通道。群組複寫自動建立的通道 (
group_replication_applier
和group_replication_recovery
) 是允許的。-
您需要知道叢集的 InnoDB Cluster 伺服器組態帳戶使用者名稱和密碼 (請參閱第 8.3 節,「InnoDB ClusterSet 的使用者帳戶」)。這是使用 InnoDB Cluster 中成員伺服器上的
dba.configureInstance
設定的帳戶。您需要在將形成複寫叢集的 MySQL 伺服器執行個體上建立此帳戶,並使用它來設定這些執行個體。注意您無法使用 InnoDB Cluster 管理員帳戶 (使用
設定) 來設定複寫叢集的獨立 MySQL 伺服器執行個體。cluster
.setupAdminAccount()
在獨立執行個體上不可用,如果您使用cluster
.setupAdminAccount()dba.configureInstance
或手動在獨立執行個體上建立其中一個帳戶,則該帳戶隨後會從主要叢集複寫,導致複寫停止並出現錯誤。 在您建立 InnoDB ClusterSet 部署時,InnoDB Cluster 必須處於線上且狀況良好,並且可以使用 MySQL Shell 存取其主要成員伺服器。
一些您可以組成一個或多個複寫叢集的獨立 MySQL 伺服器執行個體。建議每個複寫叢集中至少有三個成員伺服器以實現容錯,儘管 InnoDB ClusterSet 部署可以包含由單一伺服器執行個體組成的複寫叢集。在用於災害容錯的生產部署中,每個複寫叢集都會位於其他位置,例如不同的資料中心。
您在複寫叢集中使用的每個 MySQL 伺服器執行個體都必須符合以下需求
伺服器不得已是 InnoDB ClusterSet 部署、InnoDB ClusterSet 或 InnoDB ReplicaSet 的一部分。
您不需要伺服器上的資料。如果伺服器先前已用於處理交易,則在將其設為複寫叢集的成員時,將覆寫資料 (除非交易剛好是主要叢集上交易的子集)。
-
伺服器不是目前執行中的 Group Replication 群組的一部分 (即使個別伺服器已離開群組)。您不能採用現有的 Group Replication 群組或目前或前成員作為複寫叢集。如果您想使用目前在複寫群組中的伺服器執行個體,請在群組的所有成員上發出
STOP GROUP_REPLICATION
,以便群組完全離線。然後可以使用 AdminAPI 將個別伺服器執行個體設為複寫叢集。重要事項在將以前的 Group Replication 群組成員用作 InnoDB ClusterSet 複寫叢集的成員時,請謹慎行事,特別是如果您對 Group Replication 組態選項進行了許多變更,或者群組是在早期版本中建立的,並且您根據該版本中的情況進行了組態變更。
InnoDB ClusterSet 複本叢集的建立程序會覆寫任何現有的 Group Replication 持久化組態選項,您在指令中為這些選項指定了新的設定。它也會總是覆寫以下系統變數,即使您沒有在指令中指定它們:
group_replication_group_name
、group_replication_group_seeds
、group_replication_local_address
、group_replication_view_change_uuid
(僅限 8.0.27 至 8.2.0 版本),以及group_replication_enforce_update_everywhere_checks
。然而,您已變更的其他 Group Replication 組態選項則會保留原樣。這些自訂設定可能會干擾 InnoDB ClusterSet 的執行或效能,InnoDB ClusterSet 期望 MySQL 8.0.27 的預設值用於在 InnoDB ClusterSet 複本叢集建立過程中未變更的 Group Replication 組態選項。如果您確實想要使用已設定的 Group Replication 伺服器,請檢查並移除任何自訂設定(如果可能),特別是檢查
group_replication_single_primary_mode
系統變數是否設定為預設值ON
。在此情況下,對於先前為 Group Replication 群組成員的伺服器而言,最安全的選項是重新安裝 MySQL Server,而不是將安裝升級至 MySQL 8.0.27。 伺服器必須為 MySQL 8.0.27 或更高版本。如果您想要透過複製的方式為複本叢集佈建其他成員伺服器,則所有伺服器都必須是相同的發行版本,且作業系統也必須相同。
伺服器必須具有伺服器 ID(
server_id
系統變數)和伺服器 UUID(server_uuid
系統變數),它們在整個 InnoDB ClusterSet 中都必須是唯一的,包括任何離線或無法連線的成員伺服器。伺服器上不得設定任何 inbound 複寫通道。只允許 Group Replication 通道(
group_replication_applier
和group_replication_recovery
)。伺服器可以連線至 InnoDB ClusterSet 中的主要叢集,而主要叢集也可以連線至該伺服器。
在您建立 InnoDB ClusterSet 部署時,伺服器必須處於線上且運作正常的狀態,並且可以使用 MySQL Shell 連線。
必要的用戶帳戶憑證、InnoDB ClusterSet 中繼資料和 Group Replication 組態將會在 InnoDB ClusterSet 複本叢集建立過程中進行設定。
一個或多個 MySQL Router 執行個體,用於將用戶端應用程式流量路由至 InnoDB ClusterSet 部署中適當的叢集。建議將 MySQL Router 部署在與用戶端應用程式相同的主機上。
如果您使用現有的 InnoDB 叢集作為 InnoDB ClusterSet 部署中的主要叢集,並且您已經針對該叢集引導了 MySQL Router,請再次使用 --force
選項針對 InnoDB ClusterSet 進行引導,然後停止並重新啟動 MySQL Router。MySQL Router 執行個體的靜態組態檔案中的設定需要針對 InnoDB ClusterSet 進行更新。請按照 第 8.5 節,「將 MySQL Router 與 InnoDB ClusterSet 整合」中所述的程序進行操作。