MySQL NDB Cluster概述

MySQL NDB Cluster是一个适用于分布式计算环境的高可用性、高冗余版本的MySQL。
NDB集群由一组计算机组成,称为主机,每个计算机运行一个或多个进程。这些进程称为节点,可能包括MySQL服务器(用于访问NDB数据)、数据节点(用于存储数据)、一个或多个管理服务器,以及可能的其他专门的数据访问程序。在NDB集群中这些组件的关系如下所示:

《MySQL NDB Cluster概述》 NDB集群

所有这些程序一起工作来形成一个NDB集群。当数据被NDB存储引擎存储时,表(和表数据)存储在数据节点中。这样的表可以直接从集群中的所有MySQL服务器(SQL节点)访问。因此,在一个将数据存储在集群中的工资单应用程序中,如果一个应用程序更新了雇员的工资,那么查询这些数据的所有其他MySQL服务器都可以立即看到这个变化。

NDB集群核心概念

NDB CLUSTER(也称为NDB)是一个内存存储引擎,提供高可用的数据持久化功能。
NDB CLUSTER存储引擎可以配置一系列故障转移和负载平衡。

集群节点

集群节点有三种类型,在最小的NDB集群配置中,至少会有三个节点。

1. Management node

这种类型节点的作用是管理NDB集群中的其他节点,执行诸如提供配置数据、启动和停止节点以及运行备份等功能。因为这个节点类型管理其他节点的配置,所以应该首先启动这种类型的节点,在任何其他节点之前。执行ndb_mgmd命令启动该节点。

2. Data node

这种类型节点的作用是存储集群数据。一个副本足以用于数据存储,但不提供冗余;因此,建议使用2(或更多)副本来提供冗余,从而获得高可用性。执行ndbd或ndbmtd(多线程)命令启动该节点。NDB集群表通常存储在内存中,而不是在磁盘上(这就是为什么我们将NDB集群称为内存中的数据库)。然而,一些NDB集群数据可以存储在磁盘上。

3. SQL node

在NDB Cluster中SQL节点是一个使用NDBCLUSTER存储引擎的传统MySQL服务器。

期望在生产环境中使用三个节点的设置是不现实的。这样的配置不提供冗余;为了从NDB集群的高可用性特性中获益,您必须使用多个数据和SQL节点。还强烈推荐使用多个管理节点。

客户端

1. 标准MySQL客户端

NDB集群可以与用PHP、Perl、C、C++、Java、Python、Ruby等编写的现有MySQL应用程序一起使用。这样的客户端应用程序发送SQL语句并接收来自MySQL服务器的响应,它们充当NDB集群SQL节点,就像它们与独立的MySQL服务器交互一样。例如,使用Connector/J 5.0.6和更高版本的Java客户端可以使用jdbc:mysql:loadbalance://url以透明地实现负载平衡。

2. NDB客户端

客户端程序可以使用NDB API(一个高层次的C++ API,NDBCLUSTER存储引擎)直接访问NDB集群数据,绕过任何可能连接到集群的MySQL服务器。
对于NDB集群来说,也可以使用NDB集群连接器来为NDB集群编写Java应用程序。NDB集群连接器包括ClusterJ,这是一种类似于对象关系映射持久性框架的高级数据库API,如Hibernate和JPA,它们直接连接到NDBCLUSTER,因此不需要访问MySQL服务器。在NDB集群中也为ClusterJPA提供了支持,这是一个利用ClusterJ和JDBC的优势的NDB集群的OpenJPA实现。ID查找和其他快速操作是使用ClusterJ(绕过MySQL服务器)执行的,而可以从MySQL查询优化器中获益的更复杂的查询是通过MySQL服务器发送的,使用JDBC。

3. 管理客户端

这些客户端连接到管理服务器,并提供启动和停止节点的命令,启动和停止消息追踪(仅调试版本),显示节点版本和状态,启动和停止备份,等等。这种类型的程序的一个例子是ndbmgm管理客户端提供的NDB集群。

参考
https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html
https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-overview.html
https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-basics.html

    原文作者:季舟1
    原文地址: https://www.jianshu.com/p/c989ee86d7cf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞