使用 addReplicaInstance()
建立讀取複本
Cluster.addReplicaInstance(instance, [options])
此章節和後續章節中的範例假設一個由三個執行個體組成的簡單叢集,一個主要執行個體和兩個次要執行個體。
host1:4100
:主要執行個體。host2:4101
:次要執行個體。host3:4102
:次要執行個體。
本節說明如何將讀取複本新增至叢集。預設情況下,讀取複本會從主要執行個體複寫。
下列範例會將執行個體 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
:使用分散式狀態復原,套用從另一個叢集成員複製的遺失交易。已停用 Clone。auto
:預設值。群組複寫會根據目標伺服器支援的內容和group_replication_clone_threshold
值,選取是否擷取完整快照。如果無法安全地判斷安全的方式來繼續,則會顯示提示。如果停用互動,則會取消作業。
除了 recoveryMethod: clone
選項之外,addReplicaInstance
也提供 cloneDonor
選項,讓您定義要複製到新讀取複本的特定執行個體。如果未定義 cloneDonor
,但是 clone
是選取的復原方法,無論是明確指定 clone
,還是 auto
選取 clone 做為資料佈建的最佳方法,叢集都會選取最佳的執行個體以進行複製。使用的程序與
使用的程序相同。如需詳細資訊,請參閱第 7.4.6.1 節〈使用採用 MySQL Clone 的叢集〉。Cluster
.addInstance()
在下列範例中,會新增新的讀取複本 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()memberAuthType
為CERT_SUBJECT
或CERT_SUBJECT_PASSWORD
時使用。叢集的
memberSslMode
值用於設定唯讀副本的複製通道的驗證類型。在更新拓樸之前,此方法會使用已設定的
memberSslMode
執行連線檢查。如果叢集的
memberAuthType
為CERT_SUBJECT
或CERT_SUBJECT_PASSWORD
,此方法會驗證伺服器的憑證。
已更新,以在 cluster
.options()topology
陣列中傳回 certSubject
。