要支持 NDB 集群,您应该更新 my.cnf
文件,如下面的示例所示。您也可以在执行可执行文件时在命令行上指定这些参数。
这里显示的选项不应与在 config.ini
全局配置文件中使用的选项混淆。全局配置选项将在本节后面讨论。
# my.cnf
# example additions to my.cnf for NDB Cluster
# (valid in MySQL 8.3)
# enable ndbcluster storage engine, and provide connection string for
# management server host (default port is 1186)
[mysqld]
ndbcluster
ndb-connectstring=ndb_mgmd.mysql.com
# provide connection string for management server host (default port: 1186)
[ndbd]
connect-string=ndb_mgmd.mysql.com
# provide connection string for management server host (default port: 1186)
[ndb_mgm]
connect-string=ndb_mgmd.mysql.com
# provide location of cluster configuration file
# IMPORTANT: When starting the management server with this option in the
# configuration file, the use of --initial or --reload on the command line when
# invoking ndb_mgmd is also required.
[ndb_mgmd]
config-file=/etc/config.ini
(有关连接字符串的更多信息,请参阅 第 25.4.3.3 节,“NDB 集群连接字符串”。)
# my.cnf
# example additions to my.cnf for NDB Cluster
# (works on all versions)
# enable ndbcluster storage engine, and provide connection string for management
# server host to the default port 1186
[mysqld]
ndbcluster
ndb-connectstring=ndb_mgmd.mysql.com:1186
一旦您使用 NDBCLUSTER
和 ndb-connectstring
参数在 my.cnf
文件的 [mysqld]
部分中启动了 mysqld 进程,您就不能执行任何 CREATE TABLE
或 ALTER TABLE
语句,除非您已经启动了集群。否则,这些语句将以错误形式失败。这是设计的结果。
您也可以在集群 my.cnf
文件中使用单独的 [mysql_cluster]
部分,以便所有可执行文件读取和使用这些设置:
# cluster-specific settings
[mysql_cluster]
ndb-connectstring=ndb_mgmd.mysql.com:1186
有关在 my.cnf
文件中可以设置的其他 NDB
变量,请参阅 第 25.4.3.9.2 节,“NDB 集群系统变量”。
NDB 集群全局配置文件通常命名为 config.ini
(但这不是必需的)。如果需要,它将被 ndb_mgmd 在启动时读取,并可以放置在可以被其读取的任何位置。配置文件的位置和名称可以使用 --config-file=
选项指定,以便在命令行上使用 ndb_mgmd。这个选项没有默认值,并且如果 ndb_mgmd 使用配置缓存时将被忽略。path_name
NDB 集群全局配置文件使用 INI 格式,该格式由带有方括号的部分标题、后跟参数名称和值组成。从标准 INI 格式的一个偏离是参数名称和值可以用冒号 (:
) 或等号 (=
) 分隔;然而,等号是首选的。另一个偏离是部分不是通过部分名称唯一标识的,而是通过在部分中指定的唯一 ID。
大多数参数都有默认值,也可以在 config.ini
文件中指定。要创建默认值部分,只需将单词 default
添加到部分名称中。例如,[ndbd]
部分包含特定数据节点的参数,而 [ndbd default]
部分包含所有数据节点的参数。假设所有数据节点都应该使用相同的数据内存大小。要配置它们,请创建一个 [ndbd default]
部分,其中包含一个 DataMemory
行,以指定数据内存大小。
如果使用,[ndbd default]
部分必须在配置文件中的任何 [ndbd]
部分之前。这也适用于其他类型的 default
部分。
在某些旧版本的 NDB 集群中,没有默认值 NoOfReplicas
,总是需要在 [ndbd default]
部分明确指定。虽然这个参数现在有了默认值 2,这是在大多数常见场景中推荐的设置,但是仍然建议明确设置这个参数。
全局配置文件必须定义集群中的计算机和节点,以及这些节点所在的计算机。下面是一个简单的配置文件示例,用于一个由一个管理服务器、两个数据节点和两个 MySQL 服务器组成的集群:
# file "config.ini" - 2 data nodes and 2 SQL nodes
# This file is placed in the startup directory of ndb_mgmd (the
# management server)
# The first MySQL Server can be started from any host. The second
# can be started only on the host mysqld_5.mysql.com
[ndbd default]
NoOfReplicas= 2
DataDir= /var/lib/mysql-cluster
[ndb_mgmd]
Hostname= ndb_mgmd.mysql.com
DataDir= /var/lib/mysql-cluster
[ndbd]
HostName= ndbd_2.mysql.com
[ndbd]
HostName= ndbd_3.mysql.com
[mysqld]
[mysqld]
HostName= mysqld_5.mysql.com
前面的示例仅供熟悉 NDB 集群的基本配置,几乎肯定不能满足生产环境的需求。请参阅 第 25.4.3.2 节,“Recommended Starting Configuration for NDB Cluster”,其中提供了一个更完整的起始配置示例。
每个节点在 config.ini
文件中都有自己的部分。例如,这个集群有两个数据节点,因此前面的配置文件包含两个 [ndbd]
部分,定义了这些节点。
不要在 config.ini
文件中将注释放在同一行上,因为这将导致管理服务器无法启动,因为它无法解析配置文件。
config.ini 文件的部分
可以在 config.ini
配置文件中使用六个不同的部分,如下列表所示:
-
[computer]
:定义集群主机。这不是设置可行的 NDB 集群所必需的,但可以在设置大型集群时作为一种便捷方式。请参阅 第 25.4.3.4 节,“Defining Computers in an NDB Cluster”,以获取更多信息。 -
[ndbd]
:定义集群数据节点 (ndbd 进程)。请参阅 第 25.4.3.6 节,“Defining NDB Cluster Data Nodes”,以获取详细信息。 -
[mysqld]
:定义集群的 MySQL 服务器节点(也称为 SQL 或 API 节点)。请参阅 第 25.4.3.7 节,“Defining SQL and Other API Nodes in an NDB Cluster”,以获取 SQL 节点配置的讨论。 -
[mgm]
或[ndb_mgmd]
:定义集群管理服务器 (MGM) 节点。请参阅 第 25.4.3.5 节,“Defining an NDB Cluster Management Server”,以获取管理节点配置的信息。 -
[tcp]
:定义集群节点之间的 TCP/IP 连接,TCP/IP 是默认的传输协议。通常,不需要在[tcp]
或[tcp default]
部分中设置,因为集群会自动处理;但是,在某些情况下,可能需要覆盖集群提供的默认值。请参阅 第 25.4.3.10 节,“NDB Cluster TCP/IP Connections”,以获取可用的 TCP/IP 配置参数和如何使用它们的信息。(你可能还想查看 第 25.4.3.11 节,“NDB Cluster TCP/IP Connections Using Direct Connections”,以获取更多信息。) -
[shm]
:定义节点之间的共享内存连接。在 MySQL 8.3 中,默认启用,但仍应视为实验性功能。请参阅 第 25.4.3.12 节,“NDB Cluster Shared-Memory Connections”,以获取共享内存连接的讨论。 -
[sci]
:定义集群数据节点之间的可扩展一致性接口连接。不支持 NDB 8.3。
可以为每个部分定义 default
值。如果使用,default
部分应该在其他相同类型的部分之前出现。例如,[ndbd default]
部分应该在 [ndbd]
部分之前出现。
NDB 集群参数名称不区分大小写,除非在 MySQL Server my.cnf
或 my.ini
文件中指定。