4.4.1create cluster命令

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_mgmdndbdmysqld。当集群使用 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是根据流程类型列出的,顺序如下:

    1. 管理节点进程 ( ndb_mgmd)

    2. 数据节点进程(MySQL Cluster NDB 6.3ndbdMySQL Cluster NDB 7.0 及更高版本ndbdndbmtd

    3. SQL 节点进程 ( mysqld)

    4. 自定义 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_mgmdmysqld或手动分配小于 49 的节点 IDndbapi 失败并报错;但是,该限制已通过两种方式放宽:

    • 对于 MySQL Cluster Manager 1.3.1 及更高版本,该 --import 选项会导致忽略此限制,如本节后面所述。

    • 对于 MySQL Cluster Manager 1.3.4 及更高版本,该限制现已完全解除。但是,仍然建议您遵循为数据节点保留节点 ID 1 到 48 的最佳实践。

    列表中引用的每个主机都必须是为其create cluster定义包的站点的一部分。

    对于 和 类型的进程mysqldndbapi主机名是必需的,但在运行的集群中不强制执行。也就是说, [api]在cluster config.ini文件中创建了一个section,但是没有 HostName指定参数;因此,mysqldorndbapi 可以从任何主机连接。(目前,没有办法使用 MySQL Cluster Manager 来指定一个mysqldndbapi进程被限制为从单个主机连接。)

  • 集群的名称。创建集群后,此名称将用于在其他集群管理命令(如 、 和 )中delete cluster引用start clusterstop 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 clusterrestart clusterstart processstop 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进程分配一个唯一的端口。