本節說明如何修改或從叢集中移除讀取副本。
若要從叢集中移除讀取副本,請使用
。此操作會執行下列工作Cluster
.removeInstance()
從叢集中捨棄複寫使用者。
從叢集的中繼資料中移除讀取副本。
停止複寫通道,並將讀取副本的組態重設為預設值。
如果在也是讀取副本來源的叢集成員上執行
,則會觸發容錯移轉程序,且讀取副本會嘗試連線至另一個來源。如果沒有其他可用的來源,則會停止複寫通道。移除的叢集成員也會從讀取副本的來源清單中移除。Cluster
.removeInstance()
以下範例會從叢集中移除讀取副本 host4:4110
Cluster.removeInstance("host4:4110")
Removing Read-Replica 'ipaddress:4110' from the Cluster 'myCluster'.
* Waiting for the Read-Replica to synchronize with the Cluster...
** Transactions replicated ############################################################ 100%
* Stopping and deleting the Read-Replica managed replication channel...
Read-Replica 'ipaddress:4110' successfully removed from the Cluster 'myCluster'.
移除讀取副本時,交易會與來源同步。您可以定義交易複寫程序的逾時 (以秒為單位)。例如
Cluster.removeInstance("host4:4110", {timeout:30})
這會在同步程序中定義 30 秒的逾時。如果同步程序未在 30 秒內完成,則會回復 removeInstance
操作,且不會從叢集中移除讀取副本。
預設逾時值為 0 (零) 或無逾時。
您可以使用 dryRun
選項測試此操作。包含此選項並設定為 true
會執行命令,但不進行任何變更。這可讓您測試變更。
若要將讀取副本重新加入叢集,請使用
。Cluster
.rejoinInstance()
Cluster.rejoinInstance(instance [, options])
若要將讀取副本重新加入叢集,執行個體必須符合下列需求
目標執行個體必須是叢集的成員。
目標執行個體必須符合讀取副本的必要條件。請參閱第 7.11.1 節「必要條件」。
目標執行個體的 GTID 集必須與叢集的 GTID 集相同。如果
recoveryMethod: clone
,則不適用。
如果讀取副本的所有已設定來源都無法連線,或不再是叢集的一部分,則 rejoinInstance()
操作將會失敗。在這種情況下,您必須使用
更新讀取副本的複寫來源。Cluster
.setInstanceOption()
此程序與將叢集成員重新加入叢集相同,但下列例外情況除外
recoveryMethod
值clone
和選項cloneDonor
僅適用於讀取副本。timeout
選項僅適用於讀取副本。
以下範例顯示嘗試使用預設復原方法將讀取副本 host4:4110
重新加入叢集
Cluster.rejoinInstance('host4:4110')
重新加入讀取副本時,交易會與主要節點同步。您可以定義交易複寫程序的逾時 (以秒為單位)。以下範例會將交易同步程序的逾時設定為 60 秒
Cluster.rejoinInstance('host4:4110', {timeout: 60})
這會在同步程序中定義 60 秒的逾時。如果同步程序未在 60 秒內完成,則會回復 rejoinInstance
操作,且不會將讀取副本重新加入叢集。
預設逾時值為 0 (零) 或無逾時。
您可以使用 dryRun
選項測試此操作。包含此選項並設定為 true
會執行命令,但不進行任何變更。這可讓您測試變更。
無法使用 rejoinInstance
重新加入使用 removeInstance
從叢集中移除的讀取副本。removeInstance
會從叢集中移除讀取副本,並移除讀取副本的中繼資料。
若要重新加入此類執行個體,您必須使用 addReplicaInstance
。
叢集的預設路由原則是將所有唯讀流量導向至次要成員。
可讓您使用 Cluster
.setRoutingOption()read_only_targets
選項,將路由原則設定為下列其中一個值
all
:所有讀取副本和次要叢集成員都用於唯讀流量。read_replicas
:只有讀取副本用於唯讀流量。secondaries
:只有次要叢集成員用於唯讀流量。
以下範例會將名為 machine1::router1
的路由器唯讀路由原則設定為僅限讀取副本
Cluster.setRoutingOption("machine1::router1", "read_only_targets", "read_replicas")
若要檢視名為 machine1::router1
的路由器的目前路由原則,請執行以下操作
Cluster.routingOptions("machine1::router1")