下載本手冊
PDF (US Ltr) - 2.3Mb
PDF (A4) - 2.3Mb


MySQL Shell 9.0  /  ...  /  建立 InnoDB 叢集

7.4.3 建立 InnoDB 叢集

準備好執行個體後,使用 dba.createCluster() 函式來建立叢集,並使用 MySQL Shell 連接的執行個體作為叢集的種子執行個體。種子執行個體會複寫到您新增至叢集的其他執行個體,使其成為種子執行個體的複本。在此程序中,ic-1 執行個體會用作種子。當您發出 dba.createCluster(name) 時,MySQL Shell 會針對連線至 MySQL Shell 目前全域工作階段的伺服器執行個體建立傳統 MySQL 通訊協定工作階段。例如,若要建立名為 testCluster 的叢集,並將傳回的叢集指派給名為 cluster 的變數

mysql-js> var cluster = dba.createCluster('testCluster')
Validating instance at icadmin@ic-1:3306...
This instance reports its own address as ic-1
Instance configuration is suitable.
Creating InnoDB cluster 'testCluster' on 'icadmin@ic-1:3306'...
Adding Seed Instance...
Cluster successfully created. Use Cluster.addInstance() to add MySQL instances.
At least 3 instances are needed for the cluster to be able to withstand up to
one server failure.
注意

叢集的名稱必須為非空值,且長度不得超過 63 個字元。它只能以英數字元或 _ (底線) 開頭,且只能包含英數字元、_ (底線)、. (句點) 或 - (連字號) 字元。

將傳回的叢集指派給變數的這種模式可讓您接著使用叢集物件的方法對叢集執行進一步的作業。傳回的叢集物件會使用新的工作階段,獨立於 MySQL Shell 的全域工作階段。這可確保如果您變更 MySQL Shell 全域工作階段,叢集物件會維持其與執行個體的工作階段。

若要能夠管理叢集,您必須確保您擁有具備必要權限的合適用戶。建議的方法是建立管理使用者。如果您在設定執行個體時未建立管理使用者,請使用 Cluster.setupAdminAccount() 作業。例如,若要建立名為 icadmin 的使用者,讓該使用者可以管理指派給變數 cluster 的 InnoDB 叢集,請發出

mysql-js> cluster.setupAdminAccount("icadmin")

如需有關 InnoDB 叢集管理員帳戶的詳細資訊,請參閱手動設定 InnoDB 叢集管理員帳戶

當您執行 dba.createCluster(),以及當您執行 Cluster.addInstance(),將其他伺服器執行個體新增至 InnoDB 叢集時,下列錯誤會記錄到 MySQL 伺服器執行個體的錯誤記錄檔中。這些訊息是無害的,而且與 AdminAPI 啟動群組複寫的方式相關

2020-02-10T10:53:43.727246Z 12 [ERROR] [MY-011685] [Repl] Plugin
group_replication reported: 'The group name option is mandatory'
2020-02-10T10:53:43.727292Z 12 [ERROR] [MY-011660] [Repl] Plugin
group_replication reported: 'Unable to start Group Replication on boot'
注意

如果您遇到與無法存取中繼資料相關的錯誤,您可能已設定迴路網路介面。為了正確使用 InnoDB 叢集,請停用迴路介面。

若要檢查叢集是否已建立,請使用叢集執行個體的 status() 函式。請參閱使用 Cluster.status() 檢查叢集的狀態

提示

一旦伺服器執行個體屬於叢集,請務必僅使用 MySQL Shell 和 AdminAPI 管理它們。不支援在執行個體新增至叢集之後,嘗試手動變更執行個體上的群組複寫設定。同樣地,在執行個體使用 AdminAPI 設定之後,也不支援修改對 InnoDB 叢集至關重要的伺服器變數,例如 server_uuid

當您使用 MySQL Shell 建立叢集時,您可以設定執行個體從叢集中移除之前要等待的時間長度,例如在執行個體無法連線時。將 expelTimeout 選項傳遞至 dba.createCluster() 作業,以設定種子執行個體上的 group_replication_member_expel_timeout 變數。expelTimeout 選項可以採用 0 到 3600 範圍內的整數值。所有執行 MySQL 伺服器 8.0.13 和更新版本的執行個體,只要新增至已設定 expelTimeout 的叢集,都會自動設定為與種子執行個體上設定的 expelTimeout 值相同。

如需您可以傳遞至 dba.createCluster() 的其他選項的相關資訊,請參閱第 7.9 節〈修改或解散 InnoDB 叢集〉

可以使用 dba.createCluster() 啟用或停用 group_replication_paxos_single_leader

注意

這只能由 MySQL Shell 在 MySQL Server 8.0.31 或更新版本上設定,因為 MySQL Shell 需要 replication_group_communication_information 資料表中 WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE 所提供的資訊,該資訊是在 MySQL 8.0.31 中引入的。

InnoDB 叢集 replicationAllowedHost

當您建立叢集時,如果您有安全性需求,即 AdminAPI 自動建立的所有帳戶都必須具有嚴格的驗證需求,您可以設定 replicationAllowedHost 叢集設定選項的值。replicationAllowedHost 選項表示所有自動建立的帳戶只能使用嚴格的子網路式篩選從允許的主機連線。先前,預設情況下,InnoDB 叢集建立的內部使用者帳戶可從任何位置存取。

replicationAllowedHost 選項可以採用字串值。例如,若要建立名為 testCluster 的叢集,並將 replicationAllowedHost 選項設定為 192.0.2.0/24,請發出

mysql-js> dba.createCluster('testCluster', {replicationAllowedHost:'192.0.2.0/24'})

設定通訊堆疊

InnoDB 叢集支援在 MySQL 8.0.27 中針對群組複寫引入的 MySQL 通訊堆疊。

選項 communicationStack: XCOM|MYSQL 會設定群組複寫系統變數 group_replication_communication_stack 的值。

例如

       mysql-js> dba.createCluster("testCluster", {communicationStack: "xcom"})

MYSQL 通訊堆疊是為 MySQL 8.0.27 或更高版本建立的所有新叢集的預設值。

如需詳細資訊,請參閱第 7.5.9 節〈設定群組複寫通訊堆疊〉