• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • NDB群集

    A.10.1。

    哪些版本的MySQL软件支持NDB群集?我必须从源代码编译吗?

    标准MySQL Server 8.0版本不支持NDB Cluster。相反,MySQL NDB Cluster作为单独的产品提供。可用的NDB Cluster版本系列包括以下内容:

    • NDB集群7.2。新部署或维护不再支持该系列。NDB Cluster 7.2的用户应尽快升级到较新的发行系列。我们建议新的部署使用最新的NDB Cluster 8.0版本。
    • NDB集群7.3。尽管我们建议新部署使用最新的NDB Cluster 8.0版本,但该系列是NDB Cluster的以前的一般可用性(GA)版本,仍可供生产使用。可以从https://dev.mysql.com/downloads/cluster/获得最新的NDB Cluster 7.3版本。
    • NDB群集7.4。尽管我们建议新部署使用最新的NDB Cluster 8.0版本,但该系列是NDB Cluster的以前的一般可用性(GA)版本,仍可供生产使用。可以从https://dev.mysql.com/downloads/cluster/获得最新的NDB Cluster 7.4版本。
    • NDB集群7.5。尽管我们建议新部署使用最新的NDB Cluster 7.6版本,但该系列是NDB Cluster的以前的一般可用性(GA)版本,仍可供生产使用。可以从https://dev.mysql.com/downloads/cluster/获得最新的NDB Cluster 7.5版本。
    • NDB群集7.6。尽管我们建议新部署使用最新的NDB Cluster 8.0版本,但该系列是NDB Cluster的以前的一般可用性(GA)版本,仍可供生产使用。可以从https://dev.mysql.com/downloads/cluster/获得最新的NDB Cluster 7.6版本。
    • NDB群集8.0。本系列是NDB Cluster的最新通用版本(GA)版本,基于NDB存储引擎的8.0版和MySQL Server 8.0。NDB Cluster 8.0可供生产使用;用于生产的新部署应使用本系列中的最新GA版本,即当前的NDB Cluster 8.0.20。您可以从https://dev.mysql.com/downloads/cluster/获取最新的NDB Cluster 8.0版本。有关本系列中的新功能和其他重要更改的信息,请参见“ NDB群集中的新增功能”。

    您可以从源代码获取和编译NDB集群(请参见“在Linux上从源代码构建NDB集群”和“在Windows上从源代码编译和安装NDB集群”),但对于对于大多数特殊情况,我们建议使用Oracle提供的以下安装程序之一,该安装程序适合您的操作平台和环境:

    • 基于Web的NDB群集自动安装程序(可在所支持的所有平台上运行NDB
    • Linux 二进制发行版(tar.gz文件)
    • Linux RPM软件包
    • Linux .deb文件
    • Windows 二进制文件“免安装”版本
    • Windows MSI安装程序

    也可以从平台的软件包管理系统中获得安装软件包。

    你能确定你的MySQL服务器是否有NDB使用说明的一个支持SHOW VARIABLES LIKE 'have_%'SHOW ENGINESSHOW PLUGINS

    A.10.2。

    什么是“ NDB ”和“ NDBCLUSTER ”是什么意思?

    “ NDB ”代表“Ñ etwork d ATA b ASE ”。NDBNDBCLUSTER都是存储引擎的名称,该存储引擎支持MySQL的群集支持。NDB是首选,但名称正确。

    A.10.3。

    使用NDB群集与使用MySQL复制有什么区别?

    在传统的MySQL复制中,一台主MySQL服务器会更新一个或多个从服务器。事务是按顺序提交的,而缓慢的事务可能导致从机落后于主机。这意味着如果主服务器发生故障,则从服务器可能没有记录最后的几个事务。如果是交易安全引擎,例如InnoDB在使用事务时,事务将在从属服务器上完成或根本不应用,但是复制不能保证主服务器和从属服务器上的所有数据始终保持一致。在NDB群集中,所有数据节点保持同步,并且任何一个数据节点提交的事务都将提交给所有数据节点。在数据节点发生故障的情况下,所有其余数据节点均保持一致状态。

    简而言之,虽然标准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群集具有物理和逻辑组织,计算机是物理元素。群集的逻辑或功能元素称为节点,而包含群集节点的计算机有时称为群集主机。共有三种类型的节点,每种类型对应于集群中的特定角色。这些是:

    • 管理节点。该节点为整个集群提供管理服务,包括其他节点的启动,关闭,备份和配置数据。管理节点服务器被实现为应用程序ndb_mgmd;用于控制NDB群集的管理客户端是ndb_mgm。有关这些程序的信息,请参见“ndb_mgmd-NDB群集管理服务器守护程序”和“ndb_mgm-NDB群集管理客户端”。
    • 数据节点。这种类型的节点存储和复制数据。数据节点功能由NDB数据节点进程ndbd的实例处理。有关更多信息,请参见“ndbd — NDB群集数据节点守护程序”。
    • SQL节点。这只是MySQL Server(mysqld)的一个实例,该实例是通过支持NDBCLUSTER存储引擎而构建的,并--ndb-cluster以启用该引擎的--ndb-connectstring选项和启用该引擎连接到NDB群集管理服务器的选项开始。有关这些选项的更多信息,请参见“ NDB群集的MySQL服务器选项”。

      注意

      一个API节点是任何应用程序,使得用于数据存储和检索直接利用Cluster数据节点。因此,可以将SQL节点视为一种API节点,它使用MySQL服务器向群集提供SQL接口。您可以使用NDB API编写此类应用程序(不依赖于MySQL Server),该API为NDB Cluster数据提供直接的,面向对象的事务和扫描接口。有关更多信息,请参见NDB群集API概述:NDB API。

    A.10.7。

    SHOW在NDB群集管理客户端中运行命令时,我看到一行输出,如下所示:

    id=2    @10.100.10.32  (Version: 8.0.20-ndb-8.0.20 Nodegroup: 0, *)
    

    什么*意思这个节点与其他节点有何不同?

    最简单的答案是:“这不是您可以控制的,在任何情况下都无需担心,除非您是编写或分析NDB Cluster源代码的软件工程师”。

    如果您找不到满意的答案,请使用更长,技术含量更高的版本:

    NDB群集中的许多机制要求在数据节点之间进行分布式协调。这些分布式算法和协议包括全局检查点,DDL(模式)更改和节点重新启动处理。为了简化这种协调,数据节点“选”其中一个作为领导者。(该节点曾经被称为“主节点”,但是为了避免与MySQL复制中的主服务器混淆,删除了该术语。)没有影响该选择的面向用户的机制,这是完全自动的。这事实自动是NDB Cluster内部体系结构的关键部分。

    当一个节点充当这些机制中的任何一种的“领导者”时,通常是活动的协调点,而其他节点则充当“跟随者”,按照领导者的指示执行其活动的一部分。如果充当领导者的节点发生故障,则其余节点将选举新的领导者。由旧领导者协调的正在进行的任务可能会失败,也可能由新领导者继续执行,具体取决于所涉及的实际机制。

    这些不同的机制和协议中的某些可能具有不同的领导者节点,但通常为所有它们选择相同的领导者。节点表示为在输出端的领导者SHOW在管理客户端在内部被称为DICT经理(见的DBDICT座,在NDB集群API开发人员指南,了解更多信息),负责协调DDL和元数据的活动。

    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群集应该在NDB启用了二进制文件的任何平台上运行。对于数据节点和API节点,更快的CPU和更多的内存可能会提高性能,而64位CPU可能比32位处理器更有效。用于数据节点的计算机上必须有足够的内存来保存每个节点在数据库中的份额(请参阅我需要多少RAM?了解更多信息)。对于仅用于运行NDB群集管理服务器的计算机,要求最低。通常,一台普通台式PC(或同等台式机)就足以完成此任务。节点可以通过标准的TCP / IP网络和硬件进行通信。他们还可以使用高速SCI协议。但是,使用SCI需要特殊的网络硬件和软件(请参见“在NDB群集中使用高速互连”)。

    A.10.10。

    使用NDB群集需要多少内存?可以完全使用磁盘存储器吗?

    NDB Cluster最初仅以内存形式实现,但是当前可用的所有版本还提供了将NDB Cluster存储在磁盘上的功能。有关更多信息,请参见“ NDB群集磁盘数据表”。

    对于内存中的NDB表,您可以使用以下公式来获得群集中每个数据节点需要多少RAM的粗略估计:

    (SizeofDatabase × NumberOfReplicas × 1.1 ) / NumberOfDataNodes
    

    要更精确地计算内存需求,需要为集群数据库中的每个表确定每行所需的存储空间(有关详细信息,请参见“数据类型存储需求”),然后将其乘以行数。您还必须记住要考虑所有列索引,如下所示:

    • NDBCLUSTER表创建的每个主键或哈希索引每个记录需要21-25个字节。这些索引使用IndexMemory
    • 每个有序索引都需要使用来存储每条记录10个字节DataMemory
    • 创建主键或唯一索引也会创建有序索引,除非使用创建索引USING HASH。换一种说法:

      • 群集表上的主键或唯一索引通常每条记录占用31到35个字节。
      • 但是,如果使用创建主键或唯一索引USING HASH,则每个记录仅需要21到25个字节。

    创建具有USING HASH所有主键和唯一索引的NDB群集表通常会导致表更新运行得更快-在某些情况下比USING HASH不创建主键和唯一键的表更新快20%到30%。这是由于以下事实:需要较少的内存(因为未创建有序索引),并且必须使用较少的CPU(因为必须读取并可能更新较少的索引)。但是,这也意味着必须通过其他方式来满足可以使用范围扫描的查询,这可能会导致选择速度变慢。

    在计算群集内存需求时,您可能会发现有用的ndb_size.pl实用程序在最新的MySQL 8.0版本中可用。该Perl脚本连接到当前(非集群)MySQL数据库,并创建有关如果使用NDBCLUSTER存储引擎该数据库将需要多少空间的报告。有关更多信息,请参见“ndb_size.pl— NDBCLUSTER大小要求估计器”。

    请记住,每个NDB群集表都必须具有主键,这一点尤其重要。的NDB存储引擎创建如果自动没有被定义的主密钥;创建此主键时不带USING HASH

    您可以使用ndb_mgm客户端中的REPORT MEMORYUSAGE命令确定在任何给定时间正在使用多少内存来存储NDB群集数据和索引。有关更多信息,请参见“ NDB Cluster Management Client中的命令”。另外,在使用80%的可用或(在NDB 7.6之前)警告,以及在使用率达到90%,99%和100%时,也会将警告写入群集日志。DataMemoryIndexMemory

    A.10.11。

    NDB群集可以使用哪些文件系统?网络文件系统或网络共享呢?

    通常,主机操作系统本地的任何文件系统都应与NDB群集配合使用。如果您发现给定的文件系统在NDB Cluster上运行特别好(或不太理想),我们邀请您在NDB Cluster论坛上讨论您的发现。

    对于Windows,我们建议您NTFS对NDB群集使用文件系统,就像对标准MySQL一样。我们不使用FATVFAT文件系统测试NDB群集。因此,我们不建议将它们与MySQL或NDB Cluster一起使用。

    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群集数据库。加载过程过早终止,我收到一条错误消息,如下所示:

    ERROR 1114: The table 'my_cluster_table' is full

    为什么会这样呢?

    原因很可能是您的设置没有为所有表数据和所有索引(包括NDB存储引擎所需的主键)提供足够的RAM,并且在表定义不包括主键定义的情况下自动创建的主键

    还值得注意的是,所有数据节点都应具有相同数量的RAM,因为群集中没有数据节点可以使用的内存多于任何单个数据节点可用的最少内存。例如,如果有四台计算机承载群集数据节点,并且其中三台计算机具有3GB的RAM可用于存储群集数据,而其余数据节点只有1GB RAM,则每个数据节点最多可以将1GB的内存用于NDB群集数据,并且索引。

    在某些情况下,即使ndb_mgm -e“ ALL REPORT MEMORYUSAGE”显示为free,也有可能在MySQL客户端应用程序中获得Table is full错误。您可以通过使用选项强制为NDB群集表创建额外的分区,从而为哈希索引提供更多的内存。通常,将表中希望存储的行数设置为两倍就足够了。DataMemoryNDBMAX_ROWSCREATE TABLEMAX_ROWS

    由于类似的原因,有时在数据负载很重的节点上,数据节点重新启动也会遇到问题。该MinFreePct参数可以通过保留DataMemory和(在NDB 7.6之前)保留一部分(默认为5%)和(在NDB 7.6之前)IndexMemory供重启使用。此保留的内存不可用于存储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。此外,NDBCLUSTERC语言的MGM API还公开了许多管理功能;有关更多信息,请参见 MGM API。

    NDB Cluster还支持使用ClusterJ的Java应用程序编程,该程序支持使用会话和事务处理数据的域对象模型。有关更多信息,请参见 Java和NDB Cluster。

    此外,NDB Cluster提供了对的支持memcached,允许开发人员使用该memcached接口访问NDB Cluster中存储的数据。有关更多信息,请参见 ndbmemcache-NDB群集的Memcache API。

    NDB Cluster还包括适配器,该适配器支持针对编写的NoSQL应用程序Node.js,并将NDB Cluster作为数据存储。有关更多信息,请参见MySQL NoSQL Connector for JavaScript。

    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群集时,如何找出错误或警告消息的含义?

    有两种方法可以完成此操作:

    • mysql客户端中,一旦收到错误或警告条件的通知,请立即使用SHOW ERRORSSHOW WARNINGS
    • 在系统外壳程序提示符下,使用perror --ndb error_code

    A.10.19。

    NDB Cluster交易安全吗?支持哪些隔离级别?

    是的。对于使用NDB存储引擎创建的表,支持事务。当前,NDB Cluster仅支持READ COMMITTED事务隔离级别。

    A.10.20。

    NDB群集支持哪些存储引擎?

    NDB群集需要NDB存储引擎。也就是说,为了在NDB群集中的节点之间共享表,必须使用ENGINE=NDB(或等效选项ENGINE=NDBCLUSTER)创建表。

    可以在与NDB Cluster一起使用的MySQL服务器上使用其他存储引擎(例如InnoDBMyISAM)创建表,但是由于这些表未使用NDB,因此它们不参与集群。每个这样的表对于创建它的单个MySQL服务器实例都是严格本地的。

    NDB群集InnoDB在体系结构,需求和实现方面与群集完全不同。尽管它们的名称有任何相似之处,但这两者是不兼容的。有关InnoDB集群的更多信息,请参见InnoDB集群。另请参阅“将InnoDB与NDB群集相比使用InnoDB的MySQL服务器”,以了解NDBInnoDB存储引擎之间的区别。

    A.10.21。

    如果发生灾难性故障(例如,整个城市断电 UPS发生故障),我会丢失所有数据吗?

    将记录所有已提交的事务。因此,尽管在发生灾难时可能会丢失某些数据,但这应该是相当有限的。通过最小化每个事务的操作数量,可以进一步减少数据丢失。(在任何情况下,每个事务执行大量操作都是一个好主意。)

    A.10.22。

    FULLTEXTNDB群集是否可以使用索引?

    FULLTEXT目前只有InnoDBMyISAM存储引擎支持索引。有关更多信息,请参见“全文搜索功能”。

    A.10.23。

    我可以在一台计算机上运行多个节点吗?

    可能但并非总是明智的。运行集群的主要原因之一是提供冗余。为了获得此冗余的全部好处,每个节点应驻留在单独的计算机上。如果在单个计算机上放置多个节点而该计算机发生故障,则所有这些节点都将丢失。因此,如果您确实要在一台计算机上运行多个数据节点,则以这样的方式进行设置非常重要:该计算机的故障不会导致给定节点组中所有数据节点的丢失。

    鉴于NDB群集可以在装有低成本(甚至无成本)操作系统的商用硬件上运行,因此额外花费一两台机器来保护关键任务数据是非常值得的。还值得注意的是,运行管理节点的群集主机的要求最低。可以使用300 MHz奔腾或同等CPU和足够的RAM用于操作系统来完成此任务,再加上少量的ndb_mgmdndb_mgm进程开销。

    可以在具有多个CPU,内核或两者的单个主机上运行多个群集数据节点。NDB群集发行版还提供了打算在此类系统上使用的数据节点二进制文件的多线程版本。有关更多信息,请参见第22.4.3节“ndbmtd-NDB群集数据节点守护程序(多线程)”。

    在某些情况下,还可以在同一台计算机上同时运行数据节点和SQL节点。这种安排的执行情况取决于许多因素,例如核心和CPU的数量以及数据节点和SQL节点进程可用的磁盘和内存量,并且在计划此类安排时必须考虑这些因素。配置。

    A.10.24。

    是否可以在不重新启动NDB群集的情况下将数据节点添加到NDB群集?

    可以在不使群集脱机的情况下将新的数据节点添加到正在运行的NDB群集。有关更多信息,请参见“在线添加NDB群集数据节点”。

    对于其他类型的NDB群集节点,只需进行滚动重启(请参见“执行NDB群集的滚动重启”)。

    A.10.25。

    使用NDB群集时,我应该注意哪些限制?

    NDBMySQL NDB Cluster中的表限制包括以下内容:

    • 不支持临时表;CREATE TEMPORARY TABLE使用ENGINE=NDBENGINE=NDBCLUSTER因错误而失败的语句。
    • NDBCLUSTER表支持的唯一用户定义分区类型为KEYLINEAR KEY。尝试NDB使用任何其他分区类型创建表失败,并显示错误。
    • FULLTEXT不支持索引。
    • 不支持索引前缀。只有完整的列可以被索引。
    • 不支持空间索引(尽管可以使用空间列)。请参见“空间数据类型”。
    • 对部分事务和部分回滚的支持可与其他事务存储引擎(例如InnoDB可以回滚单个语句的)相媲美。
    • 每个表允许的最大属性数为512。属性名称的长度不能超过31个字符。对于每个表,表和数据库名称的最大组合长度为122个字符。
    • 基于NDB 8.0,表行的最大大小为14 KB,不计算BLOB值。在NDB 8.0中,此最大值增加到30000字节。有关更多信息,请参见“NDB群集中与数据库对象相关联的限制”。

      每个NDB表的行数没有设置限制。表大小的限制取决于许多因素,特别是取决于每个数据节点可用的RAM数量。

    有关NDB群集中限制的完整列表,请参见“ NDB群集的已知限制”。另请参见“ NDB Cluster 8.0中解决的先前的NDB Cluster问题”。

    A.10.26。

    NDB群集是否支持外键?

    NDB Cluster提供了对外键约束的支持,该约束与InnoDB存储引擎中的约束相当。有关更多详细信息,请参见“外键约束”,以及“外键约束”。需要外键支持的应用程序应使用NDB Cluster 7.3、7.4、7.5或更高版本。

    A.10.27。

    如何将现有的MySQL数据库导入NDB群集?

    您可以像将任何其他版本的MySQL导入数据库一样,将数据库导入NDB Cluster。除了本常见问题中其他地方提到的限制外,唯一的其他特殊要求是群集中要包含的任何表都必须使用NDB存储引擎。这意味着必须使用ENGINE=NDB或创建表ENGINE=NDBCLUSTER

    也可以将使用其他存储引擎的现有表转换为NDBCLUSTER使用一个或多个ALTER TABLE语句。但是,NDBCLUSTER在进行转换之前,表的定义必须与存储引擎兼容。在MySQL 8.0中,还需要其他解决方法。有关详细信息,请参见“ NDB群集的已知限制”。

    A.10.28。

    NDB群集节点如何相互通信?

    群集节点可以通过三种不同的传输机制中的任何一种进行通信:TCP / IP,SHM(共享内存)和SCI(可伸缩一致接口)。如果可用,默认情况下,位于同一群集主机上的节点之间将使用SHM。但是,这被认为是实验性的。SCI是用于构建可扩展的多处理器系统的高速(每秒1 GB或更高)的高可用性协议。它需要特殊的硬件和驱动程序。有关将SCI用作NDB群集的传输机制的更多信息,请参见“使用NDB群集的高速互连”。

    A.10.29。

    什么是仲裁员?

    如果群集中的一个或多个数据节点发生故障,则可能不是所有的群集数据节点都可以彼此“看到”。实际上,在网络分区(也称为“裂脑”)中,两组数据节点可能会彼此隔离。这种情况是不希望的,因为每组数据节点都试图表现得好像整个集群一样。要求仲裁员在竞争的数据节点集之间做出决定。

    当至少一个节点组中的所有数据节点都处于活动状态时,网络分区就不成问题了,因为群集的任何子集都无法自行形成功能性群集。当没有单个节点组的所有节点都处于活动状态时,就会出现真正的问题,在这种情况下,将进行网络分区(“裂脑”场景)成为可能。然后需要一名仲裁员。所有群集节点都将同一节点识别为仲裁器,通常是管理服务器。但是,可以将群集中的任何MySQL服务器配置为充当仲裁程序。仲裁程序接受第一组群集节点进行联系,并告诉其余组关闭。仲裁程序的选择由ArbitrationRank MySQL Server和管理服务器节点的配置参数控制。您还可以使用ArbitrationRank配置参数来控制仲裁程序选择过程。有关这些参数的更多信息,请参见“定义NDB群集管理服务器”。

    仲裁者的角色本身并不会对如此指定的主机施加任何苛刻的要求,因此,仲裁者主机不需要特别快或为此目的而具有额外的存储空间。

    A.10.30。

    NDB群集支持哪些数据类型?

    NDB Cluster支持所有常用的MySQL数据类型,包括与MySQL空间扩展相关的数据类型。但是,NDB存储引擎不支持空间索引。(只有更多信息才支持空间索引MyISAM;有关更多信息,请参见“空间数据类型”。)此外,与NDB表一起使用时,索引之间存在一些差异。

    注意

    NDB群集磁盘数据表(即使用TABLESPACE ... STORAGE DISK ENGINE=NDB或创建的表TABLESPACE ... STORAGE DISK ENGINE=NDBCLUSTER)仅具有固定宽度的行。这意味着(例如)每个包含一VARCHAR(255)列的“磁盘数据”表记录都需要255个字符的空间(这是该表使用的字符集和排序规则所必需的),而不管其中存储的实际字符数如何。

    有关这些问题的更多信息,请参见“ NDB群集的已知限制”。

    A.10.31。

    如何启动和停止NDB群集?

    必须按以下顺序分别启动集群中的每个节点:

    1. 使用ndb_mgmd命令启动管理节点。

      您必须包含-f--config-file选项,以告知管理节点可以在何处找到其配置文件。

    2. 使用ndbd命令启动每个数据节点。

      每个数据节点必须以-c--ndb-connectstring选项开头,以便数据节点知道如何连接到管理服务器。

    3. 使用首选启动脚本(例如mysqld_safe)启动每个MySQL Server(SQL节点)。

      每个MySQL Server必须以--ndbcluster--ndb-connectstring选项启动。这些选项使mysqld启用NDBCLUSTER存储引擎支持以及如何连接到管理服务器。

    这些命令中的每个命令都必须从装有受影响节点的计算机上的系统外壳运行。(您不必在计算机上物理地存在-可以使用远程登录外壳。)您可以通过在管理节点所在的计算机上启动NDB管理客户端ndb_mgm并发出SHOWor 来验证集群是否正在运行。ALL STATUS命令。

    要关闭正在运行的集群,请SHUTDOWN在管理客户端中发出命令。或者,您可以在系统外壳程序中输入以下命令:

    shell>ndb_mgm -e "SHUTDOWN"
    

    (此示例中的引号是可选的,因为该-e选项后的命令字符串中没有空格;此外,该SHUTDOWN命令与其他管理客户端命令一样,不区分大小写。)

    这些命令中的任何一个都会导致ndb_mgmndb_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节点,但是您应该知道ndbdndbmtd进程可能会与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使用NDB_STORED_USER特权为共享和同步的用户以及特权提供支持。有关更多信息,请参见“使用NDB_STORED_USER的分布式MySQL特权”。您应该注意,此实现是NDB 8.0的新增功能,并且与NDB Cluster的早期版本中使用的共享特权机制不兼容,而NDB 8.0不再支持该机制。

    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_mgmdndbd的输出):

    shell> ./ndb_mgmd
    
    shell>ps aux | grep ndb
    me      23002  0.0  0.0 122948  3104 ?        Ssl  14:14   0:00 ./ndb_mgmd
    me      23025  0.0  0.0   5284   820 pts/2    S+   14:14   0:00 grep ndb
    
    shell> ./ndbd -c 127.0.0.1 --initial
    
    shell>ps aux | grep ndb
    me      23002  0.0  0.0 123080  3356 ?        Ssl  14:14   0:00 ./ndb_mgmd
    me      23096  0.0  0.0  35876  2036 ?        Ss   14:14   0:00 ./ndbmtd -c 127.0.0.1 --initial
    me      23097  1.0  2.4 524116 91096 ?        Sl   14:14   0:00 ./ndbmtd -c 127.0.0.1 --initial
    me      23168  0.0  0.0   5284   812 pts/2    R+   14:15   0:00 grep ndb
    

    显示内存和CPU使用率的ndbd进程0.0是angel进程(尽管实际上每个进程使用的量很少)。该进程仅检查主ndbdndbmtd进程(实际处理数据的主数据节点进程)是否正在运行。如果允许这样做(例如,如果StopOnError配置参数设置为false),则angel进程将尝试重新启动主数据节点进程。