原文:docs.oracle.com/javase/tutorial/reallybigindex.html
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-limits.html
25.2.7.2 NDB Cluster 与标准 MySQL 限制的限制和差异
本节列出了与标准MySQL 不同或未在标准MySQL 中发现的MySQL 集群限制。
内存使用和恢复。向NDB表插入数据时会消耗内存,删除时不会自动恢复,但它遵循以下规则:
当您在NDB 表上使用DELETE 语句时,仅在插入同一表时才会回收先前删除的行所使用的内存。但是,运行OPTIMIZE TABLE 可以使该内存通常可供重用。
集群的滚动重新启动还会释放已删除行所使用的内存。请参阅执行MySQL 集群的滚动重新启动。
对NDB 表执行DROP TABLE 或TRUNCATE TABLE 操作会释放该表使用的内存,以便任何NDB 表可以重用它,无论它是同一个表还是另一个NDB 表。
消息
请注意,TRUNCATE TABLE 会删除并重新创建表。请参见TRUNCATE TABLE 语句。
由于集群配置的限制。 有一些可以配置的硬限制,但限制是由集群可用的主内存设置的。有关配置参数的完整列表,请参阅第25.4.3 节“MySQL 集群配置文件”。大多数配置参数都可以在线升级。这些硬性限制包括:
数据库内存大小和索引内存大小(DataMemory 和IndexMemory)。
DataMemory 被分配为32KB 页。每个DataMemory页使用后,都会被分配到一个特定的表。一旦分配,该内存只能通过删除表来释放。
有关更多信息,请参阅定义MySQL 集群数据节点。
每个事务中可以执行的最大操作数由配置参数MaxNoOfConcurrentOperations 和MaxNoOfLocalOperations 设置。
消息
批量加载、TRUNCATE TABLE 和ALTER TABLE 被视为执行多个事务的特殊情况,因此它们不受此限制的影响。
与表和索引相关的各种限制。例如,集群中有序索引的最大数量由MaxNoOfOrderedIndexes决定,每个表的有序索引的最大数量为16。
**节点和数据对象的最大限制。 **以下限制适用于集群节点和元数据对象的数量:
最大数据节点数为144。 (对于NDB 7.6 及更早版本,此数字为48。)
数据节点的节点ID 必须在1-144 范围内。
管理节点和API节点可以使用1255之间的节点ID。
MySQL Cluster 中的节点总数最大为255。此数字包括所有SQL 节点(MySQL 服务器)、API 节点(访问除MySQL 服务器之外的集群的应用程序)、数据节点和管理服务器。
在当前版本的MySQL Cluster中,元数据对象的最大数量为20320。此限制是硬编码的。
有关更多信息,请参阅第25.2.7.11 节,“MySQL Cluster 8.0 中解决的先前MySQL 集群问题”。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-transactions.html
25.2.7.3 NDB 集群中与事务处理相关的限制
NDB 集群在处理事务时存在一些限制。这些包括:
事务隔离级别。 NDBCLUSTER 存储引擎仅支持READ COMMITTED 事务隔离级别。 (例如,InnoDB支持READ COMMITTED,READ UNCOMMITTED,REPEATABLE READ和SERIALIZABLE。)NDB以每行为基础实现READ COMMITTED,当读取请求到达存储该行的数据节点时,必须返回什么?记得。这是当前该行的最后提交版本。
未提交的数据永远不会返回,但如果修改多行的事务与读取相同行的事务同时提交,则执行读取的事务在这些行之前和之后可能会有不同的行”值。观察到的。行值,或两者。这是因为可以在另一个事务提交之前或之后处理特定的行读取请求。
为了确保特定事务仅读取上一个或下一个值,您可以使用SELECT . LOCK IN SHARE MODE 强制行锁定。在这种情况下,锁将一直保持到所属事务提交为止。使用行锁还会导致以下问题:
锁等待超时错误频率增加,并发性降低
读取需要提交阶段,这会增加事务处理开销。
可能会耗尽可用并发锁的数量,受MaxNoOfConcurrentOperations 限制
NDB 在所有读取操作上使用READ COMMITTED,除非使用LOCK IN SHARE MODE 或FOR UPDATE 等修饰符。 LOCK IN SHARE MODE 使用共享行锁,FOR UPDATE 使用排它行锁。唯一键读取由NDB 自动升级,以确保读取的自一致性。 BLOB 读取还使用额外的锁来保持一致性。
有关MySQL 集群的事务隔离级别实现如何影响NDB 数据库备份和恢复的信息,请参阅第25.6.8.4 节“MySQL 集群备份故障排除”。
事务和BLOB 或TEXT 列。 NDBCLUSTER 使用MySQL BLOB 或TEXT 数据类型仅存储MySQL 可见表中列值的一部分。 BLOB 或TEXT 的其余部分存储在您无法访问的单独内部表中。这会产生两个相关问题,在对具有以下类型的列的表运行SELECT 语句时需要注意这些问题:
对于来自MySQL Cluster 表的SELECT:如果SELECT 包含BLOB 或TEXT 列,则READ COMMITTED 事务隔离级别将转换为带读锁的读取。这样做是为了确保一致性。
对于通过唯一键查找使用BLOB 或TEXT 数据类型检索列并在事务内执行的SELECT,将在表上持有共享读锁,直到事务提交或中止。
使用索引或表扫描的查询不会出现此问题,即使针对包含BLOB 或TEXT 列的NDB 表也是如此。
例如,考虑使用以下CREATE TABLE 语句定义的表t。
创建表t(
INT NOT NULL AUTO_INCRMENT 主键,
bINT 不为NULL,
cINT 不为空,
d 文本,
索引i(b),
唯一键u(c)
) 引擎=NDB,
以下对t 的查询使用唯一键查找,从而产生共享读锁。
从t 中选择*,其中c=1;
但是,此处显示的四个查询都不会导致共享读锁。
从t 中选择*,其中b=1;
从t 中选择*,其中d=\’1\’;
从t 中选择*;
如果a=1,则选择b、c。
这是由于四个查询,第一个使用索引扫描,第二个和第三个查询使用表扫描,第四个使用主键搜索,但没有检索到BLOB 或TEXT 列值。
您可以通过避免检索BLOB 或TEXT 列的唯一键查找查询,或者在无法避免此类查询时尽快提交事务来最大程度地减少共享读锁定问题。
暂时错误。 首次启动节点时,您可能会遇到临时故障(错误1204)、分布更改和类似的临时错误。
由于节点故障而发生错误。 数据节点停机或故障可能会导致各种节点故障错误。 (但是,在计划的集群关闭期间不得中止事务。)
无论哪种情况,都必须在应用程序内处理生成的错误。为此,您必须重试该事务。
另请参阅MySQL 集群和标准MySQL 限制和限制。
翻译:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-database-objects.html
25.2.7.4 NDB 集群错误处理
某些数据库对象(例如表和索引)在使用NDBCLUSTER 存储引擎时具有不同的限制。
数据库对象的数量。 单个MySQL Cluster 中所有NDB 数据库对象(包括数据库、表和索引)的最大数量限制为20320。
每个表的属性。 属于特定表的属性(即列和索引)的最大数量为512。
每个键的属性。 每个键的最大属性数为32。
行大小。在NDB 8.0 中,行允许的最大大小为30,000 字节(以前版本中为14,000 字节)。
每个BLOB 或TEXT 列为此总数贡献256 + 8=264 字节。这包括JSON 列。有关这些类型的更多信息,请参阅字符串类型存储要求和JSON 存储要求。
此外,NDB 表中固定宽度列的最大偏移量为8188 字节。如果您尝试创建违反此限制的表,您将收到NDB 错误851 超出最大固定大小列偏移量。对于基于内存的列,您可以通过使用可变宽度列类型(例如VARCHAR)或将列定义为COLUMN_FORMAT=DYNAMIC 来解决此限制。这不适用于存储在磁盘上的列。对于基于磁盘的列,一个或多个表中的基于磁盘的列,除了用于创建表的CREATE TABLE 语句中定义的最后一个基于磁盘的列之外的所有列的总宽度都不同,您可以通过重新排列来做到这一点。这。超过8188 字节,减去某些数据类型(例如CHAR 和VARCHAR)上可能发生的舍入。否则,您将需要使用内存存储来替换有问题的列。
每个表的BIT 列存储。 对于指定的NDB 表,所有BIT 列组合的最大宽度为4096。
固定列存储。 MySQL Cluster 8.0 支持每个数据片段最多128 TB 的FIXED 列。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-unsupported.html
25.2.7.5 NDB Cluster 中与数据库对象相关的限制
NDB 表不支持其他存储引擎支持的许多功能。尝试在MySQL Cluster 中使用任何这些功能本身不会产生错误,但它会产生错误,因为应用程序希望支持或强制执行这些功能。引用这些功能的语句必须在语法上和其他方面有效,即使它们实际上被NDB 忽略。
索引前缀。 NDB 表不支持索引前缀。如果在CREATE TABLE、ALTER TABLE 和CREATE INDEX 等语句的索引规范中使用前缀,则NDB 不会创建前缀。
包含索引前缀以及创建或更改NDB 表的语句在语法上必须有效。例如,以下语句始终会导致错误1089 Invalid prefix key,无论存储引擎如何。使用的键部分不是字符串,使用的长度比键部分长,或者存储引擎不支持唯一前缀键。
创建表t1 (
c1 INT 不为NULL,
*c2 VARCHAR(100),
索引i1 (c2(500))* );
这是由于SQL 语法规则规定索引的前缀不能大于其本身。
保存点和回滚。与MyISAM 类似,保存点和回滚到保存点将被忽略。
坚持不懈。 磁盘上没有持久提交。提交会被复制,但不能保证日志会在提交时刷新到磁盘。
复制。 不支持基于语句的复制。配置集群复制时使用–binlog-format=ROW (或–binlog-format=MIXED)。有关更多信息,请参阅MySQL 集群复制。
使用全局事务标识符(GTID) 进行复制与MySQL Cluster 不兼容,并且在MySQL Cluster 8.0 中不受支持。使用NDB存储引擎时请勿启用GTID。这可能会导致问题,并且MySQL 集群复制可能会失败。
MySQL Cluster不支持半同步复制。
生成列。 NDB 存储引擎不支持虚拟生成的列上的索引。
与其他存储引擎一样,您可以在存储的生成列上创建索引,但请注意,NDB 使用DataMemory 来存储生成列,并使用IndexMemory 来存储索引。有关示例,请参阅MySQL 集群中的JSON 列和间接索引。
MySQL集群将对保存的生成列的更改写入二进制日志,但不记录对虚拟列的更改。这不会影响MySQL Cluster 复制或NDB 与其他MySQL 存储引擎之间的复制。
消息
有关NDB 中事务处理限制的更多信息,请参阅第25.2.7.3 节,“MySQL Cluster 中与事务处理相关的限制”。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-performance.html
25.2.7.6 NDB Cluster 中不支持或缺失的功能
以下性能问题是MySQL Cluster 特有的或特别明显的。
范围扫描。对NDB 存储引擎的顺序访问会导致查询性能问题。与MyISAM 和InnoDB 相比,执行多次范围扫描的成本也更高。
记录的可靠性在范围内。范围统计记录是可用的,但尚未经过充分测试,且不受官方支持。在某些情况下,这可能会导致查询计划不理想。您可以根据需要使用USE INDEX 或FORCE INDEX 修改执行计划。有关如何执行此操作的更多信息,请参阅索引技巧。
唯一的哈希索引。如果某些键为NULL,则无法使用使用USING HASH 创建的唯一哈希索引来访问表。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-exclusive-to-cluster.html
25.2.7.7 关于 NDB Cluster 性能的限制
NDB 存储引擎特定的限制包括:
机器架构。 集群内使用的所有机器必须具有相同的体系结构。这意味着托管节点的所有机器都必须是大端或小端,并且不能混合。例如,您无法将在x86 计算机上运行的数据节点发送到在PowerPC 上运行的管理节点。此限制不适用于仅运行mysql 的计算机或可能访问集群SQL 节点的其他客户端。
二进制日志。 MySQL Cluster 对于二进制日志记录有以下限制:
MySQL Cluster 无法为具有BLOB 列但没有主键的表生成二进制日志。
集群二进制日志中仅记录以下模式操作:该日志不会记录到执行该语句的mysqld 中。
创建表
其他桌子
删除表
创建数据库/创建模式
删除数据库/删除架构
创建表空间
更改表空间
删除表空间
创建日志文件组
修改日志文件组
删除日志文件组
模式操作。 当数据节点重新启动时,架构操作(DDL 语句)将被拒绝。执行在线升级或降级时也不支持模式操作。
分片副本的数量。分片副本数由NoOfReplicas数据节点配置参数决定,是NDB集群存储的所有数据的副本数。如果设置为1,则只有一个副本,不提供冗余,如果数据节点丢失,数据也会丢失。将此参数设置为2,可以保证冗余,即使某个数据节点发生故障也能保存数据。这是生产环境的默认推荐值。
支持将NoOfReplicas 设置为大于2 的值(最多4),但不需要防止数据丢失。
请参阅多个MySQL 集群节点的限制。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-disk-data.html
25.2.7.8 NDB Cluster 专有问题
磁盘数据对象的最大值和最小值。 以下最大和最小值适用于磁盘数据对象:
最大表空间数:2 (4294967296)
每个表空间的最大数据文件数:21 (65536)
表空间数据文件扩展区的最小和最大可能大小分别为32K 和2G。有关详细信息,请参阅CREATE TABLESPACE 语句。
此外,在使用NDB磁盘数据表时,您应该注意以下数据文件和范围问题:
数据文件使用DataMemory。其使用方式与内存数据相同。
数据文件使用文件描述符。请务必记住,数据文件始终处于打开状态。这意味着文件描述符始终在使用中并且不可用于其他系统任务。
该范围需要足够的DiskPageBufferMemory。您必须为此参数保留足够的空间,同时考虑所有扩展区使用的所有内存(扩展区数量乘以扩展区大小)。
磁盘数据表和无盘模式。 在无盘模式下运行集群时,不支持使用磁盘数据表。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-multiple-nodes.html
25.2.7.9 与 NDB 集群磁盘数据存储相关的限制
多个SQL 节点。 以下问题特定于NDBCLUSTER 存储引擎,并且与使用多个MySQL 服务器作为MySQL Cluster SQL 节点有关。
存储过程不是分布式的。 使用NDB 存储引擎的表上都支持存储过程、存储函数、触发器和定时事件,但它们不会在充当集群SQL 节点的MySQL 服务器之间自动传播;必须在每个SQL 节点上单独重新创建。请参阅MySQL 集群存储例程和触发器。
没有分布式表锁。 LOCK TABLES 语句或GET_LOCK() 调用仅对发出锁的SQL 节点有效;集群中的其他SQL 节点不会“看到”该锁。这适用于在操作过程中锁定表的语句所发出的锁。 (有关示例,请参阅下一项。)
使用NDBCLUSTER实现表锁可以通过API应用程序来完成,通过将LockMode设置为LM_Read或LM_Exclusive来确保所有应用程序都启动。有关如何执行此操作的更多信息,请参阅《MySQL Cluster API Guide》中对NdbOperation:getLockHandle() 的描述。
ALTER TABLE 操作。 如果运行多个MySQL 服务器(SQL 节点),则ALTER TABLE 在执行期间不会完全锁定。 (如上一条所述,MySQL Cluster 不支持分布式表锁。)
多个管理节点。 使用多个管理服务器时:
如果任一管理服务器在同一主机上运行,则不会在同一主机上的多个管理服务器之间自动分配节点ID,因此您必须为连接字符串中的节点分配显式ID。如果每个管理服务器位于不同的主机上,则无需执行此操作。
当管理服务器启动时,它首先检查同一MySQL集群中是否有其他管理服务器,并在成功连接到其他管理服务器后使用其配置数据。这意味着管理服务器–reload 和–initial 启动选项将被忽略,除非管理服务器是唯一正在运行的服务器。这也适用于具有多个管理节点的N。
DB 集群执行滚动重启时,只有当管理服务器是该 NDB 集群中唯一运行的管理服务器时,管理服务器才会读取自己的配置文件。有关更多信息,请参见第 25.6.5 节,“执行 NDB 集群的滚动重启”。
多个网络地址。 每个数据节点的多个网络地址不受支持。使用这些可能会导致问题:在数据节点故障的情况下,SQL 节点等待确认数据节点已关闭,但永远不会收到确认,因为到该数据节点的另一条路线仍然打开。这可能会导致集群无法运行。
注意
可以为单个数据节点使用多个网络硬件接口(例如以太网卡),但这些接口必须绑定到相同的地址。这也意味着在config.ini文件中每个连接中不可能使用多个[tcp]部分。有关更多信息,请参见第 25.4.3.10 节,“NDB 集群 TCP/IP 连接”。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-resolved.html
25.2.7.11 NDB Cluster 8.0 中已解决的以前的 NDB Cluster 问题
以前版本的 NDB Cluster 中存在的许多限制和相关问题已在 NDB 8.0 中得到解决。以下简要描述了这些问题:
数据库和表名。 在 NDB 7.6 及更早版本中,使用 NDB 存储引擎时,数据库名和表名的最大允许长度均为 63 字节,使用超过此限制的数据库名或表名的语句将失败并显示适当的错误。在 NDB 8.0 中,此限制被取消;NDB 数据库和表的标识符现在可以使用最多 64 个字符,与其他 MySQL 数据库和表名一样。
IPv6 支持。 在 NDB 8.0.22 之前,NDB Cluster 中节点之间连接所使用的所有网络地址必须使用或解析为 IPv4 地址。从 NDB 8.0.22 开始,NDB 支持所有类型的集群节点和使用 NDB API 或 MGM API 的应用程序的 IPv6 地址。
欲了解更多信息,请参阅升级或降级 NDB Cluster 时已知的问题。
多线程副本。 在 NDB 8.0.32 及更早版本中,不支持 NDB Cluster 复制的多线程副本。此限制在 NDB Cluster 8.0.33 中解除。
欲了解更多信息,请参阅第 25.7.3 节,“NDB Cluster 复制中已知的问题”。
25.3 NDB Cluster 安装
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-installation.html
25.3.1 在 Linux 上安装 NDB Cluster
25.3.2 在 Windows 上安装 NDB Cluster
25.3.3 NDB Cluster 的初始配置
25.3.4 NDB Cluster 的初始启动
25.3.5 带有表和数据的 NDB Cluster 示例
25.3.6 NDB Cluster 的安全关闭和重启
25.3.7 NDB Cluster 的升级和降级
25.3.8 NDB Cluster 自动安装程序(不再支持)
本节描述了规划、安装、配置和运行 NDB Cluster 的基础知识。虽然第 25.4 节,“NDB Cluster 的配置”中的示例提供了更深入的关于各种集群选项和配置的信息,但遵循这里概述的指导方针和程序的结果应该是一个符合最低可用性和数据保护要求的可用 NDB Cluster。
有关在不同版本之间升级或降级 NDB Cluster 的信息,请参阅第 25.3.7 节,“NDB Cluster 的升级和降级”。
本节涵盖了硬件和软件要求;网络问题;NDB Cluster 的安装;基本配置问题;启动、停止和重启集群;加载示例数据库;以及执行查询。
假设。 以下部分对集群的物理和网络配置做出了一些假设。这些假设将在接下来的几段中讨论。
集群节点和主机计算机。 集群由四个节点组成,每个节点位于单独的主机计算机上,并且每个节点在典型以太网网络上有一个固定的网络地址,如下所示:
表 25.5 示例集群中节点的网络地址
节点IP 地址管理节点 (mgmd)198.51.100.10SQL 节点 (mysqld)198.51.100.20数据节点 “A” (ndbd)198.51.100.30数据节点 “B” (ndbd)198.51.100.40
这个设置也显示在以下图表中:
图 25.4 NDB Cluster 多计算机设置
网络寻址。 为了简单(和可靠性)起见,这个How-To只使用数字 IP 地址。但是,如果您的网络上有 DNS 解析,可以在配置 Cluster 时使用主机名代替 IP 地址。或者,您可以使用hosts文件(通常是 Linux 和其他类 Unix 操作系统的/etc/hosts,Windows 上是C:\\WINDOWS\\system32\\drivers\\etc\\hosts,或者您操作系统的等效文件)来提供主机查找的方法(如果可用)。
从 NDB 8.0.22 开始,NDB支持所有 NDB Cluster 节点之间的 IPv6 连接。
在运行 NDB 8.0.22 及更高版本时,Linux 平台上已知的问题是操作系统内核需要提供 IPv6 支持,即使没有使用 IPv6 地址。这个问题在 NDB 8.0.34 及更高版本中已修复(Bug #33324817,Bug #33870642)。
如果您正在使用受影响的版本并希望在系统上禁用对 IPv6 的支持(因为您不打算为 NDB Cluster 节点使用任何 IPv6 地址),请在系统启动后执行以下操作:
$> sysctl -w net.ipv6.conf.all.disable_ipv6=1
$> sysctl -w net.ipv6.conf.default.disable_ipv6=1
(或者,您可以将相应的行添加到/etc/sysctl.conf中。)在 NDB Cluster 8.0.34 及更高版本中,前述操作是不必要的,如果您不想或不需要使用 IPv6 支持,可以简单地在 Linux 内核中禁用 IPv6 支持。
在 NDB 8.0.21 及更早版本中,用于与数据和管理节点进行连接的所有网络地址必须使用 IPv4 或可解析为 IPv4,包括 SQL 节点用于联系其他节点的地址。
潜在的主机文件问题。 当尝试为 Cluster 节点使用主机名时,一个常见问题是由于某些操作系统(包括一些 Linux 发行版)在安装过程中设置系统自身主机名的方式而引起的。考虑两台主机名为ndb1和ndb2的机器,都在cluster网络域中。Red Hat Linux(包括一些衍生版如 CentOS 和 Fedora)将以下条目放在这些机器的/etc/hosts文件中:
# ndb1 /etc/hosts:
127.0.0.1 ndb1.cluster ndb1 localhost.localdomain localhost
# ndb2 /etc/hosts:
127.0.0.1 ndb2.cluster ndb2 localhost.localdomain localhost
SUSE Linux(包括 OpenSUSE)将这些条目放在机器的/etc/hosts文件中:
# ndb1 /etc/hosts:
127.0.0.1 localhost
127.0.0.2 ndb1.cluster ndb1
# ndb2 /etc/hosts:
127.0.0.1 localhost
127.0.0.2 ndb2.cluster ndb2
在这两种情况下,ndb1将ndb1.cluster路由到一个环回 IP 地址,但从 DNS 获取ndb2.cluster的公共 IP 地址,而ndb2将ndb2.cluster路由到一个环回地址,并为ndb1.cluster获取公共地址。结果是每个数据节点连接到管理服务器,但无法知道其他数据节点何时连接,因此数据节点在启动时似乎挂起。
注意
你不能在config.ini中混合使用localhost和其他主机名或 IP 地址。在这种情况下的解决方案(除非对所有config.ini HostName条目使用 IP 地址)是从/etc/hosts中删除完全合格的主机名,并在config.ini中为所有集群主机使用这些主机名。
主机计算机类型。 在我们的安装方案中,每台主机计算机都是一台基于英特尔的台式个人电脑,运行着已安装到磁盘中的支持的操作系统,以标准配置运行,并且不运行任何不必要的服务。具备标准 TCP/IP 网络功能的核心操作系统应该足够了。另外为了简单起见,我们还假设所有主机上的文件系统设置是相同的。如果不是这样,请相应调整这些说明。
网络硬件。 每台机器上都安装了标准的 100 Mbps 或 1 千兆以太网卡,以及适当的卡驱动程序,并且所有四台主机通过标准的以太网网络设备(如交换机)连接在一起。(所有机器应使用具有相同吞吐量的网络卡。也就是说,集群中的所有四台机器应该有 100 Mbps 网卡 或者 所有四台机器应该有 1 Gbps 网卡。)NDB 集群在 100 Mbps 网络中工作;然而,千兆以太网提供更好的性能。
重要提示
NDB 集群 不 适用于吞吐量低于 100 Mbps 或遇到高延迟的网络。因此(以及其他原因),尝试在互联网等广域网上运行 NDB 集群不太可能成功,并且不受生产支持。
示例数据。 我们使用可从 MySQL 网站下载的world数据库(请参阅dev.mysql.com/doc/index-other.html)。我们假设每台机器都有足够的内存来运行操作系统、所需的 NDB 集群进程,并且(在数据节点上)存储数据库。
有关安装 MySQL 的一般信息,请参见第二章,安装 MySQL。有关在 Linux 和其他类 Unix 操作系统上安装 NDB 集群的信息,请参见第 25.3.1 节,“在 Linux 上安装 NDB 集群”。有关在 Windows 操作系统上安装 NDB 集群的信息,请参见第 25.3.2 节,“在 Windows 上安装 NDB 集群”。
有关 NDB 集群硬件、软件和网络要求的一般信息,请参见第 25.2.3 节,“NDB 集群硬件、软件和网络要求”。
25.3.1 在 Linux 上安装 NDB 集群
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-linux.html
25.3.1.1 在 Linux 上安装 NDB 集群二进制发行版
25.3.1.2 从 RPM 安装 NDB 集群
25.3.1.3 使用 .deb 文件安装 NDB 集群
25.3.1.4 在 Linux 上从源代码构建 NDB 集群
25.3.1.5 使用 Docker 容器部署 NDB 集群
本节涵盖了在 Linux 和其他类 Unix 操作系统上安装 NDB 集群的方法。虽然接下来的几节涉及 Linux 操作系统,但那里给出的说明和步骤应该很容易适应其他支持的类 Unix 平台。有关 Windows 系统的手动安装和设置说明,请参阅 第 25.3.2 节“在 Windows 上安装 NDB 集群”。
每台 NDB 集群主机必须安装正确的可执行程序。运行 SQL 节点的主机必须安装 MySQL 服务器二进制文件(mysqld)。管理节点需要管理服务器守护程序(ndb_mgmd);数据节点需要数据节点守护程序(ndbd或 ndbmtd)。在管理节点主机和数据节点主机上安装 MySQL 服务器二进制文件并非必需。建议在管理服务器主机上也安装管理客户端(ndb_mgm)。
在 Linux 上安装 NDB 集群可以使用来自 Oracle 的预编译二进制文件(以 .tar.gz 存档文件下载)、RPM 包(也可从 Oracle 获取)或源代码。这三种安装方法在接下来的章节中都有描述。
无论使用何种方法,在安装 NDB 集群二进制文件后,仍然需要为所有集群节点创建配置文件,然后才能启动集群。请参阅 第 25.3.3 节“NDB 集群的初始配置”。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-linux-binary.html
25.3.1.1 在 Linux 上安装 NDB 集群二进制发行版
本节涵盖了从 Oracle 提供的预编译二进制文件中为每种类型的集群节点安装正确可执行文件所需的步骤。
对于使用预编译二进制文件设置集群,每个集群主机安装过程的第一步是从 NDB 集群下载页面 下载二进制存档。 (对于最新的 64 位 NDB 8.0 版本,这是 mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64.tar.gz。)我们假设您已将此文件放置在每台机器的 /var/tmp 目录中。
如果需要自定义二进制文件,请参见 第 2.8.5 节,“使用开发源码树安装 MySQL”。
注意
完成安装后,不要立即启动任何二进制文件。我们将在配置节点后向您展示如何操作(参见 第 25.3.3 节,“NDB 集群的初始配置”)。
SQL 节点。 在每台指定为托管 SQL 节点的机器上,以系统 root 用户身份执行以下步骤:
检查您的 /etc/passwd 和 /etc/group 文件(或使用操作系统提供的用于管理用户和组的工具),查看系统上是否已经存在 mysql 组和 mysql 用户。 一些操作系统发行版在操作系统安装过程中会创建这些。 如果它们尚不存在,请创建一个新的 mysql 用户组,然后将 mysql 用户添加到此组中:
$> groupadd mysql
$> useradd -g mysql -s /bin/false mysql
useradd 和 groupadd 的语法在不同版本的 Unix 上可能略有不同,或者可能有不同的名称,如 adduser 和 addgroup。
切换到包含下载文件的目录,解压缩存档,并创建一个名为 mysql 的符号链接指向 mysql 目录。
注意
实际文件和目录名称根据 NDB 集群版本号而异。
$> cd /var/tmp
$> tar -C /usr/local -xzvf mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64.tar.gz
$> ln -s /usr/local/mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64 /usr/local/mysql
切换到 mysql 目录,并使用 mysqld –initialize 来设置系统数据库,如下所示:
$> cd mysql
$> mysqld –initialize
这为 MySQL root帐户生成一个随机密码。如果您不希望生成随机密码,可以将–initialize-insecure选项替换为–initialize。无论哪种情况,您都应在执行此步骤之前查看 Section 2.9.1, “Initializing the Data Directory”,以获取更多信息。另请参阅 Section 6.4.2, “mysql_secure_installation — Improve MySQL Installation Security”。
为 MySQL 服务器和数据目录设置必要的权限:
$> chown -R root .
$> chown -R mysql data
$> chgrp -R mysql .
将 MySQL 启动脚本复制到适当的目录,使其可执行,并设置在操作系统启动时启动:
$> cp support-files/mysql.server /etc/rc.d/init.d/
$> chmod +x /etc/rc.d/init.d/mysql.server
$> chkconfig –add mysql.server
(启动脚本目录可能因操作系统和版本而异,例如,在某些 Linux 发行版中,它是/etc/init.d。)
在这里,我们使用 Red Hat 的chkconfig来创建到启动脚本的链接;在您的平台上使用适当的方式,如 Debian 上的update-rc.d。
请记住,上述步骤必须在每台要放置 SQL 节点的机器上重复执行。
数据节点。 数据节点的安装不需要mysqld二进制文件。只需要 NDB Cluster 数据节点可执行文件ndbd(单线程)或ndbmtd\”)(多线程)。这些二进制文件也可以在.tar.gz存档中找到。同样,我们假设您已将此存档放置在/var/tmp中。
作为系统root(即在使用sudo、su root或您系统的等效方式暂时假���系统管理员帐户特权之后),执行以下步骤在数据节点主机上安装数据节点二进制文件:
将位置更改为/var/tmp目录,并从存档中提取ndbd和ndbmtd\”)二进制文件到适当的目录,如/usr/local/bin:
$> cd /var/tmp
$> tar -zxvf mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64.tar.gz
$> cd mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64
$> cp bin/ndbd /usr/local/bin/ndbd
$> cp bin/ndbmtd /usr/local/bin/ndbmtd
(一旦ndb_mgm和ndb_mgmd已复制到可执行文件目录中,您可以安全地删除从/var/tmp解压下载的存档创建的目录及其包含的文件。)
将位置更改为您复制文件的目录,然后使这两个文件都可执行:
$> cd /usr/local/bin
$> chmod +x ndb*
上述步骤应在每个数据节点主机上重复执行。
虽然只需要运行一个数据节点可执行文件来运行 NDB 集群数据节点,但我们在前面的说明中已经向您展示了如何安装ndbd和ndbmtd。我们建议您在安装或升级 NDB 集群时执行此操作,即使您打算只使用其中一个,因为这样可以节省时间和麻烦,以防以后决定从一个切换到另一个。
注意
每台托管数据节点的机器上的数据目录是/usr/local/mysql/data。在配置管理节点时,这些信息至关重要。(参见第 25.3.3 节,“NDB 集群的初始配置”。)
管理节点。 安装管理节点不需要mysqld二进制文件。只需要 NDB 集群管理服务器(ndb_mgmd);您很可能也想安装管理客户端(ndb_mgm)。这两个二进制文件也可以在.tar.gz存档文件中找到。同样,我们假设您已将此存档文件放在/var/tmp中。
作为系统root,执行以下步骤在管理节点主机上安装ndb_mgmd和ndb_mgm:
切换到/var/tmp目录,并将ndb_mgm和ndb_mgmd从存档中提取到一个合适的目录,如/usr/local/bin:
$> cd /var/tmp
$> tar -zxvf mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64.tar.gz
$> cd mysql-cluster-gpl-8.0.34-linux-glibc2.12-x86_64
$> cp bin/ndb_mgm* /usr/local/bin
(一旦ndb_mgm和ndb_mgmd已被复制到可执行文件目录中,您可以安全地删除从/var/tmp解压下载存档文件时创建的目录及其包含的文件。)
切换到您复制文件的目录,然后使这两个文件都可执行:
$> cd /usr/local/bin
$> chmod +x ndb_mgm*
在第 25.3.3 节,“NDB 集群的初始配置”中,我们为示例 NDB 集群中的所有节点创建配置文件。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-linux-rpm.html
25.3.1.2 从 RPM 安装 NDB Cluster
本节涵盖了使用 Oracle 提供的 RPM 软件包安装每种类型的 NDB Cluster 8.0 节点所需的正确可执行文件的步骤。
作为本节描述的方法的替代方案,Oracle 为 NDB Cluster 提供了与许多常见 Linux 发行版兼容的 MySQL 存储库。列出了两个存储库,适用于基于 RPM 的发行版:
对于使用yum或dnf的发行版,您可以使用 MySQL Yum Repository for NDB Cluster。有关说明和其他信息,请参见使用 Yum 存储库安装 MySQL NDB Cluster。
对于 SLES,您可以使用 MySQL SLES Repository for NDB Cluster。有关说明和其他信息,请参见使用 SLES 存储库安装 MySQL NDB Cluster。
32 位和 64 位 Linux 平台均提供 RPM。这些 RPM 的文件名遵循以下模式:
mysql-cluster-community-data-node-8.0.34-1.el7.x86_64.rpm
mysql-cluster-*license*-*component*-*ver*-*rev*.*distro*.*arch*.rpm
*license*:= {commercial | community}
*component*: {management-server | data-node | server | client | *other—see text*}
*ver*: *major*.*minor*.*release*
*rev*: *major*[.*minor*]
*distro*: {el6 | el7 | sles12}
*arch*: {i686 | x86_64}
*license*指示 RPM 是否属于 NDB Cluster 的商业版或社区版。在本节的其余部分中,我们假设您正在安装社区版。
*component*的可能值及其描述可在以下表中找到:
表 25.6 NDB Cluster RPM 分发的组件
组件描述auto-installer (已弃用)NDB Cluster 自动安装程序;请参见第 25.3.8 节,“NDB Cluster 自动安装程序(不再支持)”\”),了解用法clientMySQL 和NDB客户端程序;包括mysql客户端,ndb_mgm客户端和其他客户端工具commonMySQL 服务器所需的字符集和错误消息信息data-nodendbd和ndbmtd\”)数据节点二进制文件develMySQL 客户端开发所需的头文件和库文件embedded嵌入式 MySQL 服务器embedded-compat向后兼容的嵌入式 MySQL 服务器embedded-devel用于开发嵌入式 MySQL 应用程序的头文件和库文件java用于支持 ClusterJ 应用程序的 JAR 文件libsMySQL 客户端库libs-compat向后兼容的 MySQL 客户端库management-serverNDB 集群管理服务器 (ndb_mgmd)memcached支持 ndbmemcache 所需的文件minimal-debuginfo用于 package server-minimal 的调试信息;在开发使用此 package 的应用程序或调试此 package 时非常有用ndbclient用于运行 NDB API 和 MGM API 应用程序的 NDB 客户端库 (libndbclient)ndbclient-devel用于开发 NDB API 和 MGM API 应用程序所需的头文件和其他文件nodejs用于设置 NDB 集群的 Node.JS 支持所需的文件server包含 NDB 存储引擎支持的 MySQL 服务器 (mysqld),以及相关的 MySQL 服务器程序server-minimal用于 NDB 和相关工具的 MySQL 服务器的最小安装testmysqltest,其他 MySQL 测试程序和支持文件组件描述
也可以获得给定平台和架构的所有 NDB 集群 RPM 的单个捆绑包(.tar 文件)。此文件的名称遵循此处显示的模式:
mysql-cluster-*license*-*ver*-*rev*.*distro*.*arch*.rpm-bundle.tar
您可以使用 tar 或您喜欢的提取存档工具从此文件中提取单独的 RPM 文件。
安装三种主要类型的 NDB 集群节点所需的组件列在以下列表中:
管理节点: management-server
数据节点: data-node
SQL 节点: server 和 common
另外,应安装 client RPM 以在至少一个管理节点上提供 ndb_mgm 管理客户端。您可能还希望在 SQL 节点上安装它,以便在这些节点上提供 mysql 和其他 MySQL 客户端程序。我们稍后在本节讨论按类型安装节点。
ver 表示以 8.0.x 格式显示的三部分 NDB 存储引擎版本号,示例中显示为 8.0.34。rev 提供了以 major.minor 格式的 RPM 修订号。在本节中显示的示例中,我们使用 1.1 作为此值。
distro(Linux 发行版)是 rhel5(Oracle Linux 5,Red Hat Enterprise Linux 4 和 5),el6(Oracle Linux 6,Red Hat Enterprise Linux 6),el7(Oracle Linux 7,Red Hat Enterprise Linux 7)或 sles12(SUSE Enterprise Linux 12)之一。在本节的示例中,我们假设主机运行 Oracle Linux 7,Red Hat Enterprise Linux 7 或等效的 (el7)。
arch 对于 32 位 RPMs 是 i686,对于 64 位版本是 x86_64。在这里展示的示例中,我们假设是 64 位平台。
RPM 文件名中的 NDB 集群版本号(此处显示为8.0.34)可能根据您实际使用的版本而变化。非常重要的是要安装的所有集群 RPM 具有相同的版本号。架构也应适合要安装 RPM 的机器;特别要记住,64 位 RPM(x86_64)不能与 32 位操作系统一起使用(对于后者使用i686)。
数据节点。 在要托管 NDB 集群数据节点的计算机上,只需安装data-node RPM。为此,将此 RPM 复制到数据节点主机,并以系统 root 用户身份运行以下命令,根据需要替换从 MySQL 网站下载的 RPM 的名称:
$> rpm -Uhv mysql-cluster-community-data-node-8.0.34-1.el7.x86_64.rpm
这将在/usr/sbin中安装ndbd和ndbmtd数据节点二进制文件。这两者中的任何一个都可以用于在此主机上运行数据节点进程。
SQL 节点。 将server和common RPM 复制到每台用于托管 NDB 集群 SQL 节点的机器上(server 需要common)。以系统 root 用户身份执行以下命令安装server RPM,根据需要替换从 MySQL 网站下载的 RPM 的名称:
$> rpm -Uhv mysql-cluster-community-server-8.0.34-1.el7.x86_64.rpm
这将在/usr/sbin目录中安装 MySQL 服务器二进制文件(mysqld),支持NDB存储引擎。它还安装了所有必需的 MySQL 服务器支持文件和有用的 MySQL 服务器程序,包括mysql.server和mysqld_safe启动脚本(分别位于/usr/share/mysql和/usr/bin)。RPM 安装程序应自动处理一般配置问题(例如自动创建mysql用户和组,如果需要)。
重要
您必须使用为 NDB 集群发布的这些 RPM 版本;为标准 MySQL 服务器发布的版本不支持NDB存储引擎。
要管理 SQL 节点(MySQL 服务器),您还应安装client RPM,如下所示:
$> rpm -Uhv mysql-cluster-community-client-8.0.34-1.el7.x86_64.rpm
这将安装mysql客户端和其他 MySQL 客户端程序,如mysqladmin和mysqldump到/usr/bin。
管理节点。 要安装 NDB 集群管理服务器,只需使用management-server RPM。将此 RPM 复制到打算托管管理节点的计算机上,然后以系统根用户身份运行以下命令进行安装(根据需要替换从 MySQL 网站下载的management-server RPM 的名称):
$> rpm -Uhv mysql-cluster-community-management-server-8.0.34-1.el7.x86_64.rpm
此 RPM 在/usr/sbin目录中安装管理服务器二进制文件ndb_mgmd。虽然这是实际运行管理节点所需的唯一程序,但也最好同时拥有ndb_mgm NDB 集群管理客户端。您可以通过按照先前描述的方式安装client RPM 来获取此程序,以及其他NDB客户端程序,如ndb_desc和ndb_config。
有关使用 Oracle 提供的 RPM 包在 Linux 上安装 MySQL 的一般信息,请参阅 Section 2.5.4, “Installing MySQL on Linux Using RPM Packages from Oracle”。
从 RPM 安装后,仍然需要配置集群;请参阅 Section 25.3.3, “Initial Configuration of NDB Cluster”,获取相关信息。
非常重要的是要安装的所有集群 RPM 具有相同的版本号。*架构*指定也应适合要安装 RPM 的计算机;特别要记住 64 位 RPM 不能与 32 位操作系统一起使用。
数据节点。 在打算托管集群数据节点的计算机上,只需安装server RPM。为此,将此 RPM 复制到数据节点主机上,并以系统根用户身份运行以下命令,根据需要替换从 MySQL 网站下载的 RPM 的名称:
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm
尽管这会安装所有 NDB 集群二进制文件,但实际上只需要运行 NDB 集群数据节点的程序ndbd或ndbmtd\”)(都在/usr/sbin中)。
SQL 节点。 在每台用于托管集群 SQL 节点的计算机上,以系统根用户身份执行以下命令安装server RPM,根据需要替换从 MySQL 网站下载的 RPM 的名称:
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm
这将在/usr/sbin目录中安装带有NDB存储引擎支持的 MySQL 服务器二进制文件(mysqld),以及所有所需的 MySQL 服务器支持文件。它还安装了mysql.server和mysqld_safe启动脚本(分别位于/usr/share/mysql和/usr/bin)。RPM 安装程序应自动处理一般配置问题(例如,如有需要,创建mysql用户和组)。
要管理 SQL 节点(MySQL 服务器),您还应安装client RPM,如下所示:
$> rpm -Uhv MySQL-Cluster-client-gpl-8.0.34-1.sles11.i386.rpm
这将安装mysql客户端程序。
管理节点。 要安装 NDB Cluster 管理服务器,只需使用server RPM。将此 RPM 复制到打算托管管理节点的计算机上,然后以系统 root 用户身份运行以下命令进行安装(根据需要替换从 MySQL 网站下载的server RPM 的名称):
$> rpm -Uhv MySQL-Cluster-server-gpl-8.0.34-1.sles11.i386.rpm
尽管此 RPM 安装了许多其他文件,但实际上只需要管理服务器二进制文件ndb_mgmd(位于/usr/sbin目录)来运行管理节点。server RPM 还安装了ndb_mgm,NDB管理客户端。
有关使用 Oracle 提供的 RPM 包在 Linux 上安装 MySQL 的一般信息,请参见第 2.5.4 节,“使用 Oracle 提供的 RPM 包在 Linux 上安装 MySQL”。有关所需的安装后配置信息,请参见第 25.3.3 节,“NDB Cluster 的初始配置”。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-debian.html
25.3.1.3 使用 .deb 文件安装 NDB Cluster
本节提供了有关在 Debian 和相关 Linux 发行版(如 Ubuntu)上使用 Oracle 提供的 .deb 文件安装 NDB Cluster 的信息。
Oracle 还为 Debian 和其他发行版提供了一个 NDB Cluster APT 软件源。有关说明和其他信息,请参见使用 APT 软件源安装 MySQL NDB Cluster。
Oracle 为 32 位和 64 位平台提供了 NDB Cluster 的 .deb 安装文件。对于基于 Debian 的系统,只需要一个安装文件。根据适用的 NDB Cluster 版本、Debian 版本和架构,此文件的命名遵循此模式:
mysql-cluster-gpl-*ndbver*-debian*debianver*-*arch*.deb
这里,ndbver 是 NDB 引擎版本号的三部分,debianver 是 Debian 的主要版本号(8 或 9),arch 是 i686 或 x86_64 中的一个。在接下来的示例中,我们假设您希望在 64 位 Debian 9 系统上安装 NDB 8.0.34;在这种情况下,安装文件名为 mysql-cluster-gpl-8.0.34-debian9-x86_64.deb-bundle.tar。
下载适当的 .deb 文件后,您可以解压缩它,然后使用 dpkg 命令行安装,如下所示:
$> dpkg -i mysql-cluster-gpl-8.0.34-debian9-i686.deb
您也可以像下面这样使用 dpkg 进行卸载:
$> dpkg -r mysql
安装文件还应与大多数与 .deb 文件一起使用的图形软件包管理器兼容,例如 Gnome 桌面的 GDebi。
.deb 文件将 NDB Cluster 安装在 /opt/mysql/server-*version*/ 下,其中 version 是包含的 MySQL 服务器的两部分发布系列版本。对于 NDB 8.0,这始终是 8.0。目录布局与通用 Linux 二进制发行版相同(请参见表 2.3,“通用 Unix/Linux 二进制包的 MySQL 安装布局”),唯一的例外是启动脚本和配置文件位于 support-files 而不是 share 中。所有 NDB Cluster 可执行文件,如 ndb_mgm, ndbd, 和 ndb_mgmd, 都放在 bin 目录中。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-linux-source.html
25.3.1.4 在 Linux 上从源代码构建 NDB Cluster
本节提供了关于在 Linux 和其他类 Unix 平台上编译 NDB Cluster 的信息。从源代码构建 NDB Cluster 类似于构建标准的 MySQL Server,尽管在一些关键方面有所不同,这些差异在这里讨论。关于从源代码构建 MySQL 的一般信息,请参见 第 2.8 节,“从源代码安装 MySQL”。关于在 Windows 平台上编译 NDB Cluster 的信息,请参见 第 25.3.2.2 节,“在 Windows 上从源代码编译和安装 NDB Cluster”。
构建 MySQL NDB Cluster 8.0 需要使用 MySQL Server 8.0 的源代码。这些源代码可以从 MySQL 下载页面获取,链接为 dev.mysql.com/downloads/。存档的源文件应该类似于 mysql-8.0.34.tar.gz。你也可以从 GitHub 获取这些源代码,链接为 github.com/mysql/mysql-server。
注意
在以前的版本中,从标准的 MySQL Server 源代码构建 NDB Cluster 是不被支持的。在 MySQL 8.0 和 NDB Cluster 8.0 中,情况已经不再是这样了—这两个产品现在都是从相同的源代码构建的。
CMake 的 WITH_NDB 选项会导致管理节点、数据节点和其他 NDB Cluster 程序的二进制文件被构建;它还会导致 mysqld 被编译时带有 NDB 存储引擎支持。在构建 NDB Cluster 时,这个选项(或在 NDB 8.0.31 之前的版本中,WITH_NDBCLUSTER)是必需的。
重要
WITH_NDB_JAVA 选项默认启用。这意味着,默认情况下,如果 CMake 在您的系统上找不到 Java 的位置,配置过程将失败;如果您不希望启用 Java 和 ClusterJ 支持,您必须显式地通过 -DWITH_NDB_JAVA=OFF 配置构建。如果需要,使用 WITH_CLASSPATH 提供 Java 类路径。
关于构建 NDB Cluster 的 CMake 选项的更多信息,请参见 用于编译 NDB Cluster 的 CMake 选项。
在运行 make && make install(或系统的等效命令)之后,结果类似于将预编译的二进制文件解压到相同位置所得到的结果。
管理节点。 当从源代码构建并运行默认的 make install 时,管理服务器和管理客户端二进制文件(ndb_mgmd 和 ndb_mgm)可以在 /usr/local/mysql/bin 中找到。在管理节点主机上只需要存在 ndb_mgmd;但是,在同一主机上也有 ndb_mgm 是个好主意。这两个可执行文件都不需要在主机文件系统上的特定位置。
数据节点。 数据节点主机上唯一需要的可执行文件是数据节点二进制文件 ndbd 或 ndbmtd。(例如,mysqld 不需要存在于主机机器上。)默认情况下,从源代码构建时,此文件放置在目录 /usr/local/mysql/bin 中。对于在多个数据节点主机上安装,只需将 ndbd 或 ndbmtd 复制到其他主机机器上即可。(这假设所有数据节点主机使用相同的架构和操作系统;否则,您可能需要为每个不同平台单独编译。)数据节点二进制文件不需要在主机文件系统上的任何特定位置,只要位置已知即可。
当从源代码编译 NDB Cluster 时,构建多线程数据节点二进制文件不需要特殊选项。配置构建时使用 NDB 存储引擎支持会自动构建 ndbmtd;make install 将 ndbmtd 二进制文件放置在安装的 bin 目录中,与 mysqld、ndbd 和 ndb_mgm 一起。
SQL 节点。 如果您使用集群支持编译 MySQL,并执行默认安装(使用make install作为系统root用户),mysqld将被放置在/usr/local/mysql/bin中。按照 Section 2.8, “从源代码安装 MySQL”中给出的步骤使mysqld准备就绪。如果您想要运行多个 SQL 节点,您可以在多台机器上使用相同的mysqld可执行文件及其相关的支持文件的副本。最简单的方法是将整个/usr/local/mysql目录及其内部的所有目录和文件复制到其他 SQL 节点主机上,然后在每台机器上重复 Section 2.8, “从源代码安装 MySQL”中的步骤。如果您使用非默认的PREFIX选项配置构建,则必须相应调整目录。
在 Section 25.3.3, “NDB Cluster 的初始配置”中,我们为示例 NDB Cluster 中的所有节点创建配置文件。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-docker.html
25.3.1.5 使用 Docker 容器部署 NDB 集群
下载 MySQL NDB 集群 Docker 镜像
在单独的步骤中下载 Docker 镜像并不是绝对必要的;但是,在创建 Docker 容器之前执行此步骤可以确保您的本地镜像是最新的。要从Oracle 容器注册表(OCR)下载 MySQL NDB 集群社区版镜像,请运行此命令:
docker pull container-registry.oracle.com/mysql/community-cluster:*tag*
tag是您要拉取的镜像版本的标签(例如,7.5,7.6,8.0或latest)。如果省略了:*tag***,则使用latest标签,并下载 MySQL NDB 集群最新 GA 版本的镜像。
您可以使用此命令列出已下载的 Docker 镜像:
$> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/mysql/community-cluster 8.0 d1b28e457ac5 5 weeks ago 636MB
要从 OCR 下载 MySQL 商业集群镜像,您需要首先接受许可协议。请按照以下步骤操作:
访问 OCR 网站container-registry.oracle.com/并选择 MySQL。
在 MySQL 存储库列表下,选择commercial-cluster。
如果您尚未登录到 OCR,请单击页面右侧的“登录”按钮,然后在提示时输入 Oracle 帐户凭据。
跟随页面右侧的说明接受许可协议。
使用此命令从 OCR 下载 MySQL 商业集群的 Docker 镜像:
docker pull container-registry.oracle.com/mysql/commercial-cluster:*tag*
使用默认配置启动 MySQL 集群
首先,为容器之间的通信创建一个名为cluster的内部 Docker 网络:
docker network create cluster –subnet=192.168.0.0/16
然后,启动管理节点:
docker run -d –net=cluster –name=management1 –ip=192.168.0.2 container-registry.oracle.com/mysql/community-cluster ndb_mgmd
接下来,启动两个数据节点
docker run -d –net=cluster –name=ndb1 –ip=192.168.0.3 container-registry.oracle.com/mysql/community-cluster ndbd
docker run -d –net=cluster –name=ndb2 –ip=192.168.0.4 container-registry.oracle.com/mysql/community-cluster ndbd
最后,启动 MySQL 服务器节点:
docker run -d –net=cluster –name=mysql1 –ip=192.168.0.10 -e MYSQL_RANDOM_ROOT_PASSWORD=true container-registry.oracle.com/mysql/community-cluster mysqld
然后,服务器将使用随机生成的密码进行初始化,需要更改密码。从日志中获取密码:
docker logs mysql1 2>&1 | grep PASSWORD
如果命令没有返回密码,则服务器尚未完成初始化。请等待一会儿,然后再试一次。一旦获得密码,通过mysql客户端登录到服务器并更改密码:
docker exec -it mysql1 mysql -uroot -p
一旦您在服务器上,使用以下语句更改根密码:
mysql> ALTER USER \’root\’@\’localhost\’ IDENTIFIED BY \’*password*\’;
最后,启动一个带有交互式管理客户端ndb_mgm的容器来监视集群:
$> docker run -it –net=cluster container-registry.oracle.com/mysql/community-cluster ndb_mgm
[Entrypoint] MySQL Docker Image 8.0.34-1.2.10-cluster
[Entrypoint] Starting ndb_mgm
— NDB Cluster — Management Client —
运行SHOW命令以打印集群的状态。您应该看到以下内容:
ndb_mgm> SHOW
Connected to Management Server at: 192.168.0.2:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.3 (mysql-8.0.34-ndb-8.0.34, Nodegroup: 0, *)
id=3 @192.168.0.4 (mysql-8.0.34-ndb-8.0.34, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.2 (mysql-8.0.34-ndb-8.0.34)
[mysqld(API)] 1 node(s)
id=4 @192.168.0.10 (mysql-8.0.34-ndb-8.0.34)
自定义 MySQL 集群
默认的 MySQL NDB 集群镜像包括两个配置文件,这些文件也可以在MySQL NDB 集群的 GitHub 存储库中找到。
/etc/my.cnf
/etc/mysql-cluster.cnf
要更改集群(例如,添加更多节点或更改网络设置),必须更新这些文件。有关更多信息,请参见第 25.4.3 节,“NDB 集群配置文件”。在启动容器时使用自定义配置文件,使用-v标志加载外部文件。例如(将整个命令输入在同一行):
$> docker run -d –net=cluster –name=management1 \\
–ip=192.168.0.2 -v /etc/my.cnf:/etc/my.cnf -v \\
/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf \\
container-registry.oracle.com/mysql/community-cluster ndb_mgmd
25.3.2 在 Windows 上安装 NDB 集群
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows.html
25.3.2.1 从二进制发行版在 Windows 上安装 NDB 集群
25.3.2.2 在 Windows 上从源代码编译和安装 NDB 集群
25.3.2.3 在 Windows 上 NDB 集群的初始启动
25.3.2.4 将 NDB 集群进程安装为 Windows 服务
本节描述了在 Windows 主机上安装 NDB 集群的过程。可以从dev.mysql.com/downloads/cluster/获取用于 Windows 的 NDB 集群 8.0 二进制文件。有关在 Windows 上从 Oracle 提供的二进制发行版安装 NDB 集群的信息,请参见第 25.3.2.1 节,“从二进制发行版在 Windows 上安装 NDB 集群”。
也可以使用 Microsoft Visual Studio 在 Windows 上编译和安装 NDB 集群的源代码。有关更多信息,请参见第 25.3.2.2 节,“在 Windows 上从源代码编译和安装 NDB 集群”。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows-binary.html
25.3.2.1 从二进制发行版在 Windows 上安装 NDB Cluster
本节描述了在 Windows 上使用 Oracle 提供的二进制“无需安装” NDB Cluster 发行版进行基本安装的过程,使用本节开头概述的相同 4 节点设置(参见 第 25.3 节,“NDB Cluster 安装”),如下表所示:
表 25.7 示例集群中节点的网络地址
节点IP 地址管理节点 (mgmd)198.51.100.10SQL 节点 (mysqld)198.51.100.20数据节点 “A” (ndbd)198.51.100.30数据节点 “B” (ndbd)198.51.100.40
与其他平台一样,运行 SQL 节点的 NDB Cluster 主机计算机必须安装 MySQL Server 二进制文件 (mysqld.exe)。您还应该在此主机上安装 MySQL 客户端 (mysql.exe)。对于管理节点和数据节点,不需要安装 MySQL Server 二进制文件;但是,每个管理节点都需要管理服务器守护程序 (ndb_mgmd.exe);每个数据节点都需要数据节点守护程序 (ndbd.exe 或 ndbmtd.exe\”))。在本示例中,我们将 ndbd.exe 称为数据节点可执行文件,但您也可以安装 ndbmtd.exe\”),这是该程序的多线程版本,方式完全相同。您还应该在管理服务器主机上安装管理客户端 (ndb_mgm.exe)。本节涵盖了为每种类型的 NDB Cluster 节点安装正确的 Windows 二进制文件所需的步骤。
注意
与其他 Windows 程序一样,NDB Cluster 可执行文件的文件扩展名为.exe。但是,在从命令行调用这些程序时,不需要包含.exe扩展名。因此,在本文档中,我们通常简称这些程序为mysqld、mysql、ndb_mgmd等。您应该明白,无论我们是指mysqld还是mysqld.exe,两个名称都表示相同的东西(MySQL 服务器程序)。
对于使用 Oracle 的no-install二进制文件设置 NDB Cluster,安装过程的第一步是从dev.mysql.com/downloads/cluster/下载最新的 NDB Cluster Windows ZIP 二进制存档。此存档的文件名为mysql-cluster-gpl-*ver*-win*arch*.zip,其中*ver是NDB存储引擎版本(例如8.0.34),arch*是架构(32表示 32 位二进制文件,64表示 64 位二进制文件)。例如,64 位 Windows 系统的 NDB Cluster 8.0.34 存档名为mysql-cluster-gpl-8.0.34-win64.zip。
您可以在 32 位和 64 位 Windows 版本上运行 32 位 NDB Cluster 二进制文件;但是,64 位 NDB Cluster 二进制文件只能在 64 位 Windows 版本上使用。如果您在具有 64 位 CPU 的计算机上使用 32 位 Windows 版本,则必须使用 32 位 NDB Cluster 二进制文件。
为了最大限度地减少需要从互联网下载或在计算机之间复制的文件数量,我们从您打算运行 SQL 节点的计算机开始。
SQL 节点。 我们假设您已将存档的副本放在具有 IP 地址 198.51.100.20 的计算机上的目录C:\\Documents and Settings\\*username*\\My Documents\\Downloads中,其中*username*是当前用户的名称。(您可以在命令行上使用ECHO %USERNAME%获取此名称。)要将 NDB Cluster 可执行文件安装并运行为 Windows 服务,此用户应为Administrators组的成员。
从存档中提取所有文件。与 Windows 资源管理器集成的提取向导足以完成此任务。(如果您使用不同的存档程序,请确保它从存档中提取所有文件和目录,并保留存档的目录结构。)当要求输入目标目录时,请输入C:\\,这将导致提取向导将存档提取到目录C:\\mysql-cluster-gpl-*ver*-win*arch*。将此目录重命名为C:\\mysql。
可以将 NDB Cluster 二进制文件安装到除C:\\mysql\\bin之外的目录;但是,如果这样做,必须相应地修改本过程中显示的路径。特别是,如果 MySQL Server(SQL 节点)二进制文件安装到除C:\\mysql或C:\\Program Files\\MySQL\\MySQL Server 8.0之外的位置,或者如果 SQL 节点的数据目录位于除C:\\mysql\\data或C:\\Program Files\\MySQL\\MySQL Server 8.0\\data之外的位置,则在启动 SQL 节点时必须在命令行上使用额外的配置选项或将其添加到my.ini或my.cnf文件中。有关配置 MySQL Server 在非标准位置运行的更多信息,请参见 Section 2.3.4, “Installing MySQL on Microsoft Windows Using a noinstall ZIP Archive”。
要使支持 NDB Cluster 的 MySQL Server 作为 NDB Cluster 的一部分运行,必须使用选项–ndbcluster和–ndb-connectstring启动。虽然可以在命令行上指定这些选项,但通常更方便将它们放在一个选项文件中。为此,请在记事本或其他文本编辑器中创建一个新的文本文件。将以下配置信息输入到此文件中:
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
ndb-connectstring=198.51.100.10 # location of management server
如果需要,可以添加此 MySQL Server 使用的其他选项(请参见 Section 2.3.4.2, “Creating an Option File”),但文件必须至少包含所示选项。将此文件��存为C:\\mysql\\my.ini。这完成了 SQL 节点的安装和设置。
数据节点。 Windows 主机上的 NDB Cluster 数据节点只需要一个可执行文件,即ndbd.exe或ndbmtd.exe\”)之一。在本示例中,我们假设您正在使用ndbd.exe,但当使用ndbmtd.exe\”)时,相同的说明也适用。在每台计算机上,您希望运行数据节点的计算机(具有 IP 地址 198.51.100.30 和 198.51.100.40),创建目录C:\\mysql、C:\\mysql\\bin和C:\\mysql\\cluster-data;然后,在您下载并解压no-install存档的计算机上,将ndbd.exe定位于C:\\mysql\\bin目录。将此文件复制到两个数据节点主机上的C:\\mysql\\bin目录。
要作为 NDB 集群的一部分运行,每个数据节点必须提供管理服务器的地址或主机名。您可以在启动每个数据节点进程时使用 –ndb-connectstring 或 -c 选项在命令行上提供此信息。然而,通常最好将此信息放在一个选项文件中。为此,请在记事本或其他文本编辑器中创建一个新的文本文件,并输入以下文本:
[mysql_cluster]
# Options for data node process:
ndb-connectstring=198.51.100.10 # location of management server
将此文件保存为 C:\\mysql\\my.ini,保存在数据节点主机上。创建另一个文本文件,其中包含相同的信息,并将其保存为 C:mysql\\my.ini,保存在另一个数据节点主机上,或者将第一个数据节点主机上的 my.ini 文件复制到第二个数据节点主机上,确保将副本放在第二个数据节点的 C:\\mysql 目录中。现在,两个数据节点主机已准备好用于 NDB 集群,只剩下安装和配置管理节点。
管理节点。 在用于托管 NDB 集群管理节点的计算机上唯一需要的可执行程序是管理服务器程序 ndb_mgmd.exe。然而,为了在启动 NDB 集群后对其进行管理,您还应该在与管理服务器相同的计算机上安装 NDB 集群管理客户端程序 ndb_mgm.exe。在您下载和提取 no-install 存档的计算机上找到这两个程序;这应该是 SQL 节点主机上的目录 C:\\mysql\\bin。在具有 IP 地址 198.51.100.10 的计算机上创建目录 C:\\mysql\\bin,然后将这两个程序复制到该目录。
现在,您应该为 ndb_mgmd.exe 创建两个配置文件:
一个本地配置文件,提供特定于管理节点本身的配置数据。通常,此文件只需要提供 NDB 集群全局配置文件的位置(参见项目 2)。
要创建此文件,请在记事本或其他文本编辑器中启动一个新的文本文件,并输入以下信息:
[mysql_cluster]
# Options for management node process
config-file=C:/mysql/bin/config.ini
将此文件保存为文本文件 C:\\mysql\\bin\\my.ini。
一个全局配置文件,管理节点可以从中获取管理整个 NDB 集群的配置信息。至少,此文件必须包含 NDB 集群中每个节点的部分,并且管理节点和所有数据节点的 IP 地址或主机名(HostName 配置参数)。还建议包括以下附加信息:
任何 SQL 节点的 IP 地址或主机名
分配给每个数据节点的数据内存和索引内存(DataMemory 和 IndexMemory 配置参数)
使用 NoOfReplicas 配置参数来指定分片副本的数量(参见 第 25.2.2 节,“NDB Cluster 节点、节点组、分片副本和分区”)
每个数据节点存储数据和日志文件的目录,以及管理节点保存其日志文件的目录(在这两种情况下,使用 DataDir 配置参数)
使用诸如记事本之类的文本编辑器创建一个新的文本文件,并输入以下信息:
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of fragment replicas
DataDir=C:/mysql/cluster-data # Directory for each data node\’s data files
# Forward slashes used in directory path,
# rather than backslashes. This is correct;
# see Important note in text
DataMemory=80M # Memory allocated to data storage
IndexMemory=18M # Memory allocated to index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the \”world\” database takes up
# only about 500KB, this should be more than enough for
# this example Cluster setup.
[ndb_mgmd]
# Management process options:
HostName=198.51.100.10 # Hostname or IP address of management node
DataDir=C:/mysql/bin/cluster-logs # Directory for management node log files
[ndbd]
# Options for data node \”A\”:
# (one [ndbd] section per data node)
HostName=198.51.100.30 # Hostname or IP address
[ndbd]
# Options for data node \”B\”:
HostName=198.51.100.40 # Hostname or IP address
[mysqld]
# SQL node options:
HostName=198.51.100.20 # Hostname or IP address
将此文件保存为文本文件 C:\\mysql\\bin\\config.ini。
重要提示
在 Windows 上,当在程序选项或 NDB Cluster 使用的配置文件中指定目录路径时,不能使用单个反斜杠字符(\\)。相反,你必须要么用第二个反斜杠字符(\\\\)转义每个反斜杠字符,要么用正斜杠字符(/)替换反斜杠。例如,NDB Cluster config.ini 文件中 [ndb_mgmd] 部分的以下行不起作用:
DataDir=C:\\mysql\\bin\\cluster-logs
相反,你可以使用以下任一种方式:
DataDir=C:\\\\mysql\\\\bin\\\\cluster-logs # Escaped backslashes
DataDir=C:/mysql/bin/cluster-logs # Forward slashes
为了简洁和易读起见,我们建议在 Windows 上使用 NDB Cluster 程序选项和配置文件中的目录路径时使用正斜杠。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows-source.html
25.3.2.2 在 Windows 上从源代码编译和安装 NDB Cluster
Oracle 为 Windows 提供了预编译的 NDB Cluster 二进制文件,对大多数用户来说应该足够了。但是,如果你愿意,也可以从源代码为 Windows 编译 NDB Cluster。这样做的过程几乎与用于为 Windows 编译标准 MySQL Server 二进制文件的过程相同,并且使用相同的工具。但是,有两个主要区别:
构建 MySQL NDB Cluster 8.0 需要使用 MySQL Server 8.0 源代码。这些源代码可以从 MySQL 下载页面获取,链接为dev.mysql.com/downloads/。存档的源文件应该类似于 mysql-8.0.34.tar.gz。你也可以从 GitHub 获取这些源代码,链接为github.com/mysql/mysql-server。
你必须在CMake中使用WITH_NDB选项来配置构建,以及任何其他你希望与之一起使用的构建选项。WITH_NDBCLUSTER也支持用于向后兼容,但在 NDB 8.0.31 中已被弃用。
重要提示
WITH_NDB_JAVA选项默认启用。这意味着,默认情况下,如果CMake在你的系统上找不到 Java 的位置,配置过程将失败;如果你不希望启用 Java 和 ClusterJ 支持,你必须通过使用 -DWITH_NDB_JAVA=OFF 明确指示。 (Bug #12379735) 如果需要,使用WITH_CLASSPATH来提供 Java 类路径。
关于构建 NDB Cluster 的CMake选项的更多信息,请参见用于编译 NDB Cluster 的 CMake 选项。
构建过程完成后,你可以创建一个包含编译后二进制文件的 Zip 归档文件;第 2.8.4 节,“使用标准源分发安装 MySQL” 提供了在 Windows 系统上执行此任务所需的命令。NDB Cluster 的二进制文件可以在生成的归档文件的 bin 目录中找到,该目录等同于 no-install 归档文件,并且可以以相同的方式安装和配置。更多信息,请参阅第 25.3.2.1 节,“从二进制发布版在 Windows 上安装 NDB Cluster”。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows-initial-start.html
25.3.2.3 Windows 上 NDB Cluster 的初始启动
一旦 NDB Cluster 可执行文件和所需的配置文件就位,启动集群的初始步骤只是简单地启动集群中所有节点的 NDB Cluster 可执行文件。每个集群节点进程必须分别在其所在的主机计算机上启动。应首先启动管理节点,然后是数据节点,最后是任何 SQL 节点。
在管理节点主机上,从命令行发出以下命令以启动管理节点进程。输出应类似于所示:
C:\\mysql\\bin> ndb_mgmd
2010-06-23 07:53:34 [MgmtSrvr] INFO — NDB Cluster Management Server. mysql-8.0.35-ndb-8.0.35
2010-06-23 07:53:34 [MgmtSrvr] INFO — Reading cluster configuration from \’config.ini\’
管理节点进程继续向控制台打印日志输出。这是正常的,因为管理节点不作为 Windows 服务运行。(如果您在类 Unix 平台(如 Linux)上使用 NDB Cluster,则可能会注意到管理节点在 Windows 上的默认行为实际上与其在 Unix 系统上的行为相反,在 Unix 系统上,它默认作为 Unix 守护进程运行。这种行为也适用于在 Windows 上运行的 NDB Cluster 数据节点进程。)因此,请不要关闭运行 ndb_mgmd.exe 的窗口;这样会终止管理节点进程。(请参阅 Section 25.3.2.4, “Installing NDB Cluster Processes as Windows Services”,其中我们展示了如何将 NDB Cluster 进程安装并作为 Windows 服务运行。)
-f 选项告诉管理节点在哪里找到全局配置文件(config.ini)。此选项的长格式是 –config-file。
重要
NDB Cluster 管理节点缓存从 config.ini 中读取的配置数据;一旦创建了配置缓存,除非被强制执行,否则在后续启动时会忽略 config.ini 文件。这意味着,如果管理节点由于此文件中的错误而无法启动,则在纠正错误后,必须让管理节点重新读取 config.ini。您可以通过在命令行上使用 –reload 或 –initial 选项启动 ndb_mgmd.exe 来实现这一点。这两个选项中的任何一个都可以刷新配置缓存。
在管理节点的 my.ini 文件中不需要也不建议使用这两个选项。
在每个数据节点主机上,运行此处显示的命令以启动数据节点进程:
C:\\mysql\\bin> ndbd
2010-06-23 07:53:46 [ndbd] INFO — Configuration fetched from \’localhost:1186\’, generation: 1
在每种情况下,数据节点进程的输出的第一行应类似于前面示例中所示的内容,并且后面跟着其他日志输出行。与管理节点进程一样,这是正常的,因为数据节点不作为 Windows 服务运行。因此,请不要关闭运行数据节点进程的控制台窗口;这样做会终止ndbd.exe。(有关更多信息,请参见第 25.3.2.4 节,“将 NDB 集群进程安装为 Windows 服务”。)
尚未启动 SQL 节点;在数据节点完成启动之前,它无法连接到集群,这可能需要一些时间。相反,在管理节点主机上的新控制台窗口中启动 NDB 集群管理客户端ndb_mgm.exe,该文件应位于管理节点主机的C:\\mysql\\bin中。(不要尝试在运行ndb_mgmd.exe的控制台窗口中重新使用,因为这会终止管理节点。)生成的输出应如下所示:
C:\\mysql\\bin> ndb_mgm
— NDB Cluster — Management Client —
ndb_mgm>
当出现提示符ndb_mgm>时,这表示管理客户端已准备好接收 NDB 集群管理命令。您可以通过在管理客户端提示符处输入ALL STATUS来观察数据节点的启动状态。此命令会导致数据节点启动序列的运行报告,应该看起来像这样:
ndb_mgm> ALL STATUS
Connected to Management Server at: localhost:1186
Node 2: starting (Last completed phase 3) (mysql-8.0.35-ndb-8.0.35)
Node 3: starting (Last completed phase 3) (mysql-8.0.35-ndb-8.0.35)
Node 2: starting (Last completed phase 4) (mysql-8.0.35-ndb-8.0.35)
Node 3: starting (Last completed phase 4) (mysql-8.0.35-ndb-8.0.35)
Node 2: Started (version 8.0.35)
Node 3: Started (version 8.0.35)
ndb_mgm>
注意
在管理客户端中输入的命令不区分大小写;我们使用大写作为这些命令的规范形式,但在输入到ndb_mgm客户端时,您不必遵守此约定。有关更多信息,请参见第 25.6.1 节,“NDB 集群管理客户端中的命令”。
由ALL STATUS产生的输出可能会根据数据节点启动速度、您正在使用的 NDB 集群软件的发布版本号以及其他因素而有所不同。重要的是,当您看到两个数据节点都已启动时,您就可以开始启动 SQL 节点了。
您可以让ndb_mgm.exe保持运行;它不会对 NDB Cluster 的性能产生负面影响,并且我们在下一步中使用它来验证 SQL 节点在您启动后是否连接到集群。
在指定为 SQL 节点主机的计算机上,打开控制台窗口并导航到解压 NDB Cluster 二进制文件的目录(如果您遵循我们的示例,这是C:\\mysql\\bin)。
通过从命令行调用mysqld.exe来启动 SQL 节点,如下所示:
C:\\mysql\\bin> mysqld –console
–console选项会导致日志信息写入控制台,在出现问题时可能会有所帮助。(一旦您确信 SQL 节点以令人满意的方式运行,您可以停止它并重新启动,而不使用–console选项,以便正常执行日志记录。)
在管理节点主机上运行管理客户端(ndb_mgm.exe)的控制台窗口中,输入SHOW命令,应该会产生类似于这里显示的输出:
ndb_mgm> SHOW
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @198.51.100.30 (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0, *)
id=3 @198.51.100.40 (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @198.51.100.10 (Version: 8.0.35-ndb-8.0.35)
[mysqld(API)] 1 node(s)
id=4 @198.51.100.20 (Version: 8.0.35-ndb-8.0.35)
您还可以使用mysql客户端(mysql.exe)使用SHOW ENGINE NDB STATUS语句验证 SQL 节点是否连接到 NDB Cluster。
现在,您可以准备使用 NDB Cluster 的NDBCLUSTER存储引擎来处理数据库对象和数据。有关更多信息和示例,请参见第 25.3.5 节,“具有表和数据的 NDB Cluster 示例”。
您还可以将ndb_mgmd.exe、ndbd.exe和ndbmtd.exe\”)安装为 Windows 服务。有关如何执行此操作的信息,请参见第 25.3.2.4 节,“将 NDB Cluster 进程安装为 Windows 服务”。
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-windows-service.html
25.3.2.4 将 NDB Cluster 进程安装为 Windows 服务
一旦您确认 NDB Cluster 运行如您所期望,您可以将管理节点和数据节点安装为 Windows 服务,这样这些进程将在 Windows 启动或停止时自动启动和停止。这也使得可以使用适当的SC START和SC STOP命令,或使用 Windows 图形Services实用程序来控制这些进程。也可以使用NET START和NET STOP命令。
通常必须使用具有系统管理员权限的帐户来将程序安装为 Windows 服务。
要在 Windows 上将管理节点安装为服务,请在托管管理节点的计算机上使用命令行调用ndb_mgmd.exe,使用–install选项,如下所示:
C:\\> C:\\mysql\\bin\\ndb_mgmd.exe –install
Installing service \’NDB Cluster Management Server\’
as \’\”C:\\mysql\\bin\\ndbd.exe\” \”–service=ndb_mgmd\”\’
Service successfully installed.
重要
在将 NDB Cluster 程序安装为 Windows 服务时,应始终指定完整路径;否则服务安装可能会因为错误“系统找不到指定的文件”而失败。
必须首先使用–install选项,然后再指定可能用于ndb_mgmd.exe的任何其他选项。然而,最好是在选项文件中指定这些选项。如果您的选项文件不在ndb_mgmd.exe –help输出中显示的默认位置之一,您可以使用–config-file选项指定位置。
现在您应该能够像这样启动和停止管理服务器:
C:\\> SC START ndb_mgmd
C:\\> SC STOP ndb_mgmd
注意
如果使用NET命令,您也可以使用描述性名称启动或停止管理服务器作为 Windows 服务,如下所示:
C:\\> NET START \’NDB Cluster Management Server\’
The NDB Cluster Management Server service is starting.
The NDB Cluster Management Server service was started successfully.
C:\\> NET STOP \’NDB Cluster Management Server\’
The NDB Cluster Management Server service is stopping..
The NDB Cluster Management Server service was stopped successfully.
通常在安装服务时指定一个简短的服务名称或允许使用默认服务名称,然后在启动或停止服务时引用该名称会更简单。要指定一个不同于ndb_mgmd的服务名称,请将其附加到–install选项中,如下例所示:
C:\\> C:\\mysql\\bin\\ndb_mgmd.exe –install=mgmd1
Installing service \’NDB Cluster Management Server\’
as \’\”C:\\mysql\\bin\\ndb_mgmd.exe\” \”–service=mgmd1\”\’
Service successfully installed.
现在您应该能够使用您指定的名称启动或停止服务,就像这样:
C:\\> SC START mgmd1
C:\\> SC STOP mgmd1
要删除管理节点服务,请使用SC DELETE service_name:
C:\\> SC DELETE mgmd1
或者,使用ndb_mgmd.exe并带上–remove选项,如下所示:
C:\\> C:\\mysql\\bin\\ndb_mgmd.exe –remove
Removing service \’NDB Cluster Management Server\’
Service successfully removed.
如果使用非默认服务名称安装服务,请将服务名称作为ndb_mgmd.exe –remove选项的值传递,如下所示:
C:\\> C:\\mysql\\bin\\ndb_mgmd.exe –remove=mgmd1
Removing service \’mgmd1\’
Service successfully removed.
将 NDB Cluster 数据节点进程安装为 Windows 服务的操作方式类似,使用ndbd.exe的–install选项(或ndbmtd.exe\”)),如下所示:
C:\\> C:\\mysql\\bin\\ndbd.exe –install
Installing service \’NDB Cluster Data Node Daemon\’ as \’\”C:\\mysql\\bin\\ndbd.exe\” \”–service=ndbd\”\’
Service successfully installed.
现在您可以按照以下示例启动或停止数据节点:
C:\\> SC START ndbd
C:\\> SC STOP ndbd
要删除数据节点服务,请使用SC DELETE service_name:
C:\\> SC DELETE ndbd
或者,使用ndbd.exe并带上–remove选项,如下所示:
C:\\> C:\\mysql\\bin\\ndbd.exe –remove
Removing service \’NDB Cluster Data Node Daemon\’
Service successfully removed.
与ndb_mgmd.exe(和mysqld.exe)一样,当将ndbd.exe安装为 Windows 服务时,也可以指定服务名称作为–install的值,然后在启动或停止服务时使用它,如下所示:
C:\\> C:\\mysql\\bin\\ndbd.exe –install=dnode1
Installing service \’dnode1\’ as \’\”C:\\mysql\\bin\\ndbd.exe\” \”–service=dnode1\”\’
Service successfully installed.
C:\\> SC START dnode1
C:\\> SC STOP dnode1
如果在安装数据节点服务时指定了服务名称,那么在删除时也可以使用该名称,如下所示:
C:\\> SC DELETE dnode1
或者,可以将服务名称作为ndbd.exe –remove选项的值传递,如下所示:
C:\\> C:\\mysql\\bin\\ndbd.exe –remove=dnode1
Removing service \’dnode1\’
Service successfully removed.
将 SQL 节点安装为 Windows 服务,启动服务,停止服务和删除服务的操作方式类似,使用mysqld –install,SC START,SC STOP和SC DELETE(或mysqld –remove)。也可以使用NET命令来启动或停止服务。有关更多信息,请参见 Section 2.3.4.8, “Starting MySQL as a Windows Service”。
25.3.3 NDB 集群的初始配置
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-configuration.html
在本节中,我们讨论通过创建和编辑配置文件手动配置已安装的 NDB 集群。
对于我们的四节点、四主机 NDB 集群(请参见 Cluster nodes and host computers),需要编写四个配置文件,每个节点主机一个。
每个数据节点或 SQL 节点都需要一个提供两个信息的my.cnf文件:一个连接字符串,告诉节点在哪里找到管理节点,以及一行告诉此主机上的 MySQL 服务器(承载数据节点的机器)启用NDBCLUSTER存储引擎��
有关连接字符串的更多信息,请参见 Section 25.4.3.3, “NDB Cluster Connection Strings”。
管理节点需要一个config.ini文件,告诉它要维护多少片段副本,为每个数据节点分配多少内存用于数据和索引,数据节点在哪里,每个数据节点在磁盘上保存数据的位置,以及如何找到任何 SQL 节点。
配置数据节点和 SQL 节点。 用于数据节点的my.cnf文件相当简单。配置文件应位于/etc目录中,并且可以使用任何文本编辑器进行编辑(如果文件不存在,则创建文件)。例如:
$> vi /etc/my.cnf
注意
我们在这里展示使用vi创建文件,但任何文本编辑器都可以正常工作。
对于我们示例设置中的每个数据节点和 SQL 节点,my.cnf应该如下所示:
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=198.51.100.10 # location of management server
输入上述信息后,保存此文件并退出文本编辑器。对承载数据节点“A”、数据节点“B”和 SQL 节点的机器执行此操作。
重要
一旦您在my.cnf文件的[mysqld]和[mysql_cluster]部分中使用了ndbcluster和ndb-connectstring参数启动了一个mysqld进程,您就不能在实际启动集群之前执行任何CREATE TABLE或ALTER TABLE语句。否则,这些语句将失败并显示错误。这是设计上的限制。
配置管理节点。 配置管理节点的第一步是创建包含配置文件的目录,然后创建文件本身。例如(以root身份运行):
$> mkdir /var/lib/mysql-cluster
$> cd /var/lib/mysql-cluster
$> vi config.ini
对于我们的代表性设置,config.ini文件应该如下所示:
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of fragment replicas
DataMemory=98M # How much memory to allocate for data storage
[ndb_mgmd]
# Management process options:
HostName=198.51.100.10 # Hostname or IP address of management node
DataDir=/var/lib/mysql-cluster # Directory for management node log files
[ndbd]
# Options for data node \”A\”:
# (one [ndbd] section per data node)
HostName=198.51.100.30 # Hostname or IP address
NodeId=2 # Node ID for this data node
DataDir=/usr/local/mysql/data # Directory for this data node\’s data files
[ndbd]
# Options for data node \”B\”:
HostName=198.51.100.40 # Hostname or IP address
NodeId=3 # Node ID for this data node
DataDir=/usr/local/mysql/data # Directory for this data node\’s data files
[mysqld]
# SQL node options:
HostName=198.51.100.20 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
注意
world数据库可从dev.mysql.com/doc/index-other.html下载。
当所有配置文件都已创建并指定了这些最小选项后,您可以开始启动集群并验证所有进程是否正在运行。我们将在第 25.3.4 节,“NDB 集群的初始启动”中讨论如何执行此操作。
关于可用的 NDB 集群配置参数及其用途的更详细信息,请参见第 25.4.3 节,“NDB 集群配置文件”,以及第 25.4 节,“NDB 集群配置”。关于 NDB 集群配置与备份相关的内容,请参见第 25.6.8.3 节,“NDB 集群备份配置”。
注意
集群管理节点的默认端口是 1186;数据节点的默认端口是 2202。然而,集群可以自动为数据节点分配已经空闲的端口。
25.3.4 NDB Cluster 的初始启动
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-first-start.html
在配置完成后,启动集群并不是很困难。每个集群节点进程必须分别在其所在的主机上启动。应首先启动管理节点,然后是数据节点,最后是任何 SQL 节点:
在管理主机上,从系统 shell 发出以下命令以启动管理节点进程:
$> ndb_mgmd –initial -f /var/lib/mysql-cluster/config.ini
第一次启动时,必须告诉ndb_mgmd在哪里找到其配置文件,使用-f或–config-file选项。此选项要求还必须指定–initial或–reload;有关详细信息,请参阅第 25.5.4 节,“ndb_mgmd — The NDB Cluster Management Server Daemon”。
在每个数据节点主机上运行以下命令以启动ndbd进程:
$> ndbd
如果您在 SQL 节点所在的集群主机上使用 RPM 文件安装 MySQL,则可以(也应该)使用提供的启动脚本来启动 SQL 节点上的 MySQL 服务器进程。
如果一切顺利,且集群已正确设置,那么集群现在应该是可操作的。您可以通过调用ndb_mgm管理节点客户端来测试。输出应该看起来像这里显示的那样,尽管根据您使用的 MySQL 确切版本的不同,输出可能会有一些细微差异:
$> ndb_mgm
— NDB Cluster — Management Client —
ndb_mgm> SHOW
Connected to Management Server at: localhost:1186
Cluster Configuration
———————
[ndbd(NDB)] 2 node(s)
id=2 @198.51.100.30 (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0, *)
id=3 @198.51.100.40 (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @198.51.100.10 (Version: 8.0.35-ndb-8.0.35)
[mysqld(API)] 1 node(s)
id=4 @198.51.100.20 (Version: 8.0.35-ndb-8.0.35)
此处将 SQL 节点称为[mysqld(API)],这反映了mysqld进程充当 NDB Cluster API 节点的事实。
注意
在SHOW的输出中,给定 NDB Cluster SQL 或其他 API 节点的 IP 地址是 SQL 或 API 节点用于连接到集群数据节点的地址,而不是任何管理节点。
现在,您应该已经准备好在 NDB Cluster 中使用数据库、表格和数据了。请参阅第 25.3.5 节,“带有表格和数据的 NDB Cluster 示例”进行简要讨论。
25.3.5 带有表和数据的 NDB Cluster 示例
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-example-data.html
注意
本节内容适用于在 Unix 和 Windows 平台上运行的 NDB Cluster。
与在标准 MySQL 中操作数据库表和数据并没有太大区别。有两个关键点需要记住:
要在集群中复制表,必须使用NDBCLUSTER存储引擎。在创建表时,使用ENGINE=NDBCLUSTER或ENGINE=NDB选项来指定:
CREATE TABLE *tbl_name* (*col_name* *column_definitions*) ENGINE=NDBCLUSTER;
或者,对于使用不同存储引擎的现有表,可以使用ALTER TABLE将表更改为使用NDBCLUSTER:
ALTER TABLE *tbl_name* ENGINE=NDBCLUSTER;
每个NDBCLUSTER表都有一个主键。如果用户在创建表时没有定义主键,NDBCLUSTER存储引擎会自动生成一个隐藏的主键。这样的主键占用空间,就像任何其他表索引一样。(由于内存不足以容纳这些自动生成的索引,遇到问题并不罕见。)
如果您正在使用mysqldump的输出从现有数据库导入表,您可以在文本编辑器中打开 SQL 脚本,并为任何表创建语句添加ENGINE选项,或替换任何现有的ENGINE选项。假设您在另一个不支持 NDB Cluster 的 MySQL 服务器上有world示例数据库,并且想要导出City表:
$> mysqldump –add-drop-table world City > city_table.sql
生成的city_table.sql文件包含此表创建语句(以及导入表数据所需的INSERT语句):
DROP TABLE IF EXISTS `City`;
CREATE TABLE `City` (
`ID` int(11) NOT NULL auto_increment,
`Name` char(35) NOT NULL default \’\’,
`CountryCode` char(3) NOT NULL default \’\’,
`District` char(20) NOT NULL default \’\’,
`Population` int(11) NOT NULL default \’0\’,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM;
INSERT INTO `City` VALUES (1,\’Kabul\’,\’AFG\’,\’Kabol\’,1780000);
INSERT INTO `City` VALUES (2,\’Qandahar\’,\’AFG\’,\’Qandahar\’,237500);
INSERT INTO `City` VALUES (3,\’Herat\’,\’AFG\’,\’Herat\’,186800);
*(remaining INSERT statements omitted)*
你需要确保 MySQL 为这个表使用NDBCLUSTER存储引擎。有两种方法可以实现这一点。其中一种是在将表导入到集群数据库之前修改表定义。以City表为例,修改定义的ENGINE选项如下:
DROP TABLE IF EXISTS `City`;
CREATE TABLE `City` (
`ID` int(11) NOT NULL auto_increment,
`Name` char(35) NOT NULL default \’\’,
`CountryCode` char(3) NOT NULL default \’\’,
`District` char(20) NOT NULL default \’\’,
`Population` int(11) NOT NULL default \’0\’,
PRIMARY KEY (`ID`)
) ENGINE=NDBCLUSTER;
INSERT INTO `City` VALUES (1,\’Kabul\’,\’AFG\’,\’Kabol\’,1780000);
INSERT INTO `City` VALUES (2,\’Qandahar\’,\’AFG\’,\’Qandahar\’,237500);
INSERT INTO `City` VALUES (3,\’Herat\’,\’AFG\’,\’Herat\’,186800);
*(remaining INSERT statements omitted)*
必须为要成为集群数据库一部分的每个表的定义执行此操作。实现这一点的最简单方法是在包含定义的文件上执行搜索和替换,并将所有TYPE=*engine_name*或ENGINE=*engine_name*的实例替换为ENGINE=NDBCLUSTER。如果您不想修改文件,可以使用未修改的文件创建表,然后使用ALTER TABLE来更改它们的存储引擎。具体细节稍后在本节中给出。
假设您已经在集群的 SQL 节点上创建了名为world的数据库,然后您可以使用mysql命令行客户端读取city_table.sql,并按照通常的方式创建和填充相应的表:
$> mysql world < city_table.sql
非常重要的一点是要记住,前述命令必须在运行 SQL 节点的主机上执行(在本例中,在具有 IP 地址198.51.100.20的机器上)。
要在 SQL 节点上创建整个world数据库的副本,请在非集群服务器上使用mysqldump将数据库导出到名为world.sql的文件中(例如,在/tmp目录中)。然后按照刚才描述的方式修改表定义,并将文件导入到集群的 SQL 节点中:
$> mysql world < /tmp/world.sql
如果您将文件保存到不同位置,请相应调整前述说明。
在 SQL 节点上运行SELECT查询与在任何其他 MySQL 服务器实例上运行它们没有任何区别。要从命令行运行查询,您首先需要以通常的方式登录到 MySQL Monitor(在Enter password:提示处指定root密码):
$> mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \\g.
Your MySQL connection id is 1 to server version: 8.0.35-ndb-8.0.35
Type \’help;\’ or \’\\h\’ for help. Type \’\\c\’ to clear the buffer.
mysql>
我们只使用 MySQL 服务器的root帐户,并假设您已经遵循了安装 MySQL 服务器的标准安全预防措施,包括设置强大的root密码。有关更多信息,请参见 Section 2.9.4, “Securing the Initial MySQL Account”。
值得注意的是,NDB Cluster 节点在相互访问时不使用 MySQL 权限系统。设置或更改 MySQL 用户帐户(包括root帐户)仅影响访问 SQL 节点的应用程序,而不影响节点之间的交互。有关更多信息,请参见 Section 25.6.20.2, “NDB Cluster and MySQL Privileges”。
如果在导入 SQL 脚本之前未修改表定义中的ENGINE子句,则应在此时运行以下语句:
mysql> USE world;
mysql> ALTER TABLE City ENGINE=NDBCLUSTER;
mysql> ALTER TABLE Country ENGINE=NDBCLUSTER;
mysql> ALTER TABLE CountryLanguage ENGINE=NDBCLUSTER;
选择数据库并针对该数据库中的表运行SELECT查询也是按照通常的方式完成的,退出 MySQL Monitor 也是一样:
mysql> USE world;
mysql> SELECT Name, Population FROM City ORDER BY Population DESC LIMIT 5;
+———–+————+
| Name | Population |
+———–+————+
| Bombay | 10500000 |
| Seoul | 9981619 |
| São Paulo | 9968485 |
| Shanghai | 9696300 |
| Jakarta | 9604900 |
+———–+————+
5 rows in set (0.34 sec)
mysql> \\q
Bye
$>
使用 MySQL 的应用程序可以使用标准 API 来访问NDB表。重要的是要记住,您的应用程序必须访问 SQL 节点,而不是管理或数据节点。这个简短的示例展示了我们如何通过在网络上的其他地方运行的 PHP 5.X mysqli扩展来执行刚刚显示的SELECT语句:
<!DOCTYPE HTML PUBLIC \”-//W3C//DTD HTML 4.01 Transitional//EN\”
\”http://www.w3.org/TR/html4/loose.dtd\”>
<html>
<head>
<meta http-equiv=\”Content-Type\”
content=\”text/html; charset=iso-8859-1\”>
<title>SIMPLE mysqli SELECT</title>
</head>
<body>
<?php
# connect to SQL node:
$link = new mysqli(\’198.51.100.20\’, \’root\’, \’*root_password*\’, \’world\’);
# parameters for mysqli constructor are:
# host, user, password, database
if( mysqli_connect_errno() )
die(\”Connect failed: \” . mysqli_connect_error());
$query = \”SELECT Name, Population
FROM City
ORDER BY Population DESC
LIMIT 5\”;
# if no errors…
if( $result = $link->query($query) )
{
?>
<table border=\”1\” width=\”40%\” cellpadding=\”4\” cellspacing =\”1\”>
<tbody>
<tr>
<th width=\”10%\”>City</th>
<th>Population</th>
</tr>
<?
# then display the results…
while($row = $result->fetch_object())
printf(\”<tr>\\n <td align=\\\”center\\\”>%s</td><td>%d</td>\\n</tr>\\n\”,
$row->Name, $row->Population);
?>
</tbody
</table>
<?
# …and verify the number of rows that were retrieved
printf(\”<p>Affected rows: %d</p>\\n\”, $link->affected_rows);
}
else
# otherwise, tell us what went wrong
echo mysqli_error();
# free the result set and the mysqli connection object
$result->close();
$link->close();
?>
</body>
</html>
我们假设运行在 Web 服务器上的进程可以访问 SQL 节点的 IP 地址。
以类似的方式,您可以使用 MySQL C API、Perl-DBI、Python-mysql 或 MySQL Connectors 来执行数据定义和操作任务,就像您通常使用 MySQL 一样。
25.3.6 安全关闭和重启 NDB 集群
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-install-shutdown-restart.html
要关闭集群,请在托管管理节点的机器上的 shell 中输入以下命令:
$> ndb_mgm -e shutdown
这里的 -e 选项用于从 shell 传递命令给ndb_mgm客户端。该命令导致ndb_mgm、ndb_mgmd以及任何ndbd或ndbmtd\”)进程优雅地终止。任何 SQL 节点都可以使用mysqladmin shutdown和其他方法终止。在 Windows 平台上,假设您已将 SQL 节点安装为 Windows 服务,您可以使用 SC STOP service_name 或 NET STOP service_name。
要在 Unix 平台上重新启动集群,请运行以下命令:
在管理主机(我们示例设置中的198.51.100.10)上:
$> ndb_mgmd -f /var/lib/mysql-cluster/config.ini
在每个数据节点主机(198.51.100.30和198.51.100.40)上:
$> ndbd
使用ndb_mgm客户端验证两个数据节点已成功启动。
在 SQL 主机(198.51.100.20)上:
$> mysqld_safe &
在 Windows 平台上,假设您已使用默认服务名称将所有 NDB 集群进程安装为 Windows 服务(参见 Section 25.3.2.4, “Installing NDB Cluster Processes as Windows Services”),您可以按以下方式重新启动集群:
在管理主机(我们示例设置中的198.51.100.10)上执行以下命令:
C:\\> SC START ndb_mgmd
在每个数据节点主机(198.51.100.30和198.51.100.40)上执行以下命令:
C:\\> SC START ndbd
在管理节点主机上,使用ndb_mgm客户端验证管理节点和两个数据节点已成功启动(参见 Section 25.3.2.3, “Initial Startup of NDB Cluster on Windows”)。
在 SQL 节点主机(198.51.100.20)上执行以下命令:
C:\\> SC START mysql
在生产环境中,通常不希望完全关闭集群。在许多情况下,即使进行配置更改或对集群硬件或软件(或两者)进行升级需要关闭单个主机,也可以通过对集群进行滚动重启而不必完全关闭集群来实现。有关如何执行此操作的更多信息,请参见第 25.6.5 节,“执行 NDB 集群的滚动重启”。
25.3.7 NDB Cluster 的升级和降级
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-upgrade-downgrade.html
升级到 NDB 8.0 支持的版本
回滚 NDB Cluster 8.0 升级
升级或降级 NDB Cluster 时已知问题
本节提供有关 NDB Cluster 软件以及不同 NDB Cluster 8.0 版本之间的兼容性信息,涉及执行升级和降级操作。在尝试升级或降级之前,您应该已经熟悉安装和配置 NDB Cluster。请参阅第 25.4 节,“NDB Cluster 配置”。
重要提示
在 NDB 8.0 中支持 NDB 存储引擎的小版本之间的在线升级和降级。支持包含的 MySQL Server(SQL 节点mysqld)的原地升级;对于多个 SQL 节点,可以在重新启动单个mysqld 进程的同时保持 SQL 应用在线。不支持包含的 MySQL Server 的原地降级(参见第四章,“降级 MySQL”)。
在某些情况下,可能会将最近的 NDB 8.0 小版本升级回到较新版本,并恢复运行为 SQL 节点的任何 MySQL Server 实例的所需状态。如果出现这种需求或必要性,强烈建议在升级 NDB Cluster 之前对每个 SQL 节点进行完整备份。出于同样的原因,您还应该使用新版本的–ndb-schema-dist-upgrade-allowed=0启动mysqld二进制文件,并在确保不会回退到旧版本之前不允许将其设置为 1。有关更多信息,请参阅回滚 NDB Cluster 8.0 升级。
有关从 8.0 之前版本升级到 NDB 8.0 的信息,请参阅升级到 NDB 8.0 支持的版本。
有关升级或降级 NDB 8.0 时遇到的已知问题和问题的信息,请参见升级或降级 NDB Cluster 时的已知问题。
支持升级至 NDB 8.0 的版本
支持将以下版本的 NDB Cluster 升级至 GA 版本的 NDB Cluster 8.0(8.0.19 及更高版本):
NDB Cluster 7.6:NDB 7.6.4 及更高版本
NDB Cluster 7.5:NDB 7.5.4 及更高版本
NDB Cluster 7.4:NDB 7.4.6 及更高版本
要从 NDB 7.4 之前的版本系列升级,必须分阶段升级,首先升级到刚列出的版本之一,然后从该版本升级到最新的 NDB 8.0 版本。在这种情况下,建议首先升级至最新的 NDB 7.6 版本。有关从旧版本升级至 NDB 7.6 的信息,请参见升级和降级 NDB 7.6。
撤销 NDB Cluster 8.0 升级
最近将 NDB Cluster 软件升级至 NDB 8.0 版本后,可以将 NDB 软件回滚到较早版本,前提是在升级之前、集群运行较新版本期间以及将 NDB Cluster 软件回滚到较早版本之后满足某些条件。具体取决于当地情况;本节提供了关于在上述升级和回滚过程中每个点应该做什么的一般信息。
在大多数情况下,可以无问题地升级和降级数据节点,如其他地方所述;请参见第 25.6.5 节,“执行 NDB Cluster 的滚动重启”。(在执行升级或降级之前,您应执行 NDB 备份;有关如何执行此操作,请参见第 25.6.8 节,“NDB Cluster 的在线备份”。)不支持在线降级 SQL 节点,原因如下:
从 8.0 版本开始的mysqld如果检测到来自较新版本的 MySQL 的文件系统,则无法启动。
在许多情况下,mysqld 无法打开由较新版本的 MySQL 创建或修改的表。
在大多数情况下,mysqld无法读取由较新版本的 MySQL 创建或修改的二进制日志文件。
接下来概述的过程提供了升级集群从版本X到版本Y所需的基本步骤,同时允许将来可能回滚到X版本。 (将升级后的集群恢复到X版本的过程稍后在本节中介绍。)为此,版本X是任何 NDB 8.0 GA 版本,或任何支持升级到 NDB 8.0 的先前 NDB 版本(请参阅支持升级到 NDB 8.0 的版本),而版本Y是晚于X的 NDB 8.0 版本。
升级前:备份 NDB X SQL 节点状态。可以通过以下一种或多种方式完成:
使用诸如cp、rsync、fwbackups、Amanda 等一个或多个系统工具在静止状态下复制版本X SQL 节点文件系统的副本。
未存储在NDB中的任何版本X表的转储。您可以使用mysqldump生成此转储。
使用 MySQL Enterprise Backup 创建的备份;有关更多信息,请参见第 32.1 节,“MySQL Enterprise Backup 概述”。
在任何升级之前建议备份 SQL 节点,无论您是否打算将集群恢复到先前的NDB版本。
*升级到 NDB Y:所有 NDB Y mysqld二进制文件必须使用–ndb-schema-dist-upgrade-allowed=0启动,以防止任何自动模式升级。(一旦降级的可能性过去,您可以安全地将相应的系统变量ndb_schema_dist_upgrade_allowed更改回默认值 1,在mysql客户端中。)当每个 NDB Y SQL 节点启动时,它会连接到集群并同步其NDB表模式。之后,您可以从备份中恢复 MySQL 表和状态数据。
为确保 NDB 复制的连续性,有必要以一种方式升级集群的 SQL 节点,以便在升级过程中任何给定时间点至少有一个mysqld充当复制源。有两个 SQL 节点A和B,您可以这样做:
在使用 SQL 节点B作为复制通道时,将 SQL 节点A从 NDB 版本X升级到版本Y。这将导致A上的二进制日志在时期E1处出现间隙。
在所有复制应用程序消耗了 SQL 节点B过去时期E1的二进制日志后,将复制通道切换到使用 SQL 节点A。
将 SQL 节点B升级到 NDB 版本Y。这将导致B上的二进制日志在时期E2处出现间隙。
在所有复制应用程序消耗了 SQL 节点*A过去时期E2*的二进制日志后,您可以再次根据需要切换复制通道以使用任一 SQL 节点。
不要对任何现有的NDB表使用ALTER TABLE;在降级之前不要创建任何无法安全删除的新NDB表。
以下过程展示了在执行如上所述的升级后,从版本*X回滚(恢复)到版本Y的 NDB 集群所需的基本步骤。这里,版本X是任何 NDB 8.0 GA 版本,或任何支持升级到 NDB 8.0 的先前 NDB 版本(请参见支持升级到 NDB 8.0 的版本);版本Y是晚于X*的 NDB 8.0 版本。
回滚之前:从应保留的 NDB Y SQL 节点中收集任何mysqld状态信息。在大多数情况下,您可以使用mysqldump来执行此操作。
在备份状态数据后,删除自升级以来已创建或更改的所有NDB表。
在进行任何 NDB 集群软件版本更改之前,始终建议备份 SQL 节点。
您必须为每个mysqld(SQL 节点)提供与 MySQL *X*兼容的文件系统。您可以使用以下两种方法之一:
通过重新初始化版本*X* SQL 节点的磁盘状态,创建一个新的兼容文件系统状态。您可以通过删除 SQL 节点文件系统,然后运行mysqld –initialize来实现这一点。
从升级前的备份中恢复一个兼容的文件系统(参见第 9.4 节,“使用 mysqldump 进行备份”)。
在NDB降级后:将数据节点降级为 NDB X后,启动版本X SQL 节点(mysqld的实例)。在每个 SQL 节点上恢复或修复任何其他所需的本地状态信息。可以通过以下操作的某种组合(0 个或多个)将 MySQLD 状态调整为必要的状态:
初始化命令,如mysqld –initialize。
恢复从版本*X* SQL 节点捕获的任何所需或必要的状态信息。
恢复从版本*Y* SQL 节点捕获的任何所需或必要的状态信息。
执行清理操作,例如删除过时的日志,如二进制日志或中继日志,并删除任何不再有效的时间相关状态。
在降级时,为了保持 NDB 复制的连续性,需要以一种方式降级集群的 SQL 节点,以确保在降级过程中至少有一个mysqld在任何给定时间点充当复制源。这可以通过与升级 SQL 节点类似的方式来完成。有两个 SQL 节点 A 和 B,你可以在降级过程中保持二进制日志没有任何间隙,就像这样:
以 SQL 节点 B 充当复制通道,将 SQL 节点 A 从 NDB 版本 Y 降级到版本 *X。这会导致在时期 F1 上的 SQL 节点 A 上的二进制日志中出现间隙。
在所有复制应用程序消耗了 SQL 节点 B 过去时期 F1 的二进制日志后,切换复制通道以使用 SQL 节点 A。
将 SQL 节点 B 降级到 NDB 版本 X。这会导致在时期 F2 上的 SQL 节点 B 上的二进制日志中出现间隙。
在所有复制应用程序消耗了 SQL 节点 A 过去时期 F2 的二进制日志后,二进制日志的冗余性得以恢复,你可以根据需要再次使用任一 SQL 节点作为复制通道。
另请参阅 Section 25.7.7, “Using Two Replication Channels for NDB Cluster Replication”。
升级或降级 NDB 集群时已知的问题
在本节中,提供关于升级或降级到、从或在 NDB 8.0 版本之间发生的已知问题的信息。
我们建议您在任何 NDB 集群软件升级或降级期间不要尝试进行模式更改。以下是其中一些原因:
在某些数据节点启动阶段,不允许对 NDB 表执行 DDL 语句。
如果在执行过程中停止任何数据节点,则可能会拒绝对 NDB 表的 DDL 语句;停止每个数据节点的二进制文件(以便用目标版本的二进制文件替换)是升级或降级过程的一部分。
在同一集群中运行不同版本的 NDB Cluster 软件的数据节点时,不允许对 NDB 表执行 DDL 语句。
有关执行数据节点在线升级或降级的滚动重启过程的更多信息,请参阅 Section 25.6.5, “Performing a Rolling Restart of an NDB Cluster”。
在执行 NDB 8.0 的次要版本之间的在线升级时,应注意以下列表中的问题。这些问题也适用于从 NDB Cluster 的先前主要版本升级到任何已声明的 NDB 8.0 版本。
NDB 8.0.22 为 config.ini 文件中的管理节点和数据节点添加了对 IPv6 地址的支持。要在升级过程中开始使用 IPv6 地址,请执行以下步骤:
以通常方式将集群升级到版本 8.0.22 或更高版本的 NDB Cluster 软件。
将 config.ini 文件中使用的地址更改为 IPv6 地址。
执行集群的系统重启。
在 Linux 平台上运行 NDB 8.0.22 及更高版本时,已知问题是即使没有使用任何 IPv6 地址,操作系统内核也需要提供 IPv6 支持。此问题在 NDB 8.0.34 及更高版本中已修复(Bug #33324817,Bug #33870642)。
如果您使用的是受影响的版本,并希望在系统上禁用对 IPv6 的支持(因为您不打算为 NDB Cluster 节点使用任何 IPv6 地址),请在系统启动后执行以下操作:
$> sysctl -w net.ipv6.conf.all.disable_ipv6=1
$> sysctl -w net.ipv6.conf.default.disable_ipv6=1
(或者,您可以将相应行添加到 /etc/sysctl.conf 中。)在 NDB Cluster 8.0.34 及更高版本中,前述操作是不必要的,如果您不需要或不想要 IPv6 支持,可以简单地在 Linux 内核中禁用 IPv6 支持。
由于内部 mysql.ndb_schema 表的更改,如果您升级到 8.0.24 之前的 NDB 8.0 版本,则建议您使用 –ndb-schema-dist-upgrade-allowed = 0 来避免意外的中断(Bug #30876990,Bug #31016905)。
另外,如果有可能在升级到新版本后恢复到以前的 NDB Cluster 版本,您必须从新版本启动所有mysqld进程,并使用 –ndb-schema-dist-upgrade-allowed = 0 来防止对ndb_schema表进行与旧版本不兼容的更改。有关如何执行此操作,请参阅回滚 NDB Cluster 8.0 升级。
EncryptedFileSystem 配置参数在 NDB 8.0.29 中引入,有时可能会导致撤消日志文件被加密,即使明确设置为 0,这可能会在使用 Disk Data 表并尝试升级或降级到 NDB 8.0.29 时出现问题。在这种情况下,您可以通过在滚动重启过程中执行数据节点的初始重启来解决问题。
如果您正在使用多线程数据节点(ndbmtd)和ThreadConfig配置参数,则在从先前版本升级到 NDB 8.0.30 或更高版本时,可能需要更改config.ini文件中为其设置的值。在从 NDB 8.0.23 或更早版本升级时,必须显式设置在先前版本中隐含的main、rep、recv或ldm线程的任何使用。在从 NDB 8.0.23 或更高版本升级到 NDB 8.0.30 或更高版本时,必须在ThreadConfig字符串中显式设置任何recv线程的使用。此外,为了避免在 NDB 8.0.30 或更高版本中使用main、rep或ldm线程,必须显式将给定类型的线程计数设置为0。
以下是一个示例。
NDB 8.0.22 及更早版本:
config.ini文件包含ThreadConfig=ldm。
在这些版本的NDB中,这被解释为ThreadConfig=main,ldm,recv,rep。
在config.ini中需要设置以下内容以匹配 NDB 8.0.30 或更高版本的效果:ThreadConfig=main,ldm,recv,rep。
NDB 8.0.23—8.0.29:
config.ini文件包含ThreadConfig=ldm。
在这些版本的NDB中,这被解释为ThreadConfig=ldm,recv。
在config.ini中需要设置以下内容以匹配 NDB 8.0.30 或更高版本的效果:ThreadConfig=main={count=0},ldm,recv,rep={count=0}。
更多信息,请参阅ThreadConfig配置参数的描述。
支持从 NDB Cluster 的先前主要版本(7.4、7.5、7.6)升级到 NDB 8.0;请参阅升级到 NDB 8.0 支持的版本,以获取具体版本信息。此类升级受到以下问题的影响:
在 NDB 8.0 中,log_bin的默认值为 1,与之前版本有所改变。此外,从 NDB 8.0.16 开始,ndb_log_bin的默认值从 1 改为 0,这意味着必须显式设置ndb_log_bin为 1 才能在此版本及以后的版本中启用二进制日志记录。
在先前的发布系列中实现的 MySQL 服务器之间共享的分布式权限(请参见使用共享授权表进行分布式权限)在 NDB Cluster 8.0 中不受支持。在启动时,NDB 8.0 及更高版本提供的mysqld会检查是否存在使用NDB存储引擎的任何授权表;如果找到任何授权表,它将使用InnoDB创建本地副本(“影子表”)。对于每个连接到 NDB Cluster 的 MySQL 服务器都是如此。在所有作为 NDB Cluster SQL 节点的 MySQL 服务器上执行此操作后,可以使用 NDB Cluster 发行版提供的ndb_drop_table实用程序安全地删除NDB授权表,如下所示:
ndb_drop_table -d mysql user db columns_priv tables_priv proxies_priv procs_priv
可以保留NDB授权表,但它们不用于访问控制,实际上被忽略。
有关 NDB 8.0 中使用的 MySQL 权限系统的更多信息,请参见第 25.6.13 节,“权限同步和 NDB_STORED_USER”,以及第 8.2.3 节,“授权表”。
在将任何 NDB 7.6 之前的版本升级到任何 NDB 8.0 版本时,需要使用–initial重新启动所有数据节点。这是因为 NDB 8.0 增加了对节点数量的支持。
尝试从 NDB 8.0 降级到以前的主要版本时遇到的问题可以在以下列表中找到:
由于 NDB 8.0 中对NDB表实现的额外元数据属性的使用方式发生了变化,导致与 NDB 7.6 和更早版本不兼容,因此在降级之前需要采取额外步骤来保留集群 SQL 节点的任何所需状态信息,然后在降级后进行恢复。
更具体地说,支持NDBCLUSTER存储引擎的在线降级,即数据节点的降级,但 SQL 节点无法在线降级。这是因为给定 MySQL 8.0 或更早版本的 MySQL 服务器(mysqld)无法使用来自(稍后的)8.0 版本的系统文件,并且无法打开在稍后版本中创建的表。可能可以回滚最近从以前的 NDB 版本升级的集群;有关何时以及如何执行此操作,请参见回滚 NDB Cluster 8.0 升级。
有关这些问题的更多信息,请参见 NDB 表额外元数据的更改;另请参见 第十六章,MySQL 数据字典。
在 NDB 8.0 中,二进制配置文件格式已经改进,以支持比以前版本更多的节点。新格式对于运行旧版本NDB的节点不可访问,尽管新的管理服务器可以检测到旧节点并使用适当的格式与它们通信。
升级到 NDB 8.0 在这方面不应该有问题,但是旧的管理服务器无法读取更新的二进制配置文件格式,因此在从 NDB 8.0 降级到之前的主要版本时需要一些手动干预。在执行这样的降级时,需要在使用旧版NDB软件版本启动管理之前删除任何缓存的二进制配置文件,并确保管理服务器可以读取明文配置文件。或者,您可以使用 –initial 选项启动旧的管理服务器(同样,需要有config.ini可用)。如果集群使用多个管理服务器,则必须为每个管理服务器二进制文件执行这两个操作。
与支持增加节点数量有关,由于在数据节点 LCP Sysfile 中实施的不兼容更改,因此在从 NDB 8.0 在线降级到先前的主要版本时,需要重新启动所有数据节点并使用 –initial 选项。
不支持将运行超过 48 个数据节点的集群或使用大于 48 的节点 ID 的数据节点在线降级到 NDB 8.0 之前的 NDB Cluster 版本。在这种情况下,需要减少数据节点的数量,更改所有数据节点的配置,使它们使用小于或等于 48 的节点 ID,或者根据需要同时执行这两个操作,以确保不超过旧的最大限制。
如果要从 NDB 8.0 降级到 NDB 7.5 或 NDB 7.4,则必须在集群配置文件中为 IndexMemory 设置一个显式值,如果尚未设置。这是因为 NDB 8.0 不使用此参数(在 NDB 7.6 中已删除),并默认将其设置为 0,而在 NDB 7.5 和 NDB 7.4 中,集群要求IndexMemory设置为非零值,否则集群将拒绝启动并显示来自管理服务器的无效配置…。
从 NDB 8.0 降级到 NDB 7.6 不 需要设置IndexMemory。
25.3.8 NDB Cluster 自动安装程序(不再受支持)
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-installer.html
注意
此功能已从 NDB Cluster 中移除,并不再受支持。有关更多信息,请参见第 25.2.4 节,“MySQL NDB Cluster 8.0 中的新功能”。
基于 Web 的图形化配置安装程序(Auto-Installer)在 NDB 8.0.23 中已被移除,并不再作为 NDB Cluster 发行版的一部分。
:
“`sql
ndb_drop_table -d mysql user db columns_priv tables_priv proxies_priv procs_priv
“`
可以保留`NDB`授权表,但它们不用于访问控制,实际上被忽略。
有关 NDB 8.0 中使用的 MySQL 权限系统的更多信息,请参见第 25.6.13 节,“权限同步和 NDB_STORED_USER”,以及第 8.2.3 节,“授权表”。
在将任何 NDB 7.6 之前的版本升级到任何 NDB 8.0 版本时,需要使用–initial重新启动所有数据节点。这是因为 NDB 8.0 增加了对节点数量的支持。
尝试从 NDB 8.0 降级到以前的主要版本时遇到的问题可以在以下列表中找到:
由于 NDB 8.0 中对NDB表实现的额外元数据属性的使用方式发生了变化,导致与 NDB 7.6 和更早版本不兼容,因此在降级之前需要采取额外步骤来保留集群 SQL 节点的任何所需状态信息,然后在降级后进行恢复。
更具体地说,支持NDBCLUSTER存储引擎的在线降级,即数据节点的降级,但 SQL 节点无法在线降级。这是因为给定 MySQL 8.0 或更早版本的 MySQL 服务器(mysqld)无法使用来自(稍后的)8.0 版本的系统文件,并且无法打开在稍后版本中创建的表。可能可以回滚最近从以前的 NDB 版本升级的集群;有关何时以及如何执行此操作,请参见回滚 NDB Cluster 8.0 升级。
有关这些问题的更多信息,请参见 NDB 表额外元数据的更改;另请参见 第十六章,MySQL 数据字典。
在 NDB 8.0 中,二进制配置文件格式已经改进,以支持比以前版本更多的节点。新格式对于运行旧版本NDB的节点不可访问,尽管新的管理服务器可以检测到旧节点并使用适当的格式与它们通信。
升级到 NDB 8.0 在这方面不应该有问题,但是旧的管理服务器无法读取更新的二进制配置文件格式,因此在从 NDB 8.0 降级到之前的主要版本时需要一些手动干预。在执行这样的降级时,需要在使用旧版NDB软件版本启动管理之前删除任何缓存的二进制配置文件,并确保管理服务器可以读取明文配置文件。或者,您可以使用 –initial 选项启动旧的管理服务器(同样,需要有config.ini可用)。如果集群使用多个管理服务器,则必须为每个管理服务器二进制文件执行这两个操作。
与支持增加节点数量有关,由于在数据节点 LCP Sysfile 中实施的不兼容更改,因此在从 NDB 8.0 在线降级到先前的主要版本时,需要重新启动所有数据节点并使用 –initial 选项。
不支持将运行超过 48 个数据节点的集群或使用大于 48 的节点 ID 的数据节点在线降级到 NDB 8.0 之前的 NDB Cluster 版本。在这种情况下,需要减少数据节点的数量,更改所有数据节点的配置,使它们使用小于或等于 48 的节点 ID,或者根据需要同时执行这两个操作,以确保不超过旧的最大限制。
如果要从 NDB 8.0 降级到 NDB 7.5 或 NDB 7.4,则必须在集群配置文件中为 IndexMemory 设置一个显式值,如果尚未设置。这是因为 NDB 8.0 不使用此参数(在 NDB 7.6 中已删除),并默认将其设置为 0,而在 NDB 7.5 和 NDB 7.4 中,集群要求IndexMemory设置为非零值,否则集群将拒绝启动并显示来自管理服务器的无效配置…。
从 NDB 8.0 降级到 NDB 7.6 不 需要设置IndexMemory。
25.3.8 NDB Cluster 自动安装程序(不再受支持)
原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-installer.html
注意
此功能已从 NDB Cluster 中移除,并不再受支持。有关更多信息,请参见第 25.2.4 节,“MySQL NDB Cluster 8.0 中的新功能”。
基于 Web 的图形化配置安装程序(Auto-Installer)在 NDB 8.0.23 中已被移除,并不再作为 NDB Cluster 发行版的一部分。
#以上关于MySQL8 中文参考(八十六)的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92163.html