create cluster {--package=|-P }package_name
{--processhosts=|-R }process_host_list cluster_name
[(--import|-m) cluster_name] [--verbose | -v]
process_host_list:
process_name[:node_id]@host[,process_name@host[,...]]
process_name:
{ndb_mgmd|ndbd|ndbmtd|mysqld|ndbapi}
此命令创建一个由 MySQL 集群管理器管理的集群。但是,它不会启动集群(请参阅
第 4.4.7 节“start cluster
命令”)。
此命令还可用于创建一个专门指定为目标的集群,用于导入另一个尚未受 MySQL Cluster Manager 控制的集群,如本节后面所述,通过使用该--import
选项。另见第 3.5 节,“将 MySQL 集群导入 MySQL 集群管理器”。
create cluster
需要以下参数:
A
package_name
,作为--package
选项的值提供(缩写形式:-P
)。这必须是以前使用 注册的包的名称add package
。MySQL Cluster 进程的列表 (
process_host_list
),它们将在其上运行的主机,以及(可选)它们的节点 ID,作为--processhosts
选项的值(缩写形式:)提供-R
,列表项以逗号分隔。与在 MySQL Cluster Manager 命令中作为选项值传递的其他列表一样,您不得在逗号前后使用空格。中的每一项
process_host_list
都由 MySQL Cluster 进程的名称组成——可能以冒号 (:
) 字符后跟进程节点 ID 为后缀——使用双耳 (@
) 符号连接它所在的主机的名称(有时称为“ at ”符号)。进程的允许值为ndb_mgmd
、ndbd
和mysqld
。当集群使用 MySQL Cluster NDB 7.0 或更高版本时,您还可以使用ndbmtd
作为进程名称;换句话说,有效的进程名称是 MySQL Cluster 进程守护程序二进制文件的名称。如果指定了节点 ID,则它们必须在所定义节点类型的允许范围内。为了支持在 MySQL Cluster Manager 下使用集群运行您自己的 NDB API 应用程序,也可以将其
ndbapi
用作进程类型。此类应用程序可以连接到托管集群。目前,MySQL Cluster Manager 只能识别 NDB API 应用程序连接到集群;NDB API 应用程序本身必须手动启动、停止和配置。也可以在 没有任何主机的情况下指定一个或多个“空闲”
mysqld
和 进程。ndbapi
为此,只需使用通配符*
(星号字符)代替主机名或 IP 地址,如下所示:“免费”
mysqld
流程:mysqld@*
“免费”
ndbapi
流程:ndbapi@*
也可以为 “自由”进程指定一个节点 ID。(如果没有指定,MySQL Cluster Manager 会自动分配一个合适的节点 ID。)
允许以这种方式在没有主机的情况下指定的
mysqld
进程或ndbapi
进程从可以通过网络访问集群的任何主机连接到集群。否则,该进程可能仅从指定的主机连接到集群。按照惯例,项目中的项目
process_host_list
是根据流程类型列出的,顺序如下:管理节点进程 (
ndb_mgmd
)数据节点进程(MySQL Cluster NDB 6.3:
ndbd
;MySQL Cluster NDB 7.0 及更高版本:ndbd
,ndbmtd
)SQL 节点进程 (
mysqld
)自定义 NDB API 应用程序 (
ndbapi
)有关编写自己的 NDB API 应用程序的信息,请参阅MySQL Cluster API 开发人员指南中 的 NDB API。
虽然列出项目的顺序不会影响
create cluster
命令是否成功,但我们建议您遵循此约定以提高可读性,并与其他 MySQL 集群管理工具(如ndb_mgm )兼容。create cluster
导致集群节点ID被连续分配,按照节点在中指定的顺序,process_host_list
数据节点进程的节点ID从1开始,数据节点进程以外的进程的节点ID从49开始。对于MySQL Cluster Manager 1.3 .3 及更早版本,尝试为ndb_mgmd
、mysqld
或手动分配小于 49 的节点 IDndbapi
失败并报错;但是,该限制已通过两种方式放宽:对于 MySQL Cluster Manager 1.3.1 及更高版本,该
--import
选项会导致忽略此限制,如本节后面所述。对于 MySQL Cluster Manager 1.3.4 及更高版本,该限制现已完全解除。但是,仍然建议您遵循为数据节点保留节点 ID 1 到 48 的最佳实践。
列表中引用的每个主机都必须是为其
create cluster
定义包的站点的一部分。对于 和 类型的进程
mysqld
,ndbapi
主机名是必需的,但在运行的集群中不强制执行。也就是说,[api]
在clusterconfig.ini
文件中创建了一个section,但是没有HostName
指定参数;因此,mysqld
orndbapi
可以从任何主机连接。(目前,没有办法使用 MySQL Cluster Manager 来指定一个mysqld
或ndbapi
进程被限制为从单个主机连接。)集群的名称。创建集群后,此名称将用于在其他集群管理命令(如 、 和 )中
delete cluster
引用start cluster
它stop cluster
。与 MySQL Cluster Manager 一起使用的其他对象名称一样,cluster_name
根据本文档其他地方给出的标识符规则,它们必须有效(请参阅第 4 章,MySQL Cluster Manager 客户端命令)。
此命令的附加--verbose
选项会导致create cluster
在执行时输出额外信息,如本节后面所示。
该--import
选项在 MySQL Cluster Manager 1.3.0 中引入,将集群标记为作为目标创建,用于导入在 MySQL Cluster Manager 外部创建的集群。此选项会导致集群的状态显示import
在 的输出中show status
,如下所示:
mcm> show status --process newcluster;
+--------+----------+-------+--------+-----------+--------------+
| NodeId | Process | Host | Status | Nodegroup | Package |
+--------+----------+-------+--------+-----------+--------------+
| 1 | ndb_mgmd | alpha | import | | newpackage |
| 5 | ndbd | beta | import | n/a | newpackage |
| 6 | ndbd | gamma | import | n/a | newpackage |
| 10 | mysqld | delta | import | | newpackage |
| 11 | ndbapi | * | import | | |
+--------+----------+-------+--------+-----------+--------------+
6 rows in set (0.04 sec)
如果在针对此集群执行命令之前执行这些命令,则
具有该import
状态会导致任何命令start cluster
、
restart cluster
、
start process
和
stop process
失败。import
cluster
也不可能
upgrade cluster
在具有import
状态进程的集群上执行。此集群上的其他操作继续正常执行。
从 MySQL Cluster Manager 1.3.1 开始,该--import
选项还覆盖了通常的要求(在 MySQL Cluster Manager 1.3.4 之前有效),即分配给数据节点以外的进程的节点 ID 必须大于 48。(错误 #18181039)
虽然可以导入到没有使用此选项创建的集群中,但不建议这样做,因为集群无法防止意外执行前面列出的任何操作,这可能会导致混淆或误导性错误,并可能导致其他问题. 因此,强烈建议您
--import
在这种情况下始终使用创建集群的选项。
有关将集群导入 MySQL Cluster Manager 的更多信息(包括示例),请参阅 第 3.5 节,“将 MySQL 集群导入 MySQL Cluster Manager”。
例子
考虑在 MySQL Cluster Manager 客户端中发出的以下命令,它创建了一个名为 的集群mycluster
:
mcm> create cluster --package=mypackage
-> --processhosts=ndb_mgmd@flundra,ndbd@tonfisk,ndbd@grindval,mysqld@flundra
-> mycluster;
+------------------------------+
| Command result |
+------------------------------+
| Cluster created successfully |
+------------------------------+
1 row in set (7.71 sec)
正如刚才显示的命令所定义的,
mycluster
由四个节点组成:主机上的管理节点flundra
;两个数据节点——每个主机上tonfisk
一个grindval
;和一个 SQL 节点,也在 host 上
flundra
。
使用该--verbose
选项会导致命令打印类似于命令生成的输出
list processes
,如下所示:
mcm> create cluster --verbose --package=mypackage
-> --processhosts=ndb_mgmd@flundra,ndbd@tonfisk,ndbd@grindval,mysqld@flundra
-> mycluster;
+--------+----------+----------+
| NodeId | Name | Host |
+--------+----------+----------+
| 49 | ndb_mgmd | flundra |
| 1 | ndbd | tonfisk |
| 2 | ndbd | grindval |
| 50 | mysqld | flundra |
+--------+----------+----------+
4 rows in set (0.32 sec)
您还可以创建此集群, 允许mysqld进程从任何能够通过网络访问其他集群主机的主机连接到集群,如下所示:
mcm> create cluster --package=mypackage
-> --processhosts=ndb_mgmd@flundra,ndbd@tonfisk,ndbd@grindval,mysqld@*
-> mycluster;
+------------------------------+
| Command result |
+------------------------------+
| Cluster created successfully |
+------------------------------+
1 row in set (7.71 sec)
在“免费” ndbapi
进程的情况下,不必在ndbapi
进程运行的主机上安装 MySQL Cluster Manager 软件。
set
可以在启动集群之前使用命令
对新创建的集群进行配置更改。这通常比在集群启动后执行更可取,因为set
用于在正在运行的集群中进行配置更改的命令可能需要滚动重启,而具有许多节点或大量数据(或两者)的集群的滚动重启可能需要大量的时间来完成。
在同一台主机上 创建具有多个 mysqld进程的集群时,MySQL 集群管理器会为每个进程分配 MySQL 默认端口 (3306)。因此,您必须为集群中的每个 mysqld进程分配一个唯一的端口。