NDB群集
A.10.1。 | 哪些版本的MySQL软件支持NDB群集?我必须从源代码编译吗? |
标准MySQL Server 8.0版本不支持NDB Cluster。相反,MySQL NDB Cluster作为单独的产品提供。可用的NDB Cluster版本系列包括以下内容:
您可以从源代码获取和编译NDB集群(请参见“在Linux上从源代码构建NDB集群”和“在Windows上从源代码编译和安装NDB集群”),但对于对于大多数特殊情况,我们建议使用Oracle提供的以下安装程序之一,该安装程序适合您的操作平台和环境:
也可以从平台的软件包管理系统中获得安装软件包。 你能确定你的MySQL服务器是否有 | |
A.10.2。 | 什么是“ NDB ”和“ NDBCLUSTER ”是什么意思? |
“ NDB ”代表“Ñ etwork d ATA b ASE ”。 | |
A.10.3。 | 使用NDB群集与使用MySQL复制有什么区别? |
在传统的MySQL复制中,一台主MySQL服务器会更新一个或多个从服务器。事务是按顺序提交的,而缓慢的事务可能导致从机落后于主机。这意味着如果主服务器发生故障,则从服务器可能没有记录最后的几个事务。如果是交易安全引擎,例如 简而言之,虽然标准MySQL复制是异步的,但NDB Cluster是同步的。 NDB群集中也可以使用异步复制。 NDB群集复制(有时也称为“地理复制”)包括在两个NDB群集之间以及从NDB群集复制到非群集MySQL服务器的功能。请参见“ NDB群集复制”。 | |
A.10.4。 | 我是否需要任何特殊的网络来运行NDB群集?群集中的计算机如何通信? |
NDB群集旨在用于高带宽环境中,并且计算机使用TCP / IP连接。它的性能直接取决于群集计算机之间的连接速度。NDB群集的最低连接要求包括一个典型的100兆以太网或等效的以太网。我们建议您尽可能使用千兆位以太网。 | |
A.10.5。 | 我需要多少台计算机才能运行NDB群集,为什么? |
要运行一个可行的群集,至少需要三台计算机。但是,建议的NDB群集中的计算机的最小数量为四:一台用于运行管理和SQL节点的计算机,以及两台用作数据节点的计算机。这两个数据节点的目的是提供冗余。如果数据节点之一发生故障,管理节点必须在单独的计算机上运行以保证持续的仲裁服务。 为了提供更高的吞吐量和高可用性,您应该使用多个SQL节点(连接到群集的MySQL服务器)。也可以(尽管不是绝对必要)运行多个管理服务器。 | |
A.10.6。 | NDB群集中的不同计算机做什么? |
NDB群集具有物理和逻辑组织,计算机是物理元素。群集的逻辑或功能元素称为节点,而包含群集节点的计算机有时称为群集主机。共有三种类型的节点,每种类型对应于集群中的特定角色。这些是:
| |
A.10.7。 |
id=2 @10.100.10.32 (Version: 8.0.20-ndb-8.0.20 Nodegroup: 0, *) 什么 |
最简单的答案是:“这不是您可以控制的,在任何情况下都无需担心,除非您是编写或分析NDB Cluster源代码的软件工程师”。 如果您找不到满意的答案,请使用更长,技术含量更高的版本: NDB群集中的许多机制要求在数据节点之间进行分布式协调。这些分布式算法和协议包括全局检查点,DDL(模式)更改和节点重新启动处理。为了简化这种协调,数据节点“选”其中一个作为领导者。(该节点曾经被称为“主节点”,但是为了避免与MySQL复制中的主服务器混淆,删除了该术语。)没有影响该选择的面向用户的机制,这是完全自动的。这是事实自动是NDB Cluster内部体系结构的关键部分。 当一个节点充当这些机制中的任何一种的“领导者”时,通常是活动的协调点,而其他节点则充当“跟随者”,按照领导者的指示执行其活动的一部分。如果充当领导者的节点发生故障,则其余节点将选举新的领导者。由旧领导者协调的正在进行的任务可能会失败,也可能由新领导者继续执行,具体取决于所涉及的实际机制。 这些不同的机制和协议中的某些可能具有不同的领导者节点,但通常为所有它们选择相同的领导者。节点表示为在输出端的领导者 NDB群集的设计方式是,领导者的选择在群集本身之外没有明显的影响。例如,当前的领导者没有比其他数据节点高得多的CPU或资源使用率,并且领导者的故障对集群的影响不应与任何其他数据节点的故障有显着不同。 | |
A.10.8。 | 我可以在哪些操作系统上使用NDB群集? |
大多数类似Unix的操作系统都支持NDB Cluster。Microsoft Windows操作系统的生产设置也支持NDB Cluster。 有关在各种操作系统版本,操作系统发行版和硬件平台上为NDB Cluster提供的支持级别的更多详细信息,请参考 https://www.mysql.com/support/supportedplatforms/cluster.html。 | |
A.10.9。 | 运行NDB群集的硬件要求是什么? |
NDB群集应该在 | |
A.10.10。 | 使用NDB群集需要多少内存?可以完全使用磁盘存储器吗? |
NDB Cluster最初仅以内存形式实现,但是当前可用的所有版本还提供了将NDB Cluster存储在磁盘上的功能。有关更多信息,请参见“ NDB群集磁盘数据表”。 对于内存中的 (SizeofDatabase × NumberOfReplicas × 1.1 ) / NumberOfDataNodes 要更精确地计算内存需求,需要为集群数据库中的每个表确定每行所需的存储空间(有关详细信息,请参见“数据类型存储需求”),然后将其乘以行数。您还必须记住要考虑所有列索引,如下所示:
创建具有 在计算群集内存需求时,您可能会发现有用的ndb_size.pl实用程序在最新的MySQL 8.0版本中可用。该Perl脚本连接到当前(非集群)MySQL数据库,并创建有关如果使用 请记住,每个NDB群集表都必须具有主键,这一点尤其重要。的 您可以使用ndb_mgm客户端中的 | |
A.10.11。 | NDB群集可以使用哪些文件系统?网络文件系统或网络共享呢? |
通常,主机操作系统本地的任何文件系统都应与NDB群集配合使用。如果您发现给定的文件系统在NDB Cluster上运行特别好(或不太理想),我们邀请您在NDB Cluster论坛上讨论您的发现。 对于Windows,我们建议您 NDB群集实现为无共享解决方案;其背后的想法是,单个硬件的故障不应导致多个群集节点的故障,甚至可能不会导致整个群集的故障。因此,NDB群集不支持使用网络共享或网络文件系统。这也适用于共享存储设备,例如SAN。 | |
A.10.12。 | 我可以在虚拟机(例如由VMWare,VirtualBox,Parallels或Xen创建的虚拟机)中运行NDB Cluster节点吗? |
支持在虚拟机中使用NDB Cluster。当前,我们使用Oracle VM支持和测试。 一些NDB Cluster用户已经使用其他虚拟化产品成功部署了NDB Cluster。在这种情况下,Oracle可以提供NDB群集支持,但是特定于虚拟环境的问题必须交给该产品的供应商。 | |
A.10.13。 | 我正在尝试填充NDB群集数据库。加载过程过早终止,我收到一条错误消息,如下所示:
为什么会这样呢? |
原因很可能是您的设置没有为所有表数据和所有索引(包括 还值得注意的是,所有数据节点都应具有相同数量的RAM,因为群集中没有数据节点可以使用的内存多于任何单个数据节点可用的最少内存。例如,如果有四台计算机承载群集数据节点,并且其中三台计算机具有3GB的RAM可用于存储群集数据,而其余数据节点只有1GB RAM,则每个数据节点最多可以将1GB的内存用于NDB群集数据,并且索引。 在某些情况下,即使ndb_mgm -e“ ALL REPORT MEMORYUSAGE”显示为free,也有可能在MySQL客户端应用程序中获得Table is full错误。您可以通过使用选项强制为NDB群集表创建额外的分区,从而为哈希索引提供更多的内存。通常,将表中希望存储的行数设置为两倍就足够了。 由于类似的原因,有时在数据负载很重的节点上,数据节点重新启动也会遇到问题。该 | |
A.10.14。 | NDB群集使用TCP / IP。这是否意味着我可以在Internet上运行它,并且一个或多个节点位于远程位置? |
这是非常不可能的集群将这样的条件下可靠地执行,因为NDB簇的设计和与假定它将条件保证专用的高速连接,例如,在一个LAN设置发现下使用100 Mbps或千兆运行实现以太网-最好是后者。我们既不测试也不保证使用比这更慢的性能。 另外,请记住NDB群集中节点之间的通信不安全,这一点也非常重要。它们既未加密也未受到任何其他保护机制的保护。群集的最安全配置是在防火墙后面的专用网络中,无法从外部直接访问任何群集数据或管理节点。(对于SQL节点,应采取与其他任何MySQL服务器实例相同的预防措施。)有关更多信息,请参见“ NDB群集安全性问题”。 | |
A.10.15。 | 我是否必须学习新的编程或查询语言才能使用NDB群集? |
没有。尽管使用了一些专用命令来管理和配置群集本身,但是以下操作仅需要标准(My)SQL语句:
设置NDB群集需要一些专用的配置参数和文件-有关这些信息,请参见“ NDB群集配置文件”。 NDB群集管理客户端(ndb_mgm)中使用了一些简单的命令来执行诸如启动和停止群集节点之类的任务。请参见“ NDB群集管理客户端中的命令”。 | |
A.10.16。 | NDB群集支持哪些编程语言和API? |
NDB Cluster支持与标准MySQL Server相同的编程API和语言,包括ODBC,.Net,MySQL C API以及众多用于流行脚本语言(例如PHP,Perl和Python)的驱动程序。使用这些API编写的NDB Cluster应用程序的行为类似于其他MySQL应用程序。它们将SQL语句传输到MySQL服务器(对于NDB群集,是SQL节点),并接收包含数据行的响应。有关这些API的更多信息,请参见连接器和API。 NDB Cluster还支持使用NDB API进行应用程序编程,该API为NDB Cluster数据提供了低级C ++接口,而无需通过MySQL Server。请参阅 NDB API。此外, NDB Cluster还支持使用ClusterJ的Java应用程序编程,该程序支持使用会话和事务处理数据的域对象模型。有关更多信息,请参见 Java和NDB Cluster。 此外,NDB Cluster提供了对的支持 NDB Cluster还包括适配器,该适配器支持针对编写的NoSQL应用程序 | |
A.10.17。 | NDB群集是否包括任何管理工具? |
NDB Cluster包括用于执行基本管理功能的命令行客户端。请参见“ndb_mgm-NDB群集管理客户端”和“ NDB群集管理客户端中的命令”。 NDB Cluster 7.6和更早版本也受MySQL Cluster Manager支持,MySQL Cluster Manager是一个单独的产品,提供了高级命令行界面,可以自动执行许多NDB Cluster管理任务,例如滚动重启和配置更改。从版本1.4.8开始,MySQL Cluster Manager还提供了对NDB Cluster 8.0的实验性支持。有关MySQL Cluster Manager的更多信息,请参见 MySQL™Cluster Manager 1.4.8用户手册。 NDB Cluster还提供基于图形化浏览器的自动安装程序,用于设置和部署NDB Cluster,这是NDB Cluster软件分发的一部分。有关更多信息,请参见NDB群集自动安装程序(NDB 7.5)。 | |
A.10.18。 | 使用NDB群集时,如何找出错误或警告消息的含义? |
有两种方法可以完成此操作:
| |
A.10.19。 | NDB Cluster交易安全吗?支持哪些隔离级别? |
是的。对于使用 | |
A.10.20。 | NDB群集支持哪些存储引擎? |
NDB群集需要 可以在与NDB Cluster一起使用的MySQL服务器上使用其他存储引擎(例如 NDB群集 | |
A.10.21。 | 如果发生灾难性故障(例如,整个城市断电而 UPS发生故障),我会丢失所有数据吗? |
将记录所有已提交的事务。因此,尽管在发生灾难时可能会丢失某些数据,但这应该是相当有限的。通过最小化每个事务的操作数量,可以进一步减少数据丢失。(在任何情况下,每个事务执行大量操作都是一个好主意。) | |
A.10.22。 |
|
| |
A.10.23。 | 我可以在一台计算机上运行多个节点吗? |
可能但并非总是明智的。运行集群的主要原因之一是提供冗余。为了获得此冗余的全部好处,每个节点应驻留在单独的计算机上。如果在单个计算机上放置多个节点而该计算机发生故障,则所有这些节点都将丢失。因此,如果您确实要在一台计算机上运行多个数据节点,则以这样的方式进行设置非常重要:该计算机的故障不会导致给定节点组中所有数据节点的丢失。 鉴于NDB群集可以在装有低成本(甚至无成本)操作系统的商用硬件上运行,因此额外花费一两台机器来保护关键任务数据是非常值得的。还值得注意的是,运行管理节点的群集主机的要求最低。可以使用300 MHz奔腾或同等CPU和足够的RAM用于操作系统来完成此任务,再加上少量的ndb_mgmd和ndb_mgm进程开销。 可以在具有多个CPU,内核或两者的单个主机上运行多个群集数据节点。NDB群集发行版还提供了打算在此类系统上使用的数据节点二进制文件的多线程版本。有关更多信息,请参见第22.4.3节“ndbmtd-NDB群集数据节点守护程序(多线程)”。 在某些情况下,还可以在同一台计算机上同时运行数据节点和SQL节点。这种安排的执行情况取决于许多因素,例如核心和CPU的数量以及数据节点和SQL节点进程可用的磁盘和内存量,并且在计划此类安排时必须考虑这些因素。配置。 | |
A.10.24。 | 是否可以在不重新启动NDB群集的情况下将数据节点添加到NDB群集? |
可以在不使群集脱机的情况下将新的数据节点添加到正在运行的NDB群集。有关更多信息,请参见“在线添加NDB群集数据节点”。 对于其他类型的NDB群集节点,只需进行滚动重启(请参见“执行NDB群集的滚动重启”)。 | |
A.10.25。 | 使用NDB群集时,我应该注意哪些限制? |
有关NDB群集中限制的完整列表,请参见“ NDB群集的已知限制”。另请参见“ NDB Cluster 8.0中解决的先前的NDB Cluster问题”。 | |
A.10.26。 | NDB群集是否支持外键? |
NDB Cluster提供了对外键约束的支持,该约束与 | |
A.10.27。 | 如何将现有的MySQL数据库导入NDB群集? |
您可以像将任何其他版本的MySQL导入数据库一样,将数据库导入NDB Cluster。除了本常见问题中其他地方提到的限制外,唯一的其他特殊要求是群集中要包含的任何表都必须使用 也可以将使用其他存储引擎的现有表转换为 | |
A.10.28。 | NDB群集节点如何相互通信? |
群集节点可以通过三种不同的传输机制中的任何一种进行通信:TCP / IP,SHM(共享内存)和SCI(可伸缩一致接口)。如果可用,默认情况下,位于同一群集主机上的节点之间将使用SHM。但是,这被认为是实验性的。SCI是用于构建可扩展的多处理器系统的高速(每秒1 GB或更高)的高可用性协议。它需要特殊的硬件和驱动程序。有关将SCI用作NDB群集的传输机制的更多信息,请参见“使用NDB群集的高速互连”。 | |
A.10.29。 | 什么是仲裁员? |
如果群集中的一个或多个数据节点发生故障,则可能不是所有的群集数据节点都可以彼此“看到”。实际上,在网络分区(也称为“裂脑”)中,两组数据节点可能会彼此隔离。这种情况是不希望的,因为每组数据节点都试图表现得好像整个集群一样。要求仲裁员在竞争的数据节点集之间做出决定。 当至少一个节点组中的所有数据节点都处于活动状态时,网络分区就不成问题了,因为群集的任何子集都无法自行形成功能性群集。当没有单个节点组的所有节点都处于活动状态时,就会出现真正的问题,在这种情况下,将进行网络分区(“裂脑”场景)成为可能。然后需要一名仲裁员。所有群集节点都将同一节点识别为仲裁器,通常是管理服务器。但是,可以将群集中的任何MySQL服务器配置为充当仲裁程序。仲裁程序接受第一组群集节点进行联系,并告诉其余组关闭。仲裁程序的选择由 仲裁者的角色本身并不会对如此指定的主机施加任何苛刻的要求,因此,仲裁者主机不需要特别快或为此目的而具有额外的存储空间。 | |
A.10.30。 | NDB群集支持哪些数据类型? |
NDB Cluster支持所有常用的MySQL数据类型,包括与MySQL空间扩展相关的数据类型。但是, 注意 有关这些问题的更多信息,请参见“ NDB群集的已知限制”。 | |
A.10.31。 | 如何启动和停止NDB群集? |
必须按以下顺序分别启动集群中的每个节点:
这些命令中的每个命令都必须从装有受影响节点的计算机上的系统外壳运行。(您不必在计算机上物理地存在-可以使用远程登录外壳。)您可以通过在管理节点所在的计算机上启动 要关闭正在运行的集群,请 shell> (此示例中的引号是可选的,因为该 这些命令中的任何一个都会导致ndb_mgm,ndb_mgm和任何ndbd进程正常终止。可以使用mysqladmin shutdown停止作为SQL节点运行的MySQL服务器。 有关更多信息,请参见“ NDB群集管理客户端中的命令”和“安全关闭和重新启动NDB群集”。 MySQL Cluster Manager和NDB Cluster Auto-Installer提供了其他方法来处理NDB Cluster节点的启动和停止。有关这些工具的更多信息,请参见《 MySQL™Cluster Manager 1.4.8用户手册》和“ NDB Cluster自动安装程序”。 | |
A.10.32。 | 关闭NDB群集后,NDB群集数据会怎样? |
群集的数据节点保留在内存中的数据将写入磁盘,并在下次启动群集时重新加载到内存中。 | |
A.10.33。 | 为NDB群集拥有多个管理节点是一个好主意吗? |
它可以作为故障保护很有用。在任何给定时间,只有一个管理节点控制群集,但是可以将一个管理节点配置为主节点,并且在主管理节点发生故障的情况下可以将一个或多个其他管理节点配置为接管。 有关如何配置NDB群集管理节点的信息,请参见“ NDB群集配置文件”。 | |
A.10.34。 | 我可以在一个NDB群集中混合使用不同种类的硬件和操作系统吗? |
是的,只要所有机器和操作系统都具有相同的“字节序”(所有大字节序或所有小字节序)。 也可以在不同节点上使用来自不同NDB Cluster版本的软件。但是,我们仅在滚动升级过程中支持这种使用(请参见“执行NDB群集的滚动重启”)。 | |
A.10.35。 | 我可以在单个主机上运行两个数据节点吗?两个SQL节点? |
是的,可以这样做。对于多个数据节点,建议(但不是必需)让每个节点使用不同的数据目录。如果要在一台计算机上运行多个SQL节点,则mysqld的每个实例必须使用不同的TCP / IP端口。 可以在同一主机上同时运行数据节点和SQL节点,但是您应该知道ndbd或ndbmtd进程可能会与mysqld争夺内存。 | |
A.10.36。 | 我可以在NDB群集中使用主机名吗? |
是的,可以将DNS和DHCP用于群集主机。但是,如果您的应用程序要求“五个九”的可用性,则应使用固定的(数字)IP地址,因为使群集主机之间的通信依赖于DNS和DHCP等服务会带来其他潜在的故障点。 | |
A.10.37。 | NDB群集是否支持IPv6? |
SQL节点(MySQL服务器)之间的连接支持IPv6,但是所有其他类型的NDB群集节点之间的连接必须使用IPv4。 实际上,这意味着您可以使用IPv6在NDB群集之间进行复制,但是同一NDB群集中的节点之间的连接必须使用IPv4。有关更多信息,请参见“ NDB群集复制中的已知问题”。 | |
A.10.38。 | 如何在具有多个MySQL服务器的NDB群集中处理MySQL用户? |
通常,在访问同一NDB群集的不同MySQL服务器之间不会自动传播MySQL用户帐户和特权。MySQL NDB Cluster使用 | |
A.10.39。 | 如果其中一个SQL节点发生故障,如何继续发送查询? |
MySQL NDB Cluster在SQL节点之间不提供任何类型的自动故障转移。您的应用程序必须准备好处理SQL节点的丢失并在它们之间进行故障转移。 | |
A.10.40。 | 如何备份和还原NDB群集? |
您可以在NDB管理客户端和ndb_restore程序中使用NDB Cluster本机备份和还原功能。请参见“ NDB群集的在线备份”和“ndb_restore-还原NDB群集备份”。 您也可以在mysqldump和MySQL服务器中使用为此目的提供的传统功能。有关更多信息,请参见“mysqldump-数据库备份程序”。 | |
A.10.41。 | 什么是“天使进程”? |
此过程监视并在必要时尝试重新启动数据节点过程。如果在启动ndbd之后检查系统上活动进程的列表,则可以看到实际上有2个以该名称运行的进程,如下所示(为简便起见,我们省略了ndb_mgmd和ndbd的输出): shell> 显示内存和CPU使用率的ndbd进程 |