NDB Cluster 基本介绍

您所在的位置:网站首页 群集技术适用于以下场合 NDB Cluster 基本介绍

NDB Cluster 基本介绍

2023-07-17 12:40| 来源: 网络整理| 查看: 265

文章目录 一、NDB集群概述二、NDB核心概念三、NDB Cluster节点,节点组,副本和分区

一、NDB集群概述

  NDB集群是一种在无共享系统中实现内存数据库集群的技术。无共享体系结构使系统能够使用非常便宜的硬件,并且对硬件或软件的特定要求最低。   NDB集群设计为没有任何单点故障。在无共享系统中,每个组件都应该有自己的内存和磁盘,不建议或不支持使用共享存储机制,如网络共享、网络文件系统和SAN。   NDB Cluster将MySQL服务器与NDB的内存集群存储引擎集成在一起。NDB集群由一组主机组成,每个主机运行一个或多个进程。这些被称为节点的进程可以包括MySQL服务器(用于访问NDB数据)、数据节点(用于存储数据)、一个或多个管理服务器,以及可能的其他专用数据访问程序。NDB集群中这些组件的关系如下所示:

在此群集中,三个MySQL服务器(mysqld程序)是SQL节点,它们提供对存储数据的四个数据节点(ndbd程序)的访问。 SQL节点和数据节点受NDB管理服务器(ndb_mgmd程序)的控制。 各种客户端和API可以与SQL节点进行交互-mysql客户端,MySQL C API,PHP,Connector / J和Connector / NET。 还可以使用NDB API与数据节点或NDB管理服务器进行交互来创建自定义客户端。 NDB管理客户端(ndb_mgm程序)与NDB管理服务器进行交互。

  当数据使用NDB存储引擎存储时,表和数据存储在数据节点中。这样的表可以从集群中的所有其他SQL节点直接访问。尽管NDB集群SQL节点使用mysqld服务器守护进程,但它与MySQL 8.0提供的mysqld二进制文件在许多关键方面有所不同,而且mysqld的两个版本是不可互换的。   NDB集群中存储在数据节点中的数据可以被镜像,集群可以处理单个数据节点的故障,除了少量事务因丢失事务状态而中止外,没有其他影响。   单个节点可以停止并重新启动,然后重新加入集群。滚动重新启动(其中所有节点依次重新启动)用于进行配置更改和软件升级。滚动重启也被用作在线添加新数据节点过程的一部分。   NDB集群节点可以采用不同的传输机制进行节点间通信;在大多数实际部署中,TCP/IP超过标准的100mbps或更快的以太网硬件被使用。

二、NDB核心概念

  NDB CLUSTER是一种内存存储引擎,提供高可用性和数据持久性功能。NDB CLUSTER存储引擎可以与一系列故障切换和负载平衡选项进行配置。NDB Cluster的NDB存储引擎包含一整套数据,仅依赖于群集本身内的其他数据。   共有三种类型的群集节点:

管理节点:管理节点的作用是管理NDB Cluster内的其他节点,执行诸如提供配置数据,启动和停止节点以及运行备份之类的功能。由于此节点类型管理其他节点的配置,因此应首先启动此类型的节点,然后再启动任何其他节点。使用命令ndb_mgmd启动一个MGM节点 。

数据节点:数据节点存储集群数据。数据节点的数量是副本的数量乘以片段的数量。例如,对于两个副本(每个副本都有两个片段),需要四个数据节点。一个副本足以存储数据,但不提供冗余。因此,建议具有2个(或更多)副本以提供冗余,从而提高可用性。使用命令 ndbd或 ndbmtd启动数据节点。NDB Cluster表通常完全存储在内存中,而不是磁盘上。但是,某些NDB Cluster数据可以存储在磁盘上。

SQL节点:SQL节点是一个访问集群数据的节点。对于NDB集群,SQL节点是使用NDB CLUSTER存储引擎的传ySQL服务器。SQL节点是以–ndbcluster和–ndb connectstring选项启动的mysqld进程。SQL节点实际上只是一种特殊类型的API节点,它指定任何访问NDB集群数据的应用程序。

  在生产环境中采用三节点设置是不现实的这样的配置没有冗余。要利用NDB Cluster的高可用性功能,必须使用多个数据和SQL节点。强烈建议使用多个管理节点。   集群的配置包括配置集群中的每个节点,以及在节点之间设置单独的通信链路。NDB集群目前的设计是数据节点在处理器、内存和带宽方面是相同的。此外,为了提供单点配置,整个集群的所有配置数据都位于一个配置文件中。   管理服务器管理集群配置文件和集群日志。群集中的每个节点都从管理服务器检索配置数据,因此需要一种确定管理服务器所在位置的方法。当数据节点中发生事件时,节点会将有关这些事件的信息传输到管理服务器,然后管理服务器将信息写入群集日志。 标准MySQL客户端   NDB集群可以与PHP、Perl、C、C++、java、Python、Ruby等MySQL应用程序一起使用。这种应用程序向充当NDB集群SQL节点的MySQL服务器发送SQL语句并从中接收响应,这与它们与独立的MySQL服务器交互的方式非常相似。   可以修改使用NDB集群作为数据源的MySQL客户机,以利用与多个MySQL服务器连接的能力来实现负载平衡和故障转移。 NDB客户端程序   可以使用NDB API直接从存储引擎访问NDB Cluster数据,而绕过可能连接到群集的任何MySQL服务器,而无需使用该程序。对于不需要数据的SQL接口的特殊用途,此类应用程序可能有用。   NDB还可以使用NDB Cluster Connector for Java为NDB Cluster编写特定于Java的Java应用程序。这个NDB集群连接器包括ClusterJ,它是一种高级数据库API,类似于直接连接到的对象关系映射持久性框架,NDB CLUSTER因此不需要访问MySQL Server。   NDB Cluster还支持使用Node.js用JavaScript编写的应用程序。用于JavaScript的MySQL连接器包括用于直接访问NDB存储引擎和MySQL服务器的适配器。使用此连接器的应用程序通常是事件驱动的,并且使用域对象模型,该域对象模型在许多方面与ClusterJ所采用的模型类似。

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

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

管理客户

  这些客户端连接到管理服务器,并提供用于正常启动和停止节点,启动和停止消息跟踪,显示节点版本和状态,启动和停止备份等的命令。

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

事件日志 :NDB Cluster按类别(启动,关闭,错误,检查点等),优先级和严重性记录事件。事件日志是此处列出的两种类型:

群集日志:记录整个群集所需的所有可报告事件。

节点日志:一个单独的日志,也为每个单独的节点保留。

检查点:一般来说,当数据保存到磁盘时,就表示已经到达了一个检查点。更具体地说,检查点是一个时间点,所有提交的事务都存储在磁盘上。对于NDB存储引擎,有两种类型的检查点协同工作,以确保集群数据的一致视图得到维护。这些显示在以下列表中:

本地检查点(LCP):这是一个特定于单个节点的检查点;但是,LCP或多或少同时发生在集群中的所有节点上。LCP通常每隔几分钟发生一次;精确的时间间隔会有所不同,这取决于节点存储的数据量、群集活动的级别以及其他因素。ndb8.0支持部分lcp,在某些情况下可以显著提高性能。

全局检查点(GCP):当所有节点的事务都被同步并且redo日志被刷新到磁盘时,GCP每隔几秒发生一次。

三、NDB Cluster节点,节点组,副本和分区

数据节点: ndbd或ndbmtd进程,它存储一个或多个副本,即分配给该节点所属的节点组的分区的副本。每个数据节点应位于单独的计算机上。虽然也可以在一台计算机上托管多个数据节点进程,但是通常不建议这样的配置。 节点组: 一个节点组由一个或多个节点组成,并存储分区或副本集。

NDB群集中的节点组数不是直接可配置的;它是数据节点数量和副本数量(NoOfReplicas配置参数)的函数,如下所示:

[# of node groups] = [# of data nodes] / NoOfReplicas

  因此,具有4个数据节点的NDB群集NoOfReplicas在config.ini文件中如果设置为1,则有4个节点组,如果 将其NoOfReplicas设置为2,则有2个节点组 ,而如果NoOfReplicas将其设置为4,则有1个节点组 。NDB群集中的所有节点组必须具有相同数量的数据节点可以在线将新的节点组(以及新的数据节点)在线添加到正在运行的NDB群集中。

分区: 分区是集群存储的数据的一部分。每个节点负责使分配给它的任何分区的至少一个副本(即至少一个副本)可供群集使用。

  NDB群集默认使用的分区数取决于数据节点数和数据节点使用的LDM线程数,如下所示:

[# of partitions] = [# of data nodes] * [# of LDM threads]

  使用运行ndbmtd的数据节点时,LDM线程数由MaxNoOfExecutionThreads控制 。使用ndbd时,只有一个LDM线程,这意味着与参与集群的节点一样多的集群分区。当使用ndbmtd且 MaxNoOfExecutionThreads设置为3或更少时,也是如此。

NDB和用户定义的分区。 、[NDBCLUSTER]通常会自动对表进行分区 。但是,也可以对表使用用户定义的分区。这受到以下限制:

表的生产中 仅支持KEY和LINEAR KEY分区方案NDB。

可以为任何NDB表显式定义的最大分区数为8*[number of LDM threads]*[number of node groups],NDB集群中的节点组数量如本节前面所述。在为数据节点进程运行ndbd时,设置LDM线程的数量没有效果(因为ThreadConfig仅适用于ndbmtd);在这种情况下,为了执行此计算,可以将此值视为等于1。

副本: 节点组中的每个节点都存储一个副本。副本数等于每个节点组的节点数。副本完全属于单个节点;一个节点可以存储多个副本。

  下图说明了一个NDB群集,该群集具有四个运行ndbd的数据节点,按两个节点组(每个节点两个)排列。节点1和2属于节点组0,节点3和4属于节点组1。这里仅显示数据节点。尽管正常工作的NDB群集需要一个ndb_mgmd进程来进行群集管理,并且至少有一个SQL节点才能访问该群集存储的数据。 内容在周围的文字中描述。  群集存储的数据分为四个分区,编号分别为0、1、2和3。每个分区(以多个副本的形式)存储在同一节点组上。分区存储在备用节点组上,如下所示:

分区0存储在节点组0上;一个 主副本(主副本)被存储在节点1和一个 备份副本(分区的备份副本)被存储在节点2上。分区1存储在另一个节点组(节点组1)上;该分区的主副本位于节点3上,其备份副本位于节点4上。分区2存储在节点组0上。但是,其两个副本的放置与分区0相反。对于分区2,主副本存储在节点2上,备份存储在节点1上。分区3存储在节点组1上,其两个副本的位置与分区1的位置相反。也就是说,其主副本位于节点4上,而备份副本位于节点3上。

  只要参与群集的每个节点组至少有一个在运行的节点,该群集就具有所有数据的完整副本并保持生存。 在这里插入图片描述   集群由两个节点组组成,每个节点组均由两个数据节点组成。每个数据节点都在运行ndbd的实例。来自节点组0的至少一个节点和来自节点组1的至少一个节点的任何组合都足以使群集“处于活动状态 ”。但是,如果单个节点组中的两个节点均发生故障,则由另一个节点组中其余两个节点组成的组合是不够的。在这种情况下,群集丢失了整个分区,因此无法再提供对所有NDB群集数据的完整访问。 一个NDB群集实例支持的最大节点组数为48



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3