在您設定好執行個體後,請完成以下步驟以建立 InnoDB ReplicaSet
-
連線至執行個體並使用
dba.createReplicaSet()
來建立受管理的 ReplicaSet,該 ReplicaSet 使用 MySQL 非同步複寫,而不是 InnoDB Cluster 使用的 MySQL Group Replication。MySQL Shell 連線到的 MySQL 執行個體會用作 ReplicaSet 的初始主要執行個體。dba.createReplicaSet()
操作會執行多項檢查,以確保執行個體狀態和設定與受管理的 ReplicaSet 相容,如果相容,則會在執行個體上初始化中繼資料結構描述。如果成功建立 ReplicaSet,則會傳回
ReplicaSet
物件。因此,最佳實務是將傳回的ReplicaSet
指派給變數。這可讓您使用 ReplicaSet,例如呼叫<ReplicaSet>status()
操作。若要在執行個體rs-1
上建立名為example
的 ReplicaSet,並將其指派給rs
變數,請發出mysql-js> \connect root@rs-1:3306 ... mysql-js> var rs = dba.createReplicaSet("example") A new replicaset with instance 'rs-1:3306' will be created. * Checking MySQL instance at rs-1:3306 This instance reports its own address as rs-1:3306 rs-1:3306: Instance configuration is suitable. * Updating metadata... ReplicaSet object successfully created for rs-1:3306. Use rs.addInstance() to add more asynchronously replicated instances to this replicaset and rs.status() to check its status.
注意ReplicaSet 的名稱必須為非空白,且長度不得超過 63 個字元。它只能以英數字元或 _ (底線) 開頭,並且只能包含英數字元、_ (底線)、.(句點) 或 - (連字號) 字元。
-
使用傳回的
ReplicaSet
物件來確認操作是否成功。例如,這提供
操作,可顯示有關 ReplicaSet 的資訊。傳回的ReplicaSet
.status()ReplicaSet
已指派給變數rs
,因此請發出mysql-js> rs.status() { "replicaSet": { "name": "example", "primary": "rs-1:3306", "status": "AVAILABLE", "statusText": "All instances available.", "topology": { "rs-1:3306": { "address": "rs-1:3306", "instanceRole": "PRIMARY", "mode": "R/W", "status": "ONLINE" } }, "type": "ASYNC" } }
此輸出顯示已建立名為
example
的 ReplicaSet,且主要執行個體為rs-1
。目前只有一個執行個體,而下一個工作是將更多執行個體新增至 ReplicaSet。
複本可以驗證來源的身分,並使用用戶端 SSL 憑證進行驗證。以下選項已新增至 dba.createReplicaSet
-
memberAuthType
:定義用於內部複寫帳戶的驗證類型。此選項會採用下列其中一個值PASSWORD
:帳戶僅使用密碼進行驗證。CERT_ISSUER
:帳戶使用用戶端憑證進行驗證,該憑證必須符合預期的簽發者。此值相當於VERIFY_CA
。CERT_SUBJECT
:帳戶使用用戶端憑證進行驗證,該憑證必須符合預期的簽發者和主旨。此值相當於VERIFY_IDENTITY
。CERT_ISSUER_PASSWORD
:帳戶使用PASSWORD
和CERT_ISSUER
值的組合進行驗證。CERT_SUBJECT_PASSWORD
:帳戶使用PASSWORD
和CERT_SUBJECT
值的組合進行驗證。
certIssuer
:如果memberAuthType
包含CERT_ISSUER
或CERT_SUBJECT
,則定義驗證所需的憑證簽發者。certSubject
:定義執行個體的憑證主旨。如果memberAuthType
包含CERT_SUBJECT
,則為必要項目。-
replicationSslMode
:定義 replicaSet 中複寫通道的驗證類型。此選項會採用下列其中一個值DISABLED
:複寫通道已停用 TLS 加密。REQUIRED
:複寫通道已啟用 TLS 加密。VERIFY_CA
:與 REQUIRED 相同,但另外會根據已設定的憑證授權單位 (CA) 憑證驗證對等伺服器 TLS 憑證。VERIFY_IDENTITY
:與 VERIFY_CA 相同,但另外會驗證對等伺服器憑證是否符合嘗試連線的主機。AUTO
:如果執行個體支援,則會啟用 TLS 加密。如果執行個體不支援 TLS,則會停用。
例如
mysql-js> myreplicaset = dba.createReplicaSet("replicaSet1",
{ "replicationSslMode": "VERIFY_IDENTITY", "memberAuthType":"CERT_SUBJECT",
"certIssuer":"/CN=MyCertAuthority", "certSubject": "/CN=mysql-5.local"});
所有新的複寫通道都會建立並啟用 SSL。
建立 InnoDB ReplicaSet 時,如果您有安全性需求,希望 AdminAPI 自動建立的所有帳戶都具有嚴格的驗證需求,您可以設定 ReplicaSet 的 replicationAllowedHost
設定選項值。replicationAllowedHost
MySQL Shell 選項可讓您將 ReplicaSet 的內部管理複寫帳戶設定為嚴格的子網路型篩選器,而不是預設的萬用字元值 %
。replicationAllowedHost
選項可以採用字串值。例如,若要將 replicationAllowedHost
設定為 192.0.2.0/24
,請發出
mysql-js> var rs = dba.createReplicaSet('example', {replicationAllowedHost:'192.0.2.0/24'})
A new replicaset with instance 'rs-1:3306' will be created.
* Checking MySQL instance at rs-1:3306
This instance reports its own address as rs-1:3306
rs-1:3306: Instance configuration is suitable.
* Updating metadata...
ReplicaSet object successfully created for rs-1:3306.
Use rs.addInstance() to add more asynchronously replicated instances to this replicaset
and rs.status() to check its status.
建立 InnoDB ReplicaSet 後,可以透過 setOption
設定選項,透過發出下列指令來設定變數 replicationAllowedHost
來修改:
mysql-js> rs.setOption('replicationAllowedHost', '192.0.2.0/24')