MySQL Shell 8.4  /  MySQL InnoDB ReplicaSet  /  建立 InnoDB ReplicaSet

9.3 建立 InnoDB ReplicaSet

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

  1. 連線至執行個體並使用 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 個字元。它只能以英數字元或 _ (底線) 開頭,並且只能包含英數字元、_ (底線)、.(句點) 或 - (連字號) 字元。

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