准备完实例后,使用 dba.createCluster()
函数创建集群,使用 MySQL Shell 连接到的实例作为集群的种子实例。种子实例被复制到您添加到集群的其他实例,使其成为种子实例的副本。在此过程中,ic-1 实例用作种子。当您发出 dba.createCluster(
时,MySQL Shell 会创建到连接到 MySQL Shell 的当前全局会话的服务器实例的经典 MySQL 协议会话。例如,要创建名为 name
)testCluster
的集群并将返回的集群分配给名为 cluster
的变量
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.
集群名称必须非空且不超过 63 个字符。它只能以字母数字字符或 _(下划线)开头,并且只能包含字母数字、_(下划线)、.(句点)或 -(连字符)字符。
这种将返回的集群分配给变量的模式使您能够使用集群对象的函数对集群执行进一步的操作。返回的集群对象使用新的会话,独立于 MySQL Shell 的全局会话。这确保了如果您更改 MySQL Shell 全局会话,集群对象将保持其与实例的会话。
要能够管理集群,您必须确保您拥有具有所需权限的合适用户。推荐的方法是创建一个管理用户。如果您在配置实例时没有创建管理用户,请使用
操作。例如,要创建一个名为 Cluster
.setupAdminAccount()icadmin
的用户,该用户可以管理分配给变量 cluster
的 InnoDB 集群,请发出
mysql-js> cluster.setupAdminAccount("icadmin")
有关 InnoDB 集群管理帐户的更多信息,请参见 手动配置 InnoDB 集群管理帐户。
当您运行 dba.createCluster()
时,以及当您通过运行
将另一个服务器实例添加到 InnoDB 集群时,以下错误将记录到 MySQL 服务器实例的错误日志中。这些消息无害,与 AdminAPI 启动组复制的方式有关Cluster
.addInstance()
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 集群,请禁用回环接口。
要检查集群是否已创建,请使用集群实例的 status()
函数。请参见 使用
检查集群状态。Cluster
.status()
一旦服务器实例属于集群,使用 MySQL Shell 和 AdminAPI 管理它们非常重要。一旦实例被添加到集群,尝试手动更改实例上的组复制配置是不受支持的。类似地,在使用 AdminAPI 配置实例后,修改对 InnoDB 集群至关重要的服务器变量(如 server_uuid
)是不受支持的。
使用 MySQL Shell 创建集群时,您可以设置在实例被驱逐出集群之前等待的时间,例如当它们变得无法访问时。将 expelTimeout
选项传递给 dba.createCluster()
操作,它将配置种子实例上的 group_replication_member_expel_timeout
变量。 expelTimeout
选项可以取 0 到 3600 范围内的整数值。所有运行 MySQL 服务器 8.0.13 及更高版本的实例,这些实例被添加到配置了 expelTimeout
的集群,都会自动配置为具有与种子实例上配置的相同的 expelTimeout
值。
有关可以传递给 dba.createCluster()
的其他选项的信息,请参见 第 7.9 节“修改或解散 InnoDB 集群”。
可以使用 dba.createCluster()
启用或禁用 group_replication_paxos_single_leader
。
这只能由 MySQL Shell 在 MySQL 服务器 8.0.31 或更高版本上设置,因为 MySQL Shell 需要 replication_group_communication_information
表中提供的 WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE
信息,该信息是在 MySQL 8.0.31 中引入的。
创建集群时,如果您有安全要求,要求 AdminAPI 自动创建的所有帐户都具有严格的身份验证要求,则可以为 replicationAllowedHost
集群配置选项设置值。 replicationAllowedHost
选项意味着 AdminAPI 自动创建的所有帐户只能从允许的主机连接,使用严格的基于子网的过滤。以前, InnoDB 集群创建的内部用户帐户 默认情况下,可以从任何地方访问。
replicationAllowedHost
选项可以取字符串值。例如,要创建名为 testCluster
的集群并将 replicationAllowedHost
选项设置为 192.0.2.0/24
,请发出
mysql-js> dba.createCluster('testCluster', {replicationAllowedHost:'192.0.2.0/24'})
InnoDB 集群支持为 MySQL 8.0.27 中的组复制引入的 MySQL 通信栈。
选项 communicationStack: XCOM|MYSQL
设置组复制系统变量 group_replication_communication_stack
的值。
例如
mysql-js> dba.createCluster("testCluster", {communicationStack: "xcom"})
对于所有为 MySQL 8.0.27 或更高版本创建的新集群, MYSQL
通信栈是默认设置。
有关更多信息,请参见 第 7.5.9 节“配置组复制通信栈”。