文件首頁
MySQL Shell 8.4
下載本手冊
PDF (US Ltr) - 2.2Mb
PDF (A4) - 2.3Mb


7.11.2 建立讀取副本

使用 addReplicaInstance() 建立讀取副本

Cluster.addReplicaInstance(instance, [options])

範例

本節和後續章節中的範例假設有一個簡單的三個實例叢集,一個主要實例和兩個次要實例。

  • host1:4100:主要實例。

  • host2:4101:次要實例。

  • host3:4102:次要實例。

預設讀取副本

本節說明將讀取副本新增至叢集。依預設,讀取副本會從主要實例複寫。

下列範例會將實例 host4:4110 新增至叢集,標籤為 RReplica1

Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1'})
注意

標籤在叢集中必須是唯一的,而且只能包含字母數字、_(底線)、.(句點)、-(連字號)或 :(冒號)字元。

為讀取副本定義複寫來源

addReplicaInstancereplicationSources 選項可讓您為讀取副本指定一個或多個偏好的複寫來源。此選項接受下列值

  • primary:將叢集主要實例定義為複寫來源。在發生容錯移轉時,讀取副本會等到新的主要實例升級之後,再以新的主要實例為來源繼續複寫。

  • secondary:將其中一個叢集次要實例定義為複寫來源。選取由群組複製管理。除非成為單一成員叢集,否則來源永遠是叢集的次要成員。在這種情況下,讀取副本會使用唯一的其他成員作為來源。

  • hostname:port:將特定的叢集成員(主要或次要)定義為複寫來源。

  • 以逗號分隔的主機清單:將叢集成員(主要或次要)的加權清單定義為潛在的複寫來源。清單中的第一個實例具有最高的優先順序;當讀取副本的複寫通道啟用時,它是嘗試的第一個連線。如果發生容錯移轉或連線嘗試失敗,則會連線到其他清單成員。

下列範例將次要實例 host2:4101 定義為來源

Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: ['host2:4101']})

也可以使用 host:port 格式提供以逗號分隔的主機清單來指定數個複寫來源。清單是加權的,第一個項目具有最大的權重。這可讓您定義來源容錯移轉清單。如果第一個定義的來源失敗,讀取副本會嘗試使用第二個定義的來源來還原複寫,依此類推。

下列範例將次要實例 host2:4101 定義為第一個來源,並將 host3:4102 定義為下一個來源

Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: ['host2:4101','host3:4102']]})

您可以使用相同的選項來定義僅主要或僅次要來源,而無需定義個別實例。例如

Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: 'secondary']})

將複寫來源定義為僅次要來源。若要將複寫來源定義為僅主要來源,請使用 replicationSources: 'primary'

依預設,來源清單由 MySQL 群組複寫管理,其預設為主要來源。

您可以使用 dryRun 選項來測試此操作。包含此選項並將其設定為 true 會執行命令,但不會進行任何變更。這可讓您測試變更。

注意

也可以使用 cluster.setInstanceOption() 方法來設定讀取副本的 replicationSourceslabel

如果目標是讀取副本,cluster.setInstanceOption() 方法接受的唯一選項是 tags(僅限保留標籤)、replicationSourceslabel

為讀取副本定義復原方法

recoveryMethod 定義在佈建期間如何取得讀取副本的資料。

  • clone:用於在使用分散式復原開始之前,以另一個叢集成員的完整快照完全取代目標實例的狀態。需要 MySQL 8.0.17 或更新版本。

    如果定義 cloneDonor,則會使用定義的實例作為來源。

    如果 replicationSources 設定為 parimarysecondary,則會使用叢集主要實例作為來源。

    如果 replicationSources 包含一個或多個具名的叢集成員,則會使用清單中的第一個作為來源(如果可用)。如果第一個不可用,則會使用第二個,依此類推。

  • incremental:使用分散式狀態復原來套用從另一個叢集成員複製的遺失交易。停用複製。

  • auto:預設值。群組複製會根據目標伺服器支援的項目和 group_replication_clone_threshold 值,選取是否擷取完整快照。如果無法安全地判斷安全的執行方式,則會顯示提示。如果停用互動,則會取消操作。

除了 recoveryMethod: clone 選項之外,addReplicaInstance 還提供了 cloneDonor 選項,可讓您定義要複製到新讀取副本的特定實例。如果未定義 cloneDonor,但是 clone 是選定的復原方法,不論是明確指定 clone,還是 auto 選取複製作為資料佈建的最佳方法,叢集都會選取最佳的複製實例。所使用的程序與 Cluster.addInstance() 使用的程序相同。如需詳細資訊,請參閱 第 7.4.6.1 節,「使用採用 MySQL Clone 的叢集」

在下列範例中,使用 host2:4101 (次要實例) 作為資料來源,將新的讀取副本 host5:4113 新增到標籤 RReplica5host2:4101 的資料會複製到新的讀取副本。

JS> cluster.addReplicaInstance('host5:4113',{label: 'RReplica5', recoveryMethod: "clone", cloneDonor: "host2:4101"})

成功的命令會傳回類似下列的資訊

Setting up 'host5:4113' as a Read Replica of Cluster 'myCluster'.

Validating instance configuration at host5:4113...

This instance reports its own address as host5:4113

Instance configuration is suitable.
* Checking transaction state of the instance...


Clone based recovery selected through the recoveryMethod option

* Waiting for the donor to synchronize with PRIMARY...
** Transactions replicated  ############################################################  100%


Monitoring Clone based state recovery of the new member. Press ^C to abort the operation.
Clone based state recovery is now in progress.

NOTE: A server restart is expected to happen as part of the clone process. If the
server does not support the RESTART command or does not come back after a
while, you may need to manually start it back.

* Waiting for clone to finish...
NOTE: host5:4113 is being cloned from host2:4101
** Stage DROP DATA: Completed
** Clone Transfer
    FILE COPY  ############################################################  100%  Completed
    PAGE COPY  ############################################################  100%  Completed
    REDO COPY  ============================================================    0%  In Progress

NOTE: host5:4113 is shutting down...

* Waiting for server restart... ready
* host5:4113 has restarted, waiting for clone to finish...
** Stage RESTART: Completed
* Clone process has finished: 8.64 GB transferred in 11 sec (785.30 MB/s)

* Configuring Read-Replica managed replication channel...
** Changing replication source of host5:4113 to host1:4100

* Waiting for Read-Replica 'host5:4113' to synchronize with Cluster...
** Transactions replicated  ############################################################  100%


'host5:4113' successfully added as a Read-Replica of Cluster 'myCluster'.

以憑證為基礎的驗證

讀取副本的以憑證為基礎的驗證定義方式如下

  • cluster.addReplicaInstance()certSubject 選項:指定實例的憑證主體,如果叢集的 memberAuthTypeCERT_SUBJECTCERT_SUBJECT_PASSWORD,則會使用此選項。

  • 叢集的 memberSslMode 值用於配置讀取副本複寫通道的驗證類型。

  • 此方法會使用配置的 memberSslMode 執行連線能力檢查,然後再更新拓撲。

  • 如果叢集的 memberAuthTypeCERT_SUBJECTCERT_SUBJECT_PASSWORD,則此方法會驗證伺服器的憑證。

cluster.options() 已更新為在 topology 陣列中傳回 certSubject