使用 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
作为数据源,添加了标签为 RReplica5
的新只读副本 host5:4113
。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
。