文件首頁
MySQL Shell 9.0
下載本手冊
PDF (美式信紙) - 2.3Mb
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:使用分散式狀態復原,套用從另一個叢集成員複製的遺失交易。已停用 Clone。

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

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

在下列範例中,會新增新的讀取複本 host5:4113,標籤為 RReplica5,並使用次要執行個體 host2:4101 做為資料來源。host2: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'.

憑證式驗證

讀取複本的憑證式驗證以下列方式定義

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

  • 叢集的 memberSslMode 值用於設定唯讀副本的複製通道的驗證類型。

  • 在更新拓樸之前,此方法會使用已設定的 memberSslMode 執行連線檢查。

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

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