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