本节介绍如何修改或从集群中删除您的只读副本。
要从集群中删除只读副本,请使用
。此操作执行以下任务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 集不得与集群的不同。如果
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")