A.10 MySQL 8.4 常见问题解答:NDB 集群
在以下部分,我们回答了关于 MySQL NDB 集群和 NDB
存储引擎的常见问题。
- A.10.1. 哪些版本的 MySQL 软件支持 NDB 集群?我是否需要从源代码编译?
- A.10.2. “NDB” 和 “NDBCLUSTER” 是什么意思?
- A.10.3. 使用 NDB 集群与使用 MySQL 复制有什么区别?
- A.10.4. 我是否需要特殊的网络来运行 NDB 集群?集群中的计算机如何通信?
- A.10.5. 我需要多少台计算机来运行 NDB 集群,为什么?
- A.10.6. NDB 集群中的不同计算机有什么作用?
- A.10.7. 当我在 NDB 集群管理客户端中运行 SHOW 命令时,我看到一行输出,看起来像这样:
- A.10.8. 我可以使用哪些操作系统来使用 NDB 集群?
- A.10.9. 运行 NDB 集群需要什么硬件要求?
- A.10.10. 我需要多少 RAM 来使用 NDB 集群?是否可以使用磁盘内存?
- A.10.11. 我可以使用哪些文件系统与 NDB 集群?关于网络文件系统或网络共享呢?
- A.10.12. 我可以在虚拟机(例如 VMware、VirtualBox、Parallels 或 Xen 创建的虚拟机)中运行 NDB 集群节点吗?
- A.10.13. 我正在尝试填充 NDB 集群数据库。加载过程提前终止,我收到类似这样的错误消息:
- A.10.14. NDB 集群使用 TCP/IP。这是否意味着我可以在互联网上运行它,具有一个或多个远程位置的节点?
- A.10.15. 我是否需要学习新的编程或查询语言来使用 NDB 集群?
- A.10.16. NDB 集群支持哪些编程语言和 API?
- A.10.17. NDB 集群是否包括任何管理工具?
- A.10.18. 我如何找到 NDB 集群中的错误或警告消息的含义?
- A.10.19. NDB 集群是否事务安全?支持哪些隔离级别?
- A.10.20. NDB 集群支持哪些存储引擎?
- A.10.21. 如果发生灾难性故障——例如,整个城市断电,我的 UPS 失败——我是否会丢失所有数据?
- A.10.22. 是否可以使用 FULLTEXT 索引与 NDB 集群?
- A.10.23. 我可以在一台计算机上运行多个节点吗?
- A.10.24. 我可以在不重新启动的情况下将数据节点添加到 NDB 集群中吗?
- A.10.25. 使用 NDB 集群时,我需要注意哪些限制?
- A.10.26. NDB 集群是否支持外键?
- A.10.27. 我如何将现有的 MySQL 数据库导入 NDB 集群?
- A.10.28. NDB 集群节点如何相互通信?
- A.10.29. 仲裁器是什么?
- A.10.30. NDB 集群支持哪些数据类型?
- A.10.31. 我如何启动和停止 NDB 集群?
- A.10.32. 当 NDB 集群关闭时,数据会发生什么变化?
- A.10.33. 是否建议为 NDB 集群拥有多个管理节点?
- A.10.34. 我可以在一个 NDB 集群中混合使用不同的硬件和操作系统吗?
- A.10.35. 我可以在一台主机上运行两个数据节点?两个 SQL 节点?
- A.10.36. 我可以使用主机名与 NDB 集群吗?
- A.10.37. NDB 集群是否支持 IPv6?
- A.10.38. 如何在 NDB 集群中处理多个 MySQL 服务器的用户?
- A.10.39. 如果一个 SQL 节点失败,我如何继续发送查询?
- A.10.40. 如何备份和恢复 NDB 集群?
- A.10.41. 什么是“angel 进程”?
A.10.1. |
哪些版本的 MySQL 软件支持 NDB 集群?我需要从源代码编译吗? |
NDB 集群不支持标准的 MySQL 服务器版本。相反,MySQL NDB 集群作为一个单独的产品提供。可用的 NDB 集群版本系列包括以下:
你可以从源代码编译 NDB 集群(见 第 25.3.1.4 节,“在 Linux 上从源代码构建 NDB 集群” 和 第 25.3.2.2 节,“在 Windows 上从源代码编译和安装 NDB 集群”),但对于大多数情况,我们建议使用 Oracle 提供的适合你的操作平台和情况的安装程序: 安装包也可能来自你的平台的包管理系统。 你可以使用以下语句确定你的 MySQL 服务器是否支持 |
|
A.10.2. |
什么是 “NDB” 和 “NDBCLUSTER”? |
“NDB” 代表 “网络 数据库”。 |
|
A.10.3. |
使用 NDB 集群与使用 MySQL 复制有什么区别? |
在传统的 MySQL 复制中,一个源 MySQL 服务器更新一个或多个副本。事务是顺序提交的,一个慢事务可能会导致副本落后于源。如果源失败,可能副本没有记录最后几个事务。如果使用事务安全引擎,如 简言之,标准的 MySQL 复制是 异步的,而 NDB Cluster 是 同步的。 NDB Cluster 也支持异步复制。NDB Cluster 复制(有时也称为 “地理复制”)包括在两个 NDB Cluster 之间和从 NDB Cluster 到非 Cluster MySQL 服务器之间复制的能力。见 第 25.7 节,“NDB Cluster 复制”。 |
|
A.10.4. |
我需要特殊的网络来运行 NDB Cluster 吗?集群中的计算机如何通信? |
NDB Cluster旨在高带宽环境中使用,计算机使用 TCP/IP 连接。其性能直接取决于集群中的计算机之间的连接速度。NDB Cluster 的最低连接要求包括典型的 100 兆比特以太网或等效的网络。我们建议您使用 gigabit 以太网,尽可能使用。 |
|
A.10.5. |
我需要多少台计算机来运行 NDB Cluster,为什么? |
至少需要三台计算机来运行可行的集群。然而,NDB Cluster 的最低 推荐计算机数量是四台:一台管理节点和 SQL 节点各一台,两台数据节点。两个数据节点的目的是提供冗余;管理节点必须在单独的机器上运行,以确保在一个数据节点失败时继续仲裁服务。 为了提供更高的吞吐量和高可用性,您应该使用多个 SQL 节点(连接到集群的 MySQL 服务器)。也可以(虽然不是严格必要的)运行多个管理服务器。 |
|
A.10.6. |
NDB Cluster 中的不同计算机做什么? |
NDB Cluster 既有物理组织,也有逻辑组织,计算机是物理元素。集群的逻辑或功能元素称为 节点,集群主机也称为 集群主机。有三种类型的节点,每种对应集群中的特定角色。这些是:
|
|
A.10.7. |
当我在 NDB 集群管理客户端中运行
星号(*)是什么意思?这个节点与其他节点有什么不同? |
最简单的答案是:“这不是您需要控制或担忧的事情,除非您是一名软件工程师,正在编写或分析 NDB 集群源代码”。 如果您不满足这个答案,这里有一个更长、更技术性的版本: NDB 集群中的许多机制需要在数据节点之间进行分布式协调。这些分布式算法和协议包括全局检查点、DDL(模式)更改和节点重新启动处理。为了使协调变得更简单,数据节点“选举”其中一个节点作为领导者。没有用户面向的机制来影响这个选择,这完全是自动的;事实上,这是 NDB 集群内部架构的关键部分。 当一个节点充当领导者时,它通常是活动的协调点,其他节点充当“跟随者”,按照领导者的指令执行活动。如果领导者节点失败,那么剩余的节点将选举一个新的领导者。在进度中的任务可能会失败或由新的领导者继续,具体取决于实际机制。 可能有多个不同的机制和协议选择不同的领导者节点,但通常情况下,同一个领导者节点被选择用于所有这些机制。管理客户端中 NDB 集群被设计成这样,领导者的选择对集群外部没有明显的影响。例如,当前领导者节点的 CPU 或资源使用量与其他数据节点没有明显的差异,领导者节点的失败对集群的影响与其他数据节点的失败没有明显的差异。 |
|
A.10.8. |
我可以在哪些操作系统上使用 NDB 集群? |
NDB 集群支持大多数 Unix-like 操作系统。NDB 集群也支持 Microsoft Windows 操作系统的生产环境。 有关 NDB 集群在不同操作系统版本、操作系统发行版和硬件平台上的支持级别的详细信息,请参阅 https://www.mysql.com/support/supportedplatforms/cluster.html。 |
|
A.10.9. |
运行 NDB 集群需要什么硬件要求? |
NDB 集群应该在任何平台上运行,其中 |
|
A.10.10. |
我需要多少 RAM 来使用 NDB 集群?是否可以使用磁盘内存? |
NDB 集群最初是作为内存 only 实现的,但所有当前版本也提供了将 NDB 集群存储在磁盘上的能力。请参阅 第 25.6.11 节,“NDB 集群磁盘数据表”,以获取更多信息。 对于内存
要精确计算内存需求,需要确定每个表在集群数据库中的存储空间需求(请参阅 第 13.7 节,“数据类型存储需求”,以获取详细信息),然后将其乘以行数。您还必须记住为每个列索引分配空间,如下所示:
使用 在计算集群内存需求时,您可能会发现 ndb_size.pl 实用程序非常有用,该实用程序连接到当前(非集群)MySQL 数据库,并创建一个报告,说明该数据库如果使用 请牢记 每个 NDB 集群表必须有一个主键。 您可以使用 |
|
A.10.11. |
我可以使用哪些文件系统与 NDB 集群?关于网络文件系统或网络共享呢? |
一般来说,任何本机操作系统的文件系统都应该与 NDB 集群配合良好。如果您发现某个文件系统与 NDB 集群配合特别好(或不太好),我们邀请您在 NDB 集群论坛 中讨论您的发现。 对于 Windows,我们建议使用 NDB 集群作为一个共享无thing 解决方案实现;其背后的想法是,单个硬件的故障不应该导致多个集群节点的故障,或者可能导致整个集群的故障。因此,我们不支持使用网络共享或网络文件系统与 NDB 集群。这也适用于共享存储设备,如 SAN。 |
|
A.10.12. |
我可以在虚拟机(如 VMWare、VirtualBox、Parallels 或 Xen 创建的虚拟机)中运行 NDB 集群节点吗? |
NDB 集群支持在虚拟机中使用。我们当前支持和测试使用 Oracle VM。 一些 NDB 集群用户已经成功地使用其他虚拟化产品部署 NDB 集群;在这种情况下,Oracle 可以提供 NDB 集群支持,但虚拟环境中的问题必须转交给该产品的供应商。 |
|
A.10.13. |
我正在尝试填充 NDB 集群数据库。加载过程提前终止,我收到了类似以下的错误消息:
这是为什么? |
很可能是因为您的设置没有为所有表数据和所有索引提供足够的 RAM,包括由 还值得注意的是,所有数据节点都应该具有相同的 RAM,因为集群中的任何数据节点都不能使用超过最少可用 RAM 的内存。例如,如果有四台计算机托管集群数据节点,其中三台计算机有 3GB 的 RAM 可用于存储集群数据,而剩下的数据节点只有 1GB 的 RAM,那么每个数据节点最多只能将 1GB 用于 NDB 集群数据和索引。 在某些情况下,即使 ndb_mgm -e "ALL REPORT MEMORYUSAGE" 显示有足够的可用 出于类似的原因,您也可能会在数据节点重启时遇到问题,特别是在节点上加载了大量数据的情况下。 |
|
A.10.14. |
NDB 集群使用 TCP/IP。这是否意味着我可以在 Internet 上运行它,具有一个或多个远程位置的节点? |
在这种条件下,集群的性能非常不确定,因为 NDB 集群是设计和实现的,假设它将在具有高速连接性的 LAN 设置中运行,例如使用 100 Mbps 或千兆以太网 - 最好是后者。我们既不测试也不保证其在任何速度较慢的网络中的性能。 此外,非常重要的是要记住,集群节点之间的通信既不加密也不受任何保护机制的保护。集群的最安全配置是在防火墙后的私有网络中,没有直接从外部访问集群数据或管理节点的权限。(对于 SQL 节点,您应该采取与其他 MySQL 服务器实例相同的预防措施。)有关更多信息,请参阅 第 25.6.21 节,“NDB 集群安全问题”。 |
|
A.10.15. |
我是否需要学习新的编程或查询语言来使用 NDB 集群? |
不。尽管有一些专门的命令用于管理和配置集群本身,但只需要标准的(My)SQL 语句来执行以下操作:
一些专门的配置参数和文件是用于设置 NDB 集群的 - 请参阅 第 25.4.3 节,“NDB 集群配置文件”,以获取有关这些的信息。 一些简单的命令用于 NDB 集群管理客户端(ndb_mgm)以执行任务,例如启动和停止集群节点。请参阅 第 25.6.1 节,“NDB 集群管理客户端命令”。 |
|
A.10.16. |
NDB 集群支持哪些编程语言和 API? |
NDB 集群支持标准 MySQL 服务器的相同编程 API 和语言,包括 ODBC、.Net、MySQL C API 以及流行脚本语言的驱动程序,例如 PHP、Perl 和 Python。使用这些 API 编写的 NDB 集群应用程序的行为与其他 MySQL 应用程序相似;它们将 SQL 语句传输到 MySQL 服务器(在 NDB 集群的情况下,是 SQL 节点),并接收包含数据行的响应。有关这些 API 的更多信息,请参阅 第 31 章,《连接器和 API》。 NDB 集群还支持使用 NDB API 进行应用程序编程,该 API 提供了一个低级 C++ 接口,用于访问 NDB 集群数据,而不需要通过 MySQL 服务器。请参阅 NDB API。此外,许多 NDB 集群还支持使用 ClusterJ 进行 Java 应用程序编程,该 API 支持使用会话和事务的域对象模型。请参阅 Java 和 NDB 集群,以获取更多信息。 NDB 集群 8.0 也包括支持 NoSQL 应用程序的适配器,使用 Node.js 编写,NDB 集群作为数据存储。请参阅 MySQL NoSQL Connector for JavaScript,以获取更多信息。 |
|
A.10.17. |
NDB 集群是否包括任何管理工具? |
NDB 集群包括一个命令行客户端,用于执行基本管理功能。请参阅 第 25.5.5 节,“ndb_mgm — NDB 集群管理客户端”,和 第 25.6.1 节,“NDB 集群管理客户端中的命令”。 NDB 集群还支持 MySQL 集群管理器,一个单独的产品,提供了一个高级命令行界面,可以自动执行许多 NDB 集群管理任务,例如滚动重新启动和配置更改。有关 MySQL 集群管理器的更多信息,请参阅 MySQL 集群管理器 8.4.0 用户手册。 |
|
A.10.18. |
如何在使用 NDB 集群时查找错误或警告消息的含义? |
有两种方法可以实现这一点:
|
|
A.10.19. |
NDB 集群是否支持事务?支持哪些隔离级别? |
是。对于使用 |
|
A.10.20. |
NDB 集群支持哪些存储引擎? |
NDB 集群需要 可以在 MySQL 服务器上使用其他存储引擎(例如 NDB 集群与 |
|
A.10.21. |
如果发生灾难性故障—例如,整个城市断电 并且 我的 UPS 故障—我会失去所有数据吗? |
所有已提交的事务都被记录。因此,虽然灾难可能会导致一些数据丢失,但这应该是非常有限的。数据丢失可以通过最小化每个事务中的操作数量来减少。(在任何情况下都不应该执行大量操作的事务。) |
|
A.10.22. |
是否可以使用 |
|
|
A.10.23. |
是否可以在单个计算机上运行多个节点? |
这可能但不总是明智的。其中一个主要原因是运行集群是为了提供冗余性。要获得这种冗余性的全部益处,每个节点应该驻留在单独的机器上。如果您在单个机器上放置多个节点,而该机器失败,您将失去所有这些节点。因此,如果您在单个机器上运行多个数据节点,那么非常重要的是它们被设置为这样,即该机器的失败不会导致给定节点组中的所有数据节点的丢失。 鉴于NDB Cluster可以在低成本(或无成本)的操作系统上运行在普通硬件上,额外机器或两台机器的费用是值得的,以保护关键任务数据。此外,运行管理节点的主机的要求也很小。这项任务可以使用300 MHz Pentium或等效CPU和操作系统所需的RAM,以及ndb_mgmd和ndb_mgm进程的一些开销。 在具有多个CPU、核心或两者的主机上运行多个集群数据节点是可以接受的。NDB Cluster发行版还提供了一个多线程版本的数据节点二进制文件,旨在用于这些系统。有关更多信息,请参阅第 25.5.3 节,“ndbmtd — NDB 集群数据节点守护进程(多线程)”。 在某些情况下,也可以在同一台机器上同时运行数据节点和SQL节点;这种安排的性能取决于多个因素,如核心数、CPU数、磁盘和内存可用性等,您必须在规划这种配置时考虑这些因素。 |
|
A.10.24. |
可以在不关闭集群的情况下添加数据节点到 NDB 集群吗? |
可以在不关闭集群的情况下添加新数据节点到 NDB 集群。有关更多信息,请参阅第 25.6.7 节,“在线添加 NDB 集群数据节点”。 对于其他类型的 NDB 集群节点,只需要滚动重新启动(参阅第 25.6.5 节,“执行 NDB 集群滚动重新启动”)。 |
|
A.10.25. |
使用 NDB 集群时需要注意哪些限制? |
使用 NDB 集群时的限制包括:
对于 NDB 集群的完整限制列表,请参阅 第 25.2.7 节,“NDB 集群已知限制”。另请参阅 第 25.2.7.11 节,“NDB 集群 8.4 中解决的以前问题”。 |
|
A.10.26. |
NDB 集群是否支持外键? |
NDB 集群提供了与 |
|
A.10.27. |
如何将现有的 MySQL 数据库导入 NDB 集群? |
您可以像使用任何其他 MySQL 版本一样将数据库导入 NDB 集群。除了本 FAQ 中提到的其他限制外,唯一的特殊要求是要将要包含在集群中的表使用 您也可以使用一个或多个 |
|
A.10.28. |
NDB 集群节点如何相互通信? |
集群节点可以通过三种不同的传输机制进行通信:TCP/IP、SHM(共享内存)和 SCI(Scalable Coherent Interface)。在同一集群主机上,默认情况下使用 SHM;但是,这被认为是实验性的。SCI 是一种高速(每秒 1 吉字节以上)、高可用性协议,用于构建可扩展的多处理器系统;它需要特殊的硬件和驱动程序。请参阅 第 25.4.4 节,“使用 NDB 集群的高速互连”,以获取关于使用 SCI 作为 NDB 集群传输机制的更多信息。 |
|
A.10.29. |
什么是仲裁器? |
如果集群中的一个或多个数据节点失败,可能会出现这种情况:不是所有的数据节点都可以“看到”彼此。实际上,可能会出现两个数据节点集群被隔离的情况,也称为“脑裂”场景。在这种情况下,仲裁器用于决定哪个数据节点集群是正确的。 当至少一个节点组中的所有数据节点都活跃时,不会出现网络分区问题,因为没有单个子集可以单独形成一个功能完整的集群。真正的问题出现在没有单个节点组拥有所有活跃节点的情况下,这时网络分区(“脑裂”场景)就可能发生。在这种情况下,需要仲裁器。所有集群节点都认识同一个节点作为仲裁器,通常是管理服务器;但是,也可以配置集群中的任何 MySQL 服务器来充当仲裁器。仲裁器接受第一个联系它的集群节点集,并告诉剩余的集群节点关闭。仲裁器的选择由 MySQL 服务器和管理服务器节点的 仲裁器的角色本身并不对主机施加太高的要求,因此仲裁器主机不需要特别快或具有额外的内存。 |
|
A.10.30. |
NDB 集群支持哪些数据类型? |
NDB 集群支持所有通常的 MySQL 数据类型,包括与 MySQL 的空间扩展相关的数据类型;然而,
注意
NDB 集群磁盘数据表(即使用 见 第 25.2.7 节,“NDB 集群的已知限制”,以获取更多关于这些问题的信息。 |
|
A.10.31. |
如何启动和停止 NDB 集群? |
需要分别启动集群中的每个节点,按照以下顺序:
每个命令都必须从系统 shell 中的相应机器上运行。(您不需要亲自在机器上出现—远程登录 shell 可以用于此目的。)您可以通过启动 要关闭正在运行的集群,请在管理客户端中发出
(在这个示例中,引号是可选的,因为命令字符串中没有空格;此外,管理客户端命令,如 无论哪个命令都将导致ndb_mgm、ndb_mgm和任何ndbd进程以优雅的方式终止。 MySQL 服务器作为 SQL 节点可以使用mysqladmin shutdown停止。 有关更多信息,请参阅第 25.6.1 节,“NDB 集群管理客户端中的命令”和第 25.3.6 节,“NDB 集群的安全关闭和重启”。 MySQL 集群管理器提供了其他方式来处理 NDB 集群节点的启动和停止。请参阅MySQL 集群管理器 8.4.0 用户手册,以获取有关该工具的更多信息。 |
|
A.10.32. |
当集群关闭时,NDB 集群数据会发生什么变化? |
集群的数据节点在内存中的数据将被写入磁盘,并在下一次启动集群时重新加载到内存中。 |
|
A.10.33. |
对于 NDB 集群,拥有多个管理节点是一个好主意吗? |
这可以作为一个故障安全措施。只有一个管理节点可以控制集群,但可以配置一个主要管理节点,并且可以配置一个或多个辅助管理节点,以便在主要管理节点失败时接管。 请参阅第 25.4.3 节,“NDB 集群配置文件”,以获取有关配置 NDB 集群管理节点的信息。 |
|
A.10.34. |
可以在一个 NDB 集群中混合使用不同的硬件和操作系统吗? |
可以,只要所有机器和操作系统具有相同的“endianness”(所有大端或所有小端)。 也可以在不同的 NDB 集群版本上使用软件。但是,我们仅支持在滚动升级过程中使用这种方法(请参阅第 25.6.5 节,“NDB 集群的滚动重启”)。 |
|
A.10.35. |
可以在单个主机上运行两个数据节点?两个 SQL 节点? |
可以。在数据节点的情况下,建议(但不是必需的)每个节点使用不同的数据目录。如果您想在一台机器上运行多个 SQL 节点,每个实例的mysqld必须使用不同的 TCP/IP 端口。 |
|
A.10.36. |
可以使用主机名与 NDB 集群? |
可以使用 DNS 和 DHCP 来管理集群主机。但是,如果您的应用程序需要“五个九”可用性,您应该使用固定(数字)IP 地址,因为使用 DNS 和 DHCP 服务会引入额外的潜在故障点。 |
|
A.10.37. |
NDB 集群是否支持 IPv6? |
IPv6 支持 SQL 节点(MySQL 服务器)之间的连接,但所有其他类型的 NDB 集群节点之间的连接必须使用 IPv4。 实际上,这意味着您可以使用 IPv6 进行 NDB 集群之间的复制,但同一个 NDB 集群中的节点之间的连接必须使用 IPv4。有关更多信息,请参阅第 25.7.3 节,“NDB 集群复制中的已知问题”。 |
|
A.10.38. |
在具有多个 MySQL 服务器的 NDB 集群中如何处理 MySQL 用户? |
MySQL 用户账户和权限通常不会在访问同一个 NDB 集群的不同 MySQL 服务器之间自动传播。MySQL NDB 集群提供了使用 |
|
A.10.39. |
如果一个 SQL 节点失败,我如何继续发送查询? |
MySQL NDB 集群不提供 SQL 节点之间的自动故障转移。你的应用程序必须准备好处理 SQL 节点的损失,并在它们之间进行故障转移。 |
|
A.10.40. |
如何备份和恢复 NDB 集群? |
你可以使用 NDB 集群本机备份和恢复功能,在 NDB 管理客户端和 ndb_restore 程序中。请参阅 第 25.6.8 节,“NDB 集群的在线备份”,和 第 25.5.23 节,“ndb_restore — Restore an NDB Cluster Backup”。 你也可以使用 mysqldump 和 MySQL 服务器提供的传统备份功能。请参阅 第 6.5.4 节,“mysqldump — A Database Backup Program”,以获取更多信息。 |
|
A.10.41. |
什么是 “天使进程”? |
这个进程监视并尝试重新启动数据节点进程。如果你在启动 ndbd 后检查系统上的活动进程列表,你可以看到实际上有两个进程在运行,正如这里所示(我们省略了 ndb_mgmd 和 ndbd 的输出,以便简洁):
显示 |