MySQL Shell 9.0  /  MySQL InnoDB ReplicaSet  /  建立 InnoDB ReplicaSet

9.3 建立 InnoDB ReplicaSet

在您設定好執行個體後,請完成下列步驟來建立 InnoDB ReplicaSet

  1. 連線至執行個體並使用 dba.createReplicaSet() 來建立使用 MySQL 非同步複寫(而不是 InnoDB Cluster 使用的 MySQL Group Replication)的管理 ReplicaSet。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 個字元。它只能以英數字元或 _ (底線) 開頭,而且只能包含英數字元、_ (底線)、. (句點) 或 - (連字號) 字元。

  2. 使用傳回的 ReplicaSet 物件來驗證作業是否成功。例如,這會提供 ReplicaSet.status() 作業,其中會顯示有關 ReplicaSet 的資訊。傳回的 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。

ReplicaSet 加密和驗證

複本可以驗證來源的身分,並使用用戶端 SSL 憑證進行驗證。下列選項已新增至 dba.createReplicaSet

  • memberAuthType:定義內部複寫帳戶使用的驗證類型。此選項接受下列其中一個值

    • PASSWORD:帳戶僅使用密碼進行驗證。

    • CERT_ISSUER:帳戶使用用戶端憑證進行驗證,該憑證必須與預期的簽發者相符。此值相當於 VERIFY_CA

    • CERT_SUBJECT:帳戶使用用戶端憑證進行驗證,該憑證必須與預期的簽發者和主旨相符。此值相當於 VERIFY_IDENTITY

    • CERT_ISSUER_PASSWORD:帳戶使用 PASSWORDCERT_ISSUER 值的組合進行驗證。

    • CERT_SUBJECT_PASSWORD:帳戶使用 PASSWORDCERT_SUBJECT 值的組合進行驗證。

  • certIssuer:如果 memberAuthType 包含 CERT_ISSUERCERT_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 replicationAllowedHost

建立 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')