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 NDB 集群导入 MySQL 集群管理器”。
create cluster
需要以下参数:
A
package_name
,作为--package
选项的值提供(缩写形式:-P
)。这必须是以前使用 注册的包的名称add package
。MySQL NDB Cluster 进程的列表 (
process_host_list
),它们将在其上运行的主机,以及它们的节点 ID(可选)作为--processhosts
选项的值(缩写形式 :)提供-R
,列表项以逗号分隔。与在 MySQL Cluster Manager 命令中作为选项值传递的其他列表一样,您不得在逗号前后使用空格。中的每一项
process_host_list
都由 MySQL NDB Cluster 进程的名称组成——可能以冒号 (:
) 字符后跟进程节点 ID 为后缀——使用双耳 (@
) 符号连接它所在的主机的名称(也有时称为“ at ”符号)。进程的允许值为ndb_mgmd
、ndbd
和mysqld
。当集群使用 MySQL NDB Cluster 7.0 或更高版本时,您还可以使用ndbmtd
作为进程名称;换句话说,一个有效的进程名称是 MySQL NDB 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 NDB Cluster 6.3:
ndbd
;MySQL NDB Cluster 7.0 及更高版本:ndbd
,ndbmtd
)SQL 节点进程 (
mysqld
)自定义 NDB API 应用程序 (
ndbapi
)有关编写自己的 NDB API 应用程序的信息,请参阅MySQL NDB Cluster API 开发人员指南中的 NDB API 。
虽然列出项目的顺序不影响
create cluster
命令是否成功,但我们建议您遵循此约定以提高可读性,并与其他 MySQL NDB Cluster 管理工具(例如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.4 及更高版本,该限制已完全解除。尽管如此,仍然建议您遵循为数据节点保留节点 ID 1 到 48 的最佳实践。笔记NDB 8.0 最多支持 144 个数据节点(对于 8.0.18 及更高版本)。因此,
create cluster
为数据节点进程分配以1开头的节点ID,为非数据节点进程分配以145开头的节点ID。在为NDB 8.0集群手动分配节点ID时,建议您遵循保留节点ID的最佳实践1 到 144 为数据节点。列表中引用的每个主机都必须是为其
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 外部创建的集群的目标。此选项会导致集群的状态显示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
状态进程的集群上执行。此集群上的其他操作继续正常执行。
虽然可以导入到没有使用此选项创建的集群中,但不建议这样做,因为集群无法防止意外执行前面列出的任何操作,这可能会导致混淆或误导性错误,并可能导致其他问题. 因此,强烈建议您
--import
在这种情况下始终使用创建集群的选项。
有关将集群导入 MySQL Cluster Manager 的更多信息,包括示例,请参阅 第 3.5 节,“将 MySQL NDB 集群导入 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 软件。
Configuration changes to the newly-created cluster can be made
using the set
command prior to
starting the cluster. This is often preferable to doing after
the cluster has been started, since set
commands used to make configuration changes in a running cluster
can require a rolling restart, and rolling restarts of clusters
having many nodes or large quantities of data (or both) may take
a great deal of time to complete.
在同一台主机上 创建具有多个 mysqld进程的集群时,MySQL 集群管理器会为每个进程分配 MySQL 默认端口 (3306)。因此,您必须为集群中的每个 mysqld进程分配一个唯一的端口。