使用 addReplicaInstance()
建立讀取副本
Cluster.addReplicaInstance(instance, [options])
本節說明將讀取副本新增至叢集。依預設,讀取副本會從主要實例複寫。
下列範例會將實例 host4:4110
新增至叢集,標籤為 RReplica1
Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1'})
標籤在叢集中必須是唯一的,而且只能包含字母數字、_(底線)、.(句點)、-(連字號)或 :(冒號)字元。
addReplicaInstance
的 replicationSources
選項可讓您為讀取副本指定一個或多個偏好的複寫來源。此選項接受下列值
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()replicationSources
和 label
。
如果目標是讀取副本,
方法接受的唯一選項是 cluster
.setInstanceOption()tags
(僅限保留標籤)、replicationSources
和 label
。
recoveryMethod
定義在佈建期間如何取得讀取副本的資料。
-
clone
:用於在使用分散式復原開始之前,以另一個叢集成員的完整快照完全取代目標實例的狀態。需要 MySQL 8.0.17 或更新版本。如果定義
cloneDonor
,則會使用定義的實例作為來源。如果
replicationSources
設定為parimary
或secondary
,則會使用叢集主要實例作為來源。如果
replicationSources
包含一個或多個具名的叢集成員,則會使用清單中的第一個作為來源(如果可用)。如果第一個不可用,則會使用第二個,依此類推。 incremental
:使用分散式狀態復原來套用從另一個叢集成員複製的遺失交易。停用複製。auto
:預設值。群組複製會根據目標伺服器支援的項目和group_replication_clone_threshold
值,選取是否擷取完整快照。如果無法安全地判斷安全的執行方式,則會顯示提示。如果停用互動,則會取消操作。
除了 recoveryMethod: clone
選項之外,addReplicaInstance
還提供了 cloneDonor
選項,可讓您定義要複製到新讀取副本的特定實例。如果未定義 cloneDonor
,但是 clone
是選定的復原方法,不論是明確指定 clone
,還是 auto
選取複製作為資料佈建的最佳方法,叢集都會選取最佳的複製實例。所使用的程序與
使用的程序相同。如需詳細資訊,請參閱 第 7.4.6.1 節,「使用採用 MySQL Clone 的叢集」。Cluster
.addInstance()
在下列範例中,使用 host2:4101
(次要實例) 作為資料來源,將新的讀取副本 host5:4113
新增到標籤 RReplica5
。 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'.
讀取副本的以憑證為基礎的驗證定義方式如下
的cluster
.addReplicaInstance()certSubject
選項:指定實例的憑證主體,如果叢集的memberAuthType
是CERT_SUBJECT
或CERT_SUBJECT_PASSWORD
,則會使用此選項。叢集的
memberSslMode
值用於配置讀取副本複寫通道的驗證類型。此方法會使用配置的
memberSslMode
執行連線能力檢查,然後再更新拓撲。如果叢集的
memberAuthType
是CERT_SUBJECT
或CERT_SUBJECT_PASSWORD
,則此方法會驗證伺服器的憑證。
已更新為在 cluster
.options()topology
陣列中傳回 certSubject
。