按照此过程部署沙箱或生产 InnoDB ClusterSet 部署。沙盒部署是所有 MySQL 服务器实例和其他软件在一台机器上运行的地方。对于生产部署,服务器实例和其他软件位于不同的机器上。
该过程假定您已经具有以下组件,如第 8.1 节“InnoDB ClusterSet 要求”中所列:
满足第 8.1 节“InnoDB ClusterSet 要求”中规定的要求的现有 InnoDB Cluster 。这是 InnoDB ClusterSet 部署支持的主集群。
MySQL Shell 8.0.27 或更高版本,连接到现有的 InnoDB Cluster。部署过程中使用了 MySQL Shell 的 AdminAPI 命令。
MySQL Router 8.0.27 或更高版本,用于针对 InnoDB ClusterSet 进行引导。您已经针对现有 InnoDB Cluster 引导的 MySQL Router 实例可以在 InnoDB ClusterSet 部署中重复使用,但是您需要再次引导它们以实现 InnoDB ClusterSet 配置。
许多独立的 MySQL 服务器实例(它们不是 InnoDB Cluster 或 InnoDB ReplicaSet 的一部分)组成一个或多个副本集群。它们必须满足 第 8.1 节“InnoDB ClusterSet 要求”中规定的要求。建议每个副本集群中至少有三个成员服务器以容忍故障。
在 InnoDB ClusterSet 部署过程中使用的用户帐户是来自主集群的 InnoDB Cluster 服务器配置帐户。这是使用带有选项的dba.configureInstance()
命令
在主集群的成员服务器上创建的帐户
。clusterAdmin
每个成员服务器只有一个服务器配置帐户。必须在集群中的每个成员服务器上使用相同的用户帐户名和密码,并且您需要在 InnoDB ClusterSet 部署中的所有服务器上创建它。可以使用该
root
帐户作为 InnoDB Cluster 服务器配置帐户,但不建议这样做,因为这意味着root
集群中每个成员服务器上的帐户必须具有相同的密码。有关详细信息,请参阅第 8.3 节,“InnoDB ClusterSet 的用户帐户”。
要设置 InnoDB ClusterSet 部署,请遵循以下过程:
-
使用 MySQL Shell 连接到现有 InnoDB Cluster 中的任何成员服务器,使用 InnoDB Cluster 服务器配置帐户进行连接。例如:
mysql-js> \connect icadmin@127.0.0.1:3310 Creating a session to 'icadmin@127.0.0.1:3310' Please provide the password for 'icadmin@127.0.0.1:3310': ************** Save password for 'icadmin@127.0.0.1:3310'? [Y]es/[N]o/Ne[v]er (default No): Fetching schema names for autocompletion... Press ^C to stop. Closing old connection... Your MySQL connection id is 59 Server version: 8.0.27-commercial MySQL Enterprise Server - Commercial No default schema selected; type \use <schema> to set one. <ClassicSession:icadmin@127.0.0.1:3310>
在这个例子中:
-
是 InnoDB Cluster 中在线的任何成员服务器实例的类似 URI 的连接字符串。icadmin
@127.0.0.1:3310
类似 URI 的连接字符串由以下元素组成:
是 InnoDB Cluster 服务器配置帐户的用户名。icadmin
是成员服务器实例的主机和端口,如127.0.0.1:3310
命令所示。cluster
.status()
-
-
发出
dba.getCluster()
命令以获取Cluster
代表 InnoDB 集群的对象,将其分配给一个变量,以便您可以使用它。例如:mysql-js> cluster1 = dba.getCluster() <Cluster:clusterone>
在本例中,
clusterone
是现有InnoDB Cluster的名称,如 命令clusterName
返回的字段 所示,返回的对象赋值给变量。cluster
.status()Cluster
cluster1
当您使用 InnoDB Cluster 服务器配置帐户连接到服务器实例时,执行此操作很重要。对于需要权限的操作,返回的对象默认使用获取它时使用的帐户。InnoDB ClusterSet部署过程中的一些操作需要权限,而对象中存储的默认用户账户就是为此而使用的,因此该过程不需要存储任何其他用户账户。
-
使用该对象发出
命令,cluster
.createClusterSet()Cluster
以将现有 InnoDB Cluster 作为主集群来创建 InnoDB ClusterSet。例如:mysql-js> myclusterset = cluster1.createClusterSet('testclusterset') A new ClusterSet will be created based on the Cluster 'clusterone'. * Validating Cluster 'clusterone' for ClusterSet compliance. * Creating InnoDB ClusterSet 'testclusterset' on 'clusterone'... * Updating metadata... ClusterSet successfully created. Use ClusterSet.createReplicaCluster() to add Replica Clusters to it. <ClusterSet:testclusterset>
在此示例中,
clusterone
是现有 InnoDB Cluster 的名称,cluster1
是返回Cluster
对象分配给的变量,testclusterset
是您正在创建的 InnoDB ClusterSet 的名称,并且myclusterset
是返回ClusterSet
对象分配给的变量。该
domainName
参数是必需的,它指定您正在创建的 InnoDB ClusterSet 部署的名称(testclusterset
在示例中)。只能使用字母数字字符、连字符 (-)、下划线 (_) 和句点 (.),名称不得以数字开头。最大长度为 63 个字符。-
dryRun
如果您想执行验证并记录更改而不实际执行它们, 请使用该选项。例如:mysql-js> myclusterset = cluster1.createClusterSet('testclusterset', {dryRun: true}) * Validating Cluster 'clusterone' for ClusterSet compliance. NOTE: dryRun option was specified. Validations will be executed, but no changes will be applied. * Creating InnoDB ClusterSet 'clusterset' on 'clusterone'... * Updating metadata... dryRun finished.
-
clusterSetReplicationSslMode
如果要在 InnoDB ClusterSet 部署中要求或禁用复制通道的加密 (TLS/SSL), 请使用该选项。如果服务器实例支持加密,则默认设置AUTO
启用加密,如果不支持,则禁用加密。REQUIRED
为所有复制通道启用加密,并为所有复制通道DISABLED
禁用加密。例如:mysql-js> myclusterset = cluster1.createClusterSet('testclusterset', {dryRun: true, clusterSetReplicationSslMode: 'REQUIRED'})
当您发出
命令时,MySQL Shell 会检查目标 InnoDB Cluster 是否符合成为 InnoDB ClusterSet 部署中的主集群的要求,如果不符合则返回错误。如果目标 InnoDB Cluster 满足要求,MySQL Shell 将执行以下设置任务:cluster
.createClusterSet()更新元数据模式以包含 InnoDB ClusterSet 元数据。
skip_replica_start
在所有成员服务器上将系统变量 设置 为ON
,以便复制线程不会自动启动。将目标 InnoDB Cluster 添加到元数据中的 InnoDB ClusterSet 并将其标记为主集群。
返回
ClusterSet
表示 InnoDB ClusterSet 的对象。
-
通过使用返回的对象 发出
命令来验证您创建的 InnoDB ClusterSet 部署是否正常。clusterSet
.status()ClusterSet
例如:mysql-js> myclusterset.status() { "clusters": { "clusterone": { "clusterRole": "PRIMARY", "globalStatus": "OK", "primary": "127.0.0.1:3310" } }, "domainName": "testclusterset", "globalPrimaryInstance": "127.0.0.1:3310", "primaryCluster": "clusterone", "status": "HEALTHY", "statusText": "All Clusters available." }
您还可以使用
命令来查看集群本身。或者,您可以选择扩展输出cluster
.status()
以查看 InnoDB ClusterSet 拓扑中集群的详细状态。例如:clusterSet
.status()mysql-js> myclusterset.status({extended: 1}) { "clusters": { "clusterone": { "clusterRole": "PRIMARY", "globalStatus": "OK", "primary": "127.0.0.1:3310", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { "127.0.0.1:3310": { "address": "127.0.0.1:3310", "memberRole": "PRIMARY", "mode": "R/W", "status": "ONLINE", "version": "8.0.27" }, "127.0.0.1:3320": { "address": "127.0.0.1:3320", "memberRole": "SECONDARY", "mode": "R/O", "replicationLagFromImmediateSource": "", "replicationLagFromOriginalSource": "", "status": "ONLINE", "version": "8.0.27" }, "127.0.0.1:3330": { "address": "127.0.0.1:3330", "memberRole": "SECONDARY", "mode": "R/O", "replicationLagFromImmediateSource": "", "replicationLagFromOriginalSource": "", "status": "ONLINE", "version": "8.0.27" } }, "transactionSet": "953a51d5-2690-11ec-ba07-00059a3c7a00:1,c51c1b15-269e-11ec-b9ba-00059a3c7a00:1-86,c51c29ad-269e-11ec-b9ba-00059a3c7a00:1-8" } }, "domainName": "testclusterset", "globalPrimaryInstance": "127.0.0.1:3310", "metadataServer": "127.0.0.1:3310", "primaryCluster": "clusterone", "status": "HEALTHY", "statusText": "All Clusters available." }
有关更多信息和 命令 输出的描述, 请参阅第 8.6 节,“InnoDB ClusterSet 状态和拓扑” 。
clusterSet
.status()如果你想
ClusterSet
在任何时候为连接的服务器实例获取表示 InnoDB ClusterSet 的对象,例如在重新启动 MySQL Shell 之后,请使用dba.getClusterSet()
or
命令。例如:cluster
.getClusterSet()mysql-js> myclusterset = dba.getClusterSet() <ClusterSet:testclusterset>
将返回的
Cluster
或ClusterSet
对象分配给变量使您能够使用对象的方法对集群或 ClusterSet 执行进一步的操作。返回的对象使用一个新的会话,独立于 MySQL Shell 的全局会话。这确保如果您更改 MySQL Shell 全局会话,Cluster
或ClusterSet
对象将保持其与服务器实例的会话。请注意,当您使用该对象时,您从中获取它的服务器实例必须在 InnoDB ClusterSet 中仍然在线。如果该服务器实例脱机,该对象将不再工作,您将需要从仍然在线的服务器重新获取它。 -
通过发出 带有选项的
dba.configureInstance()
命令,在 将成为副本集群一部分的每个独立服务器实例上创建 InnoDB Cluster 服务器配置帐户。clusterAdmin
要创建的帐户是用于创建 ClusterSet 的主集群中的 InnoDB Cluster 服务器配置帐户。不要指定任何 InnoDB Cluster 管理员帐户(使用 创建
)。这些将在配置过程中自动从主集群传输到副本集群。cluster
.setupAdminAccount()您不需要事先连接到独立服务器实例,因为连接字符串包含在命令中。在连接字符串中,使用具有完全 MySQL 管理员权限的帐户,包括创建帐户的权限 (
WITH GRANT OPTION
)。在此示例中,root
使用该帐户:mysql-js> dba.configureInstance('root@127.0.0.1:4410', {clusterAdmin: 'icadmin'}) Please provide the password for 'root@127.0.0.1:4410': *************** Save password for 'root@127.0.0.1:4410'? [Y]es/[N]o/Ne[v]er (default No): Configuring local MySQL instance listening at port 4410 for use in an InnoDB cluster... NOTE: Instance detected as a sandbox. Please note that sandbox instances are only suitable for deploying test clusters for use within the same host. This instance reports its own address as 127.0.0.1:4410 Password for new account: ************** Confirm password: ************** applierWorkerThreads will be set to the default value of 4. The instance '127.0.0.1:4410' is valid to be used in an InnoDB cluster. Cluster admin user 'icadmin' created. The instance '127.0.0.1:4410' is already ready to be used in an InnoDB cluster. Successfully enabled parallel appliers.
在此示例中, 是独立服务器的类似 URI 的连接字符串,是将在实例上创建的 InnoDB Cluster 服务器配置帐户的用户名。为了更好的安全性,请在示例中所示的交互式提示中指定 InnoDB Cluster 服务器配置帐户的密码,或者您可以使用该 选项提供它。该 命令会自动授予帐户所需的权限,但如果您愿意,您可以手动设置帐户,授予它 手动配置 InnoDB 集群管理员帐户中列出的权限
root
@127.0.0.1:4410
icadmin
clusterAdminPassword
dba.configureInstance()
. 有关该dba.configureInstance()
命令及其选项的更多详细信息,请参阅 第 7.4.2 节,“为 InnoDB 集群使用配置生产实例”。当您发出时
dba.configureInstance()
,MySQL Shell 会验证服务器实例是否满足与 InnoDB Cluster 一起使用的要求。当您发出创建副本集群并向其添加实例的命令时,将检查 InnoDB ClusterSet 的要求。 使用 InnoDB Cluster 服务器配置帐户连接到已在 InnoDB ClusterSet 部署中的主集群中的任何活动实例。确保您仍然拥有
ClusterSet
创建 InnoDB ClusterSet 时返回的对象,或者使用dba.getClusterSet()
or 再次获取它
。同样,当您使用 InnoDB Cluster 服务器配置帐户连接到服务器实例时,执行此操作很重要。对象中存储的默认用户帐户用于 InnoDB ClusterSet 部署过程中的某些操作,而不管您在连接上指定的帐户。cluster
.getClusterSet()-
使用该对象发出
命令clusterSet
.createReplicaCluster()ClusterSet
以创建副本集群,命名其中一个独立服务器实例。此服务器实例将是副本集群的主要实例。该命令返回Cluster
副本集群的对象,如果需要,您可以将其分配给变量。例如:mysql-js> cluster2 = myclusterset.createReplicaCluster("127.0.0.1:4410", "clustertwo", {recoveryProgress: 1, timeout: 10}) Setting up replica 'clustertwo' of cluster 'clusterone' at instance '127.0.0.1:4410'. A new InnoDB cluster will be created on instance '127.0.0.1:4410'. Validating instance configuration at 127.0.0.1:4410... NOTE: Instance detected as a sandbox. Please note that sandbox instances are only suitable for deploying test clusters for use within the same host. This instance reports its own address as 127.0.0.1:4410 Instance configuration is suitable. NOTE: Group Replication will communicate with other members using '127.0.0.1:44101'. Use the localAddress option to override. * Checking transaction state of the instance... NOTE: The target instance '127.0.0.1:4410' has not been pre-provisioned (GTID set is empty). The Shell is unable to decide whether replication can completely recover its state. The safest and most convenient way to provision a new instance is through automatic clone provisioning, which will completely overwrite the state of '127.0.0.1:4410' with a physical snapshot from an existing clusterset member. To use this method by default, set the 'recoveryMethod' option to 'clone'. WARNING: It should be safe to rely on replication to incrementally recover the state of the new Replica Cluster if you are sure all updates ever executed in the ClusterSet were done with GTIDs enabled, there are no purged transactions and the instance used to create the new Replica Cluster contains the same GTID set as the ClusterSet or a subset of it. To use this method by default, set the 'recoveryMethod' option to 'incremental'. Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone): Waiting for clone process of the new member to complete. Press ^C to abort the operation. * Waiting for clone to finish... NOTE: 127.0.0.1:4410 is being cloned from 127.0.0.1:3310 ** Stage DROP DATA: Completed NOTE: 127.0.0.1:4410 is shutting down... * Waiting for server restart... ready * 127.0.0.1:4410 has restarted, waiting for clone to finish... ** Stage FILE COPY: Completed ** Stage PAGE COPY: Completed ** Stage REDO COPY: Completed ** Stage FILE SYNC: Completed ** Stage RESTART: Completed * Clone process has finished: 72.61 MB transferred in about 1 second (~72.61 MB/s) Creating InnoDB cluster 'clustertwo' on '127.0.0.1:4410'... Adding Seed Instance... Cluster successfully created. Use Cluster.addInstance() to add MySQL instances. At least 3 instances are needed for the cluster to be able to withstand up to one server failure. * Configuring ClusterSet managed replication channel... ** Changing replication source of 127.0.0.1:4410 to 127.0.0.1:3310 * Waiting for instance to synchronize with PRIMARY Cluster... ** Transactions replicated ############################################################ 100% * Updating topology Replica Cluster 'clustertwo' successfully created on ClusterSet 'testclusterset'. <Cluster:clustertwo>
对于
命令:clusterSet
.createReplicaCluster()该
instance
参数是必需的,指定独立服务器的 MySQL 服务器实例的主机和端口号。这是将成为副本集群主服务器的服务器实例。在上面的示例命令中,这是
.127.0.0.1:4410
该
clusterName
参数是必需的,它指定副本集群的标识符。在上面的示例命令中,
使用了。该名称在InnoDB ClusterSet 中必须是唯一的,并且必须遵循InnoDB Cluster 命名要求。只能使用字母数字字符、连字符 (-)、下划线 (_) 和句点 (.),名称不得以数字开头。最大长度为 63 个字符。集群名称区分大小写。clustertwo
dryRun
如果您想执行验证并记录更改而不实际执行它们, 请使用该选项。使用该
interactive
选项启用或禁用供应方法的确认提示。默认值是 MySQL ShelluseWizards
选项的值。-
recoveryMethod
如果要选择供应方法, 请使用该选项。如果您未将此指定为选项,AUTO
则使用默认设置。在这种情况下,该函数会将服务器实例上设置的 GTID 与主集群上设置的 GTID 进行比较,并尝试确定最合适的供应方法。如果无法确定,该功能会提示您选择供应方法,或者如果您未处于交互模式则取消操作。称为分布式恢复的供应过程可以使用克隆,其中服务器实例的状态完全被从集群中现有成员服务器获取的物理快照覆盖。要提前选择此项,请指定
CLONE
设置。另一种方法是从现有成员服务器的二进制日志进行增量状态传输,在本例中是主集群的成员。在这里,服务器实例从它还没有的主集群接收并应用事务。要提前选择此项,请指定INCREMENTAL
设置。 cloneDonor
如果通过克隆执行分布式恢复,如果要选择特定服务器以提供覆盖当前服务器的快照, 请使用该选项。该操作默认选择主集群的次要成员,如果没有可用的次要成员,则选择主要成员。所选服务器实例必须是 InnoDB ClusterSet 中主集群的成员。指定主机和端口号。此选项不支持 IPv6 地址。使用该
recoveryProgress
选项为分布式恢复过程指定详细级别(0、1 或 2)。设置0不显示进度信息,1显示详细的静态进度信息,2使用进度条显示详细的动态进度信息。如果标准输出是终端,则默认为 2,否则默认为 1。timeout
如果要设置超时以等待服务器实例在配置主集群并建立 ClusterSet 复制通道后与主集群同步, 请使用该选项。默认情况下没有超时。使用该
manualStartOnBoot
选项指定 Group Replication 是在 MySQL 服务器启动时自动启动并重新加入集群,还是必须手动启动。默认值false
表示组复制自动启动。-
使用该
communicationStack
选项定义成员如何使用XCOM
或MYSQL
协议相互通信。请参阅 第 7.5.9 节,“配置组复制通信堆栈”。如果您使用的是 MySQL 8.0.27 或更高版本,则默认和推荐的协议是
MYSQL
. 如果要为副本 InnoDB Cluster 配置 Group Replication 的设置,则 选项
memberSslMode
,ipAllowlist
,localAddress
,exitStateAction
,memberWeight
,consistency
,expelTimeout
和 可用。autoRejoinTries
这些选项的工作方式与它们对不属于 ClusterSet 的 InnoDB Cluster 的工作方式相同。有关选项的详细信息,请参阅 第 7.5 节,“配置 InnoDB Cluster”。(注意:ipAllowlist
和localAddress
仅适用于XCOM
通信堆栈。)可以使用选项
localAddress
并groupName
设置组复制本地地址和组标识符。但是,不建议这样做,因为不正确的值会导致组复制出错。如果您已经遇到 InnoDB ClusterSet 设置过程为这些项目选择的值的问题,请仅使用这些选项。-
在使用MySQL Shell 8.0.28及之后的版本创建InnoDB ClusterSet时,如果您有安全需求,所有AdminAPI自动创建的账户都有严格的认证要求,您可以为
replicationAllowedHost
ClusterSet的配置选项设置一个值。replicationAllowedHost
MySQL Shell 选项允许您将 ClusterSet 的内部管理复制帐户设置为严格的基于子网的过滤器,而不是默认的通配符值。 该%
选项replicationAllowedHost
采用字符串值。例如,要创建一个名为 clustersetmy_clusterset_domain
并将replicationAllowedHost
选项设置为192.0.2.0/24
, 问题:mysql-js> <Cluster>.createClusterSet('my_clusterset_domain', {replicationAllowedHost:'192.0.2.0/24'})
如果您
replicationAllowedHost
在 ClusterSet 上进行更改,则用于集群之间复制通道的帐户将更改为仅允许来自您为 指定的值的连接replicationAllowedHost
。主机必须在主集群和副本集群中都可以访问。如果不是,则集群之间没有复制。可以在创建后修改 ClusterSet 以设置
replicationAllowedHost
, 通过发出:mysql-js> <Clusterset>.setOption('replicationAllowedHost','192.0.2.0/24')
当您发出
命令时,MySQL Shell 会检查目标服务器实例是否符合成为 InnoDB ClusterSet 部署中副本 InnoDB Cluster 中主服务器的要求,如果不符合则返回错误。如果实例满足要求,MySQL Shell 将执行以下设置任务:clusterSet
.createReplicaCluster()创建 ClusterSet 复制通道
clusterset_replication
,并使用随机密码创建复制用户。这是目标实例和主集群的主服务器之间的异步复制通道,由InnoDB ClusterSet管理。clusterSetReplicationSslMode
根据InnoDB ClusterSet的选项为通道配置加密 。MySQL Shell 验证复制设置是否正常工作,如果不正常则返回错误。使用选定的恢复方法,使用来自主 InnoDB 集群的数据集配置 MySQL 服务器实例并同步 GTID 集。请注意,如果ClusterSet 的成员服务器中有大量数据,则分布式恢复可能需要几个小时。
在服务器实例上添加 InnoDB Cluster 管理员帐户和 MySQL Router 管理员帐户。如果实例是通过二进制日志的状态传输来配置的,则配置过程包括创建帐户的事务,否则帐户会在克隆期间传输。无论哪种方式,这些帐户都可以在服务器实例上使用。有关更多信息,请参阅 第 8.3 节,“InnoDB ClusterSet 的用户帐户”。
为副本集群配置并启动组复制。
InnoDB ClusterSet 副本集群创建过程会覆盖您在命令中为其指定新设置的任何现有持久化组复制配置选项 。它还会始终覆盖以下配置选项,即使您没有在命令中指定 它们 :clusterSet
.createReplicaCluster()group_replication_group_name
、、、、 和group_replication_group_seeds
group_replication_local_address
group_replication_view_change_uuid
group_replication_enforce_update_everywhere_checks
. 但是,在副本集群中使用服务器实例之前更改的任何其他组复制配置选项将保持原样。请参阅第 8.1 节“InnoDB ClusterSet 要求”中关于此的重要说明 。将
skip_replica_start
系统变量设置为,ON
以便复制线程不会在服务器上自动启动,并设置super_read_only
系统变量,以便客户端无法将事务写入服务器。禁用组复制成员操作
mysql_disable_super_read_only_if_primary
,以便super_read_only
在视图更改后在集群的主节点上保持设置。启用组复制成员操作
,以便为 ClusterSet 复制通道启用副本的异步连接故障转移。With this function enabled, if the primary that is replicating goes offline or into an error state, the new primary starts replication on the same channel when it is elected.mysql_start_failover_channels_if_primary
将 ClusterSet 元数据传输到服务器实例,在 InnoDB ClusterSet 中创建副本集群,并将目标服务器实例作为主实例添加到其中。
返回
Cluster
副本集群的对象。
-
使用
Cluster
为副本集群返回的对象
,发出clusterSet
.createReplicaCluster()
命名另一个独立服务器实例的命令。此服务器实例将是副本集群中的辅助实例。例如:cluster
.addInstancemysql-js> cluster2.addInstance('icadmin@127.0.0.1:4420') NOTE: The target instance '127.0.0.1:4420' has not been pre-provisioned (GTID set is empty). The Shell is unable to decide whether clone based recovery is safe to use. The safest and most convenient way to provision a new instance is through automatic clone provisioning, which will completely overwrite the state of '127.0.0.1:4420' with a physical snapshot from an existing cluster member. To use this method by default, set the 'recoveryMethod' option to 'clone'. Please select a recovery method [C]lone/[A]bort (default Clone): c Validating instance configuration at localhost:4420... NOTE: Instance detected as a sandbox. Please note that sandbox instances are only suitable for deploying test clusters for use within the same host. This instance reports its own address as 127.0.0.1:4420 Instance configuration is suitable. NOTE: Group Replication will communicate with other members using '127.0.0.1:44201'. Use the localAddress option to override. A new instance will be added to the InnoDB cluster. Depending on the amount of data on the cluster this might take from a few seconds to several hours. Adding instance to the cluster... * Waiting for the Cluster to synchronize with the PRIMARY Cluster... ** Transactions replicated ############################################################ 100% * Configuring ClusterSet managed replication channel... ** Changing replication source of 127.0.0.1:4420 to 127.0.0.1:3310 Monitoring recovery process of the new cluster member. Press ^C to stop monitoring and let it continue in background. 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: 127.0.0.1:4420 is being cloned from 127.0.0.1:4410 ** Stage DROP DATA: Completed ** Clone Transfer FILE COPY ############################################################ 100% Completed PAGE COPY ############################################################ 100% Completed REDO COPY ############################################################ 100% Completed NOTE: 127.0.0.1:4420 is shutting down... * Waiting for server restart... ready * 127.0.0.1:4420 has restarted, waiting for clone to finish... ** Stage RESTART: Completed * Clone process has finished: 72.61 MB transferred in about 1 second (~72.61 MB/s) State recovery already finished for '127.0.0.1:4420' The instance '127.0.0.1:4420' was successfully added to the cluster.
有关
命令的更多详细信息,请参阅第 7.4.4 节,“将实例添加到 InnoDB Cluster”。cluster
.addInstance如果您需要再次获取
Cluster
副本集群的对象,请使用 InnoDB Cluster 服务器配置帐户连接到副本集群中的任何活动实例并发出dba.getCluster()
. 该帐户用于设置过程中的一些操作。如果设置过程发现独立服务器实例上不存在该帐户,则会返回一个错误,您将需要dba.configureInstance()
创建该帐户。命令成功后,服务器实例将添加到副本集群并为 InnoDB ClusterSet 提供数据。克隆操作的捐赠者将来自副本集群,而不是主集群。
重复该
操作以将所有独立服务器实例添加到副本集群。建议至少三个实例以容忍故障。副本集群中最多可以有九个成员服务器,这是底层组复制技术中内置的限制。cluster
.addInstance-
验证已完成的副本集群和 InnoDB ClusterSet 部署是否正常。您可以使用
查看副本集群的cluster
.status()
命令和查看 InnoDB ClusterSet 部署的命令来执行此操作。或者,您可以选择扩展输出clusterSet
.status()
以查看所有集群的详细状态。例如:clusterSet
.status()mysql-js> myclusterset.status({extended: 1}) { "clusters": { "clusterone": { "clusterRole": "PRIMARY", "globalStatus": "OK", "primary": "127.0.0.1:3310", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { "127.0.0.1:3310": { "address": "127.0.0.1:3310", "memberRole": "PRIMARY", "mode": "R/W", "status": "ONLINE", "version": "8.0.27" }, "127.0.0.1:3320": { "address": "127.0.0.1:3320", "memberRole": "SECONDARY", "mode": "R/O", "replicationLagFromImmediateSource": "", "replicationLagFromOriginalSource": "", "status": "ONLINE", "version": "8.0.27" }, "127.0.0.1:3330": { "address": "127.0.0.1:3330", "memberRole": "SECONDARY", "mode": "R/O", "replicationLagFromImmediateSource": "", "replicationLagFromOriginalSource": "", "status": "ONLINE", "version": "8.0.27" } }, "transactionSet": "953a51d5-2690-11ec-ba07-00059a3c7a00:1,c51c1b15-269e-11ec-b9ba-00059a3c7a00:1-131,c51c29ad-269e-11ec-b9ba-00059a3c7a00:1-8" }, "clustertwo": { "clusterRole": "REPLICA", "clusterSetReplication": { "applierStatus": "APPLIED_ALL", "applierThreadState": "Waiting for an event from Coordinator", "applierWorkerThreads": 4, "receiver": "127.0.0.1:4410", "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "source": "127.0.0.1:3310" }, "clusterSetReplicationStatus": "OK", "globalStatus": "OK", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { "127.0.0.1:4410": { "address": "127.0.0.1:4410", "memberRole": "PRIMARY", "mode": "R/O", "replicationLagFromImmediateSource": "", "replicationLagFromOriginalSource": "", "status": "ONLINE", "version": "8.0.27" }, "127.0.0.1:4420": { "address": "127.0.0.1:4420", "memberRole": "SECONDARY", "mode": "R/O", "replicationLagFromImmediateSource": "", "replicationLagFromOriginalSource": "", "status": "ONLINE", "version": "8.0.27" }, "127.0.0.1:4430": { "address": "127.0.0.1:4430", "memberRole": "SECONDARY", "mode": "R/O", "replicationLagFromImmediateSource": "", "replicationLagFromOriginalSource": "", "status": "ONLINE", "version": "8.0.27" } }, "transactionSet": "0f6ff279-2764-11ec-ba06-00059a3c7a00:1-5,953a51d5-2690-11ec-ba07-00059a3c7a00:1,c51c1b15-269e-11ec-b9ba-00059a3c7a00:1-131,c51c29ad-269e-11ec-b9ba-00059a3c7a00:1-8", "transactionSetConsistencyStatus": "OK", "transactionSetErrantGtidSet": "", "transactionSetMissingGtidSet": "" } }, "domainName": "testclusterset", "globalPrimaryInstance": "127.0.0.1:3310", "metadataServer": "127.0.0.1:3310", "primaryCluster": "clusterone", "status": "HEALTHY", "statusText": "All Clusters available." }
有关命令 输出的更多信息, 请参阅第 8.6 节,“InnoDB ClusterSet 状态和拓扑” 。
clusterSet
.status() -
通过对一组不同的独立实例重复上述步骤,根据需要添加更多副本集群。InnoDB ClusterSet 部署中可以拥有的副本集群的数量没有定义的限制。每种情况下的过程都相同,总结如下:
通过发出 带有选项 的
dba.configureInstance()
命令,在每个独立服务器实例上创建 InnoDB Cluster 服务器配置帐户。clusterAdmin
当您使用 InnoDB Cluster 服务器配置帐户连接到 InnoDB ClusterSet 的成员时,使用或 获取
ClusterSet
对象 。您可以从主集群或您已经创建的副本集群之一中的任何成员服务器获取对象。dba.getClusterSet()
cluster
.getClusterSet()使用该对象发出
命令clusterSet
.createReplicaCluster()ClusterSet
以创建副本集群,命名其中一个独立服务器实例。使用
Cluster
为副本集群返回的对象
,发出clusterSet
.createReplicaCluster()
命名另一个独立服务器实例的命令。cluster
.addInstance重复该
操作以将所有独立服务器实例添加到副本集群。cluster
.addInstance验证已完成的副本集群和 InnoDB ClusterSet 部署是否健康,例如通过使用
具有扩展输出的命令。clusterSet
.status()
针对 InnoDB ClusterSet 引导 MySQL Router 实例以管理应用程序流量,并根据需要对其进行配置。默认情况下,MySQL Router 将所有读取和写入请求定向到当前是 InnoDB ClusterSet 部署中的主集群的集群,但您可以将 MySQL Router 实例配置为仅将流量路由到特定集群。有关说明,请参阅 第 8.5 节,“将 MySQL 路由器与 InnoDB ClusterSet 集成”。