準備好執行個體後,使用 dba.createCluster()
函數建立叢集,使用 MySQL Shell 連接的執行個體作為叢集的種子執行個體。種子執行個體會複寫到您新增至叢集的其他執行個體,使其成為種子執行個體的複本。在此程序中,ic-1 執行個體會用作種子。當您發出 dba.createCluster(
時,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 全域工作階段,叢集物件會維持其與執行個體的工作階段。
為了能夠管理叢集,您必須確保您有具有必要權限的適當使用者。建議的方法是建立管理使用者。如果您在設定執行個體時未建立管理使用者,請使用
作業。例如,若要建立名為 叢集
.setupAdminAccount()icadmin
的使用者,其可以管理指派給變數 cluster
的 InnoDB 叢集,請發出
mysql-js> cluster.setupAdminAccount("icadmin")
如需有關 InnoDB 叢集管理員帳戶的詳細資訊,請參閱手動設定 InnoDB 叢集管理員帳戶。
當您執行 dba.createCluster()
時,以及當您透過執行
將其他伺服器執行個體新增至 InnoDB 叢集時,下列錯誤會記錄到 MySQL 伺服器執行個體的錯誤記錄檔中。這些訊息是無害的,而且與 AdminAPI 啟動群組複寫的方式相關叢集
.addInstance()
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()
函數。請參閱使用
檢查叢集狀態。叢集
.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 中引入的。
當您建立叢集時,如果您有安全要求,要求 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 節「設定群組複寫通訊堆疊」。