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

    NDBCLUSTER(也称为NDB)是一种内存存储引擎,提供高可用性和数据持久性功能。

    NDBCLUSTER存储引擎可以与一系列故障切换和负载平衡选项进行配置,但最简单的是开始在集群级别的存储引擎。NDB Cluster的NDB存储引擎包含一整套数据,仅依赖于群集本身内的其他数据。

    NDB群集的“群集”部分的配置独立于MySQL服务器。在NDB群集中,群集的每个部分都被视为一个节点。

    注意

    在许多情况下,术语“节点”用于表示计算机,但是在讨论NDB群集时,它表示一个过程。可以在一台计算机上运行多个节点。对于运行一个或多个群集节点的计算机,我们使用群集主机一词。

    共有三种类型的群集节点,并且在最小的NDB群集配置中,将至少有三个节点,这些类型之一:

    • 管理节点:这种类型的节点的作用是管理NDB群集中的其他节点,执行诸如提供配置数据,启动和停止节点以及运行备份之类的功能。由于此节点类型管理其他节点的配置,因此应首先启动此类型的节点,然后再启动任何其他节点。使用命令ndb_mgmd启动一个MGM节点。
    • 数据节点:这种类型的节点存储集群数据。数据节点的数量是副本的数量乘以片段的数量(请参见“ NDB群集节点,节点组,副本和分区”)。例如,对于两个副本(每个副本都有两个片段),您需要四个数据节点。一个副本足以存储数据,但不提供冗余。因此,建议具有2个(或更多)副本以提供冗余,从而提高可用性。使用命令ndbd(请参见“ndbd — NDB群集数据节点守护程序”)或ndbmtd启动数据节点。(请参见第22.4.3节“ndbmtd-NDB群集数据节点守护程序(多线程)”)。

      NDB群集表通常完全存储在内存中,而不是磁盘上(这就是为什么我们将NDB群集称为内存数据库)。但是,某些NDB群集数据可以存储在磁盘上。有关更多信息,请参见“ NDB群集磁盘数据表”。

    • SQL节点:这是访问集群数据的节点。对于NDB群集,SQL节点是使用NDBCLUSTER存储引擎的传统MySQL服务器。SQL节点是一个以和选项开始的mysqld进程,本章其他地方对此进行了说明,并可能还带有其他MySQL服务器选项。--ndbcluster--ndb-connectstring

      SQL节点实际上只是API节点的一种特殊类型,它指定访问NDB群集数据的任何应用程序。API节点的另一个示例是用于还原集群备份的ndb_restore实用程序。可以使用NDB API编写此类应用程序。有关NDB API的基本信息,请参见《 NDB API 入门》。

    重要

    期望在生产环境中采用三节点设置是不现实的。这样的配置没有冗余。要利用NDB Cluster的高可用性功能,必须使用多个数据和SQL节点。强烈建议使用多个管理节点。

    有关NDB群集中节点,节点组,副本和分区之间关系的简要介绍,请参见“ NDB群集节点,节点组,副本和分区”。

    群集的配置涉及配置群集中的每个单独节点以及在节点之间建立单独的通信链接。当前,NDB Cluster的设计目的是使数据节点在处理器能力,内存空间和带宽方面是同质的。另外,为了提供单点配置,整个集群的所有配置数据都位于一个配置文件中。

    管理服务器管理集群配置文件和集群日志。群集中的每个节点都从管理服务器检索配置数据,因此需要一种确定管理服务器所在位置的方法。当数据节点中发生有趣的事件时,节点会将有关这些事件的信息传输到管理服务器,然后管理服务器将信息写入群集日志。

    此外,可以有任意数量的群集客户端进程或应用程序。这些包括标准MySQL客户端,NDB特定于API的程序和管理客户端。这些将在接下来的几段中进行描述。

    标准MySQL客户端。 NDB Cluster可以与以PHP,Perl,C,C ++,Java,Python,Ruby等编写的现有MySQL应用程序一起使用。这样的客户端应用程序向充当NDB群集SQL节点的MySQL服务器发送SQL语句并从中接收响应,与它们与独立MySQL服务器进行交互的方式几乎相同。

    可以修改使用NDB群集作为数据源的MySQL客户端,以利用与多个MySQL服务器连接的能力来实现负载平衡和故障转移。例如,使用Connector / J 5.0.6和更高版本的Java客户端可以使用jdbc:mysql:loadbalance://URL(在Connector / J 5.1.7中进行了改进)来透明地实现负载平衡;有关将Connector / J与NDB群集一起使用的更多信息,请参见将Connector / J与NDB群集一起使用。

    NDB客户端程序。可以编写客户端程序NDBCLUSTER,使用NDB API(高级C ++ API)直接从存储引擎访问NDB群集数据,而绕过可能连接到群集的任何MySQL服务器。对于不需要数据的SQL接口的特殊用途,此类应用程序可能有用。有关更多信息,请参见 NDB API。

    NDB还可以使用NDB Cluster Connector for Java为NDB Cluster编写特定于Java的Java应用程序。这个NDB集群连接器包括ClusterJ,它是一种高级数据库API,类似于直接连接到的对象关系映射持久性框架(例如Hibernate和JPA),NDBCLUSTER因此不需要访问MySQL Server。NDB Cluster中还为ClusterJPA提供支持,这是NDB Cluster的OpenJPA实现,它利用ClusterJ和JDBC的优势;ID查找和其他快速操作是使用ClusterJ(绕过MySQL Server)执行的,而可以从MySQL的查询优化器中受益的更复杂的查询则是通过JDBC通过MySQL Server发送的。有关更多信息,请参见 Java和NDB Cluster以及 ClusterJ API和数据对象模型。

    NDB Cluster还支持使用Node.js用JavaScript编写的应用程序。用于JavaScript的MySQL连接器包括用于直接访问NDB存储引擎和MySQL服务器的适配器。使用此连接器的应用程序通常是事件驱动的,并且使用域对象模型,该域对象模型在许多方面与ClusterJ所采用的模型类似。有关更多信息,请参见MySQL NoSQL Connector for JavaScript。

    用于NDB群集的Memcache API,已实现为适用于memcached 1.6版和更高版本的可加载 ndbmemcache存储引擎,可用于提供持久性NDB Cluster数据存储,可使用memcache协议进行访问。

    标准的Memcached缓存引擎包含在NDB Cluster 8.0发行版中。每个Memcached服务器都可以直接访问存储在NDB Cluster中的数据,但也可以在本地缓存数据并可以处理来自此本地缓存的(某些)请求。

    有关更多信息,请参见ndbmemcache-NDB群集的Memcache API。

    管理客户。这些客户端连接到管理服务器,并提供用于正常启动和停止节点,启动和停止消息跟踪(仅调试版本),显示节点版本和状态,启动和停止备份等的命令。此类程序的一个示例是NDB Cluster随附的ndb_mgm管理客户端(请参见“ndb_mgm-NDB群集管理客户端”)。可以使用MGM API(一种与一种或多种NDB Cluster Management Server直接通信的C语言API)编写此类应用程序。有关更多信息,请参见 MGM API。。

    Oracle还提供了MySQL Cluster Manager,它提供了高级命令行界面,简化了许多复杂的NDB Cluster管理任务,例如重新启动具有大量节点的NDB Cluster。MySQL Cluster Manager客户端还支持用于获取和设置大多数节点配置参数以及与NDB Cluster相关的mysqld服务器选项和变量的值的命令。MySQL Cluster Manager 1.4.8为NDB 8.0提供了实验性支持。有关更多信息,请参见《MySQL™Cluster Manager 1.4.8用户手册》。

    事件日志。 NDB群集按类别(启动,关闭,错误,检查点等),优先级和严重性记录事件。有关所有可报告事件的完整列表,请参见“ NDB群集中生成的事件报告”。事件日志是此处列出的两种类型:

    • 群集日志:记录整个群集所需的所有可报告事件。
    • 节点日志:一个单独的日志,也为每个单独的节点保留。
    注意

    在正常情况下,仅保留和检查集群日志是必要且充分的。仅出于应用程序开发和调试目的,才需要查阅节点日志。

    检查点。一般来说,将数据保存到磁盘时,可以说已经到达检查点。对于NDB群集更特定,检查点是所有提交的事务存储在磁盘上的时间点。关于NDB存储引擎,有两种类型的检查点可以协同工作,以确保维持群集数据的一致视图。这些显示在以下列表中:

    • 本地检查点(LCP):这是特定于单个节点的检查点。但是,对于群集中的所有节点,LCP或多或少同时发生。LCP通常每隔几分钟发生一次。精确的时间间隔会有所不同,并且取决于节点存储的数据量,集群活动的级别以及其他因素。

      NDB 8.0支持部分LCP,这可以在某些情况下显着提高性能。请参阅EnablePartialLcpRecoveryWork配置参数的说明,这些参数启用部分LCP并控制它们使用的存储量。

    • 全局检查点(GCP):当同步所有节点的事务并将重做日志刷新到磁盘时,每隔几秒钟就会发生GCP。

    有关由本地检查点和全局检查点创建的文件和目录的更多信息,请参见 NDB群集数据节点文件系统目录文件。