Documentation Home

7.4.3 创建 InnoDB 集群

准备好实例后,使用该 dba.createCluster()函数创建集群,使用 MySQL Shell 连接到的实例作为集群的种子实例。种子实例被复制到您添加到集群的其他实例,使它们成为种子实例的副本。在此过程中,ic-1 实例用作种子。当您发出 MySQL Shell 时,会为连接到 MySQL Shell 当前全局会话的服务器实例创建一个经典的 MySQL 协议会话。例如,要创建一个名为的集群 并将返回的集群分配给一个名为的变量: dba.createCluster(name)testClustercluster

mysql-js> var cluster = dba.createCluster('testCluster')
Validating instance at icadmin@ic-1:3306...
This instance reports its own address as ic-1
Instance configuration is suitable.
Creating InnoDB cluster 'testCluster' on 'icadmin@ic-1:3306'...
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.

这种将返回的集群分配给变量的模式使您能够使用 Cluster 对象的方法对集群执行进一步的操作。返回的 Cluster 对象使用一个新的会话,独立于 MySQL Shell 的全局会话。这确保如果您更改 MySQL Shell 全局会话,Cluster 对象将保持其与实例的会话。

为了能够管理集群,您必须确保您有一个合适的用户,该用户具有所需的权限。推荐的方法是创建一个管理用户。如果您在配置实例时没有创建管理用户,请使用该 Cluster.setupAdminAccount() 操作。例如,要创建一个名为的用户 ,该用户icadmin可以管理分配给变量的 InnoDB 集群 cluster,请发出:

mysql-js> cluster.setupAdminAccount("icadmin")

有关 InnoDB Cluster 管理员帐户的更多信息, 请参阅手动配置 InnoDB Cluster管理员帐户。

dba.createCluster()操作支持 MySQL Shell 的interactive选项。打开时 interactive,在以下情况下会出现提示:

  • 如果实例属于 Group Replication 组,并且 adoptFromGr: true未设置为选项,系统会询问您是否要采用该复制组。

  • 如果force: true未设置为选项,系统会要求您确认创建多主集群。

当您运行dba.createCluster()时,以及当您通过运行将另一个服务器实例添加到 InnoDB 集群时 Cluster.addInstance(),以下错误将记录到 MySQL 服务器实例的错误日志中。这些消息是无害的,并且与 AdminAPI 启动组复制的方式有关:

2020-02-10T10:53:43.727246Z 12 [ERROR] [MY-011685] [Repl] Plugin
group_replication reported: 'The group name option is mandatory'
2020-02-10T10:53:43.727292Z 12 [ERROR] [MY-011660] [Repl] Plugin
group_replication reported: 'Unable to start Group Replication on boot'
笔记

如果您遇到与元数据不可访问相关的错误,您可能配置了环回网络接口。为了正确使用 InnoDB Cluster,请禁用环回接口。

要检查集群是否已创建,请使用集群实例的status()函数。请参阅 使用检查集群的状态 Cluster.status()

小费

一旦服务器实例属于一个集群,重要的是只使用 MySQL Shell 和 AdminAPI 来管理它们。不支持在将实例添加到集群后尝试手动更改实例上的组复制配置。同样, server_uuid不支持在使​​用 AdminAPI 配置实例后修改对 InnoDB Cluster 至关重要的服务器变量,例如 。

当您使用 MySQL Shell 8.0.14 及更高版本创建集群时,您可以设置在实例从集群中驱逐之前等待的时间量,例如当它们变得无法访问时。将expelTimeout选项传递给操作,该操作 在种子实例上dba.createCluster()配置 变量。group_replication_member_expel_timeoutexpelTimeout选项可以采用 0 到 3600 范围内的整数值。所有运行 MySQL 服务器 8.0.13 及更高版本的实例被添加到具有 expelTimeout配置的集群中时,将自动配置为expelTimeout 与种子实例上配置的值相同。

有关可以传递给的其他选项的信息 dba.createCluster(),请参阅 第 7.9 节,“修改或解散 InnoDB 集群”

InnoDB Cluster replicationAllowedHost

当您使用MySQL Shell 8.0.28及之后的版本创建集群时,如果您有安全需求,所有AdminAPI自动创建的账户都有严格的认证要求,您可以为 replicationAllowedHost集群配置选项设置一个值。该 replicationAllowedHost选项意味着所有自动创建的帐户只能从允许的主机连接,使用严格的基于子网的过滤。以前, InnoDB Cluster 创建的内部用户帐户默认情况下可以从任何地方访问。

replicationAllowedHost选项可以采用字符串值。例如,要创建一个名为 的集群 testCluster并将 replicationAllowedHost选项设置为 192.0.2.0/24,请发出:

mysql-js> dba.createCluster('testCluster', {replicationAllowedHost:'192.0.2.0/24'})

配置通信栈

从 MySQL Shell 8.0.30 开始,InnoDB Cluster 支持在 MySQL 8.0.27 中为组复制引入的 MySQL 通信堆栈。

该选项communicationStack: XCOM|MYSQL 设置组复制系统变量的值 group_replication_communication_stack

例如:

       mysql-js> dba.createCluster("testCluster", {communicationStack: "xcom"})

MYSQL通信堆栈是为 MySQL 8.0.27 或更高版本创建的所有新集群的默认设置 。

有关详细信息,请参阅 第 7.5.9 节,“配置组复制通信堆栈”