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

    1. 管理节点进程 ( ndb_mgmd)

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

    3. SQL 节点进程 ( mysqld)

    4. 自定义 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_mgmdmysqld或手动分配小于 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定义包的站点的一部分。

    对于 和 类型的进程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 外部创建的集群的目标。此选项会导致集群的状态显示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状态进程的集群上执行。此集群上的其他操作继续正常执行。

警告

虽然可以导入到没有使用此选项创建的集群中,但不建议这样做,因为集群无法防止意外执行前面列出的任何操作,这可能会导致混淆或误导性错误,并可能导致其他问题. 因此,强烈建议您 --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.

Note

在同一台主机上 创建具有多个 mysqld进程的集群时,MySQL 集群管理器会为每个进程分配 MySQL 默认端口 (3306)。因此,您必须为集群中的每个 mysqld进程分配一个唯一的端口。