一、NDB Cluster (分布式存储引擎)存储引擎简单简介
NDB 存储引擎也叫NDB Cluster 存储引擎,主要用于MySQL Cluster 分布式集群环境,
Cluster 是MySQL 从5.0 版本才开始提供的新功能。这部分我们可能并不仅仅只是介绍NDB
存储引擎,因为离开了MySQL CLuster 整个环境,NDB 存储引擎也将失去太多意义。所以
接下来会和MySQL Cluster的搭建一块介绍。
Mysql Cluster 是一种技术,其主要功能是在无共享的相关系统中部署内存中数据库的Cluster,其主要是通过NDB Cluster(简称NDB)存储引擎来实现的。
在通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。
一般来说,一个Mysql Cluster 的环境结构主要如下:
主要由以下三部分组成:
1). 负责管理各个节点的Manage 节点主机:
管理节点负责整个Cluster 集群中各个节点的管理工作,包括集群的配置,启动关闭
各节点,以及实施数据的备份恢复等。管理节点会获取整个Cluster 环境中各节点的状态和
错误信息,并且将各Cluster 集群中各个节点的信息反馈给整个集群中其他的所有节点。由
于管理节点上保存在整个Cluster 环境的配置,同时担任了集群中各节点的基本沟通工作,
所以他必须是最先被启动的节点。
2). SQL 层的SQL 服务器节点(后面简称为SQL 节点),也就是我们常说的Mysql Server:
主要负责实现一个数据库在存储层之上的所有事情,比如连接管理,query 优化和响
应,cache 管理等等,只有存储层的工作交给了NDB 数据节点去处理了。也就是说,在纯粹
的Mysql Cluster 环境中的SQL 节点,可以被认为是一个不需要提供任何存储引擎的Mysql
服务器,因为他的存储引擎有Cluster 环境中的NDB 节点来担任。所以,SQL 层各Mysql 服
务器的启动与普通的Mysql 启动有一定的区别,必须要添加ndbcluster 项,可以添加在
my.cnf 配置文件中,也可以通过启动命令行来指定。
3). Storage 层的NDB 数据节点,也就是上面说的NDB Cluster:
NDB 是一个内存式存储引擎也就是说,他会将所有的数据和索引数据都load 到内存中,
但也会将数据持久化到存储设备上。不过,最新版本,已经支持用户自己选择数据可以不全
部Load 到内存中了,这对于有些数据量太大或者基于成本考虑而没有足够内存空间来存放
所有数据的用户来说的确是一个大好消息。
NDB 节点主要是实现底层数据存储的功能,保存Cluster 的数据。每一个NDB 节点保存
完整数据的一部分(或者一份完整的数据,视节点数目和配置而定),在MySQL CLuster 里
面叫做一个fragment。而每一个fragment,正常情况来讲都会在其他的主机上面有一份(或
者多分)完全相同的镜像存在。这些都是通过配置来完成的,所以只要配置得当,Mysql
Cluster 在存储层不会出现单点的问题。
一般来说,NDB 节点被组织成一个一个的NDB Group,一个NDB Group 实际上就是一组存有完全相同的物理数据的NDB 节点群。
上面提到了NDB 各个节点对数据的组织,可能每个节点都存有全部的数据也可能只保存
一部分数据,主要是受节点数目和参数来控制的。首先在Mysql Cluster 主配置文件(在管
理节点上面,一般为config.ini)中,有一个非常重要的参数叫NoOfReplicas,这个参数
指定了每一份数据被冗余存储在不同节点上面的份数,该参数一般至少应该被设置成2,也
只需要设置成2 就可以了。因为正常来说,两个互为冗余的节点同时出现故障的概率还是非
常小的,当然如果机器和内存足够多的话,也可以继续增大。一个节点上面是保存所有的数
据还是一部分数据,还受到存储节点数目的限制。NDB 存储引擎首先保证NoOfReplicas 参
数配置的要求对数据冗余,来使用存储节点,然后再根据节点数目将