mysql cluster 是一个基于NDBcluster存储引擎的完整的分布式数据库系统;它不仅有高可用性,还有自动切分数据、冗余数据等高级功能。和oralce real cluster application 不太一样的是,mysql cluster 是一个share nothing的架构,各个mysql server之间并不共享任何数据,高度可扩展性及可用性的突出表现是其最大的特色。

    mysql cluster实际上是在无共享存储设备的情况下实现的一种完全分布式的数据库系统,,它主要通过NDBcluster (简称NDB)存储引擎来实现,mysql cluster刚诞生时是一个能对数据库进行持久化的内存数据库,所有数据和索引都必须装载在内存中才能够正常运行,但最新的mysql cluster版本已经有所改进,去掉了部分限制。
一、概念整理

一个mysql cluster 的环境主要由以下三部分组成:
1、sql层的sql 服务器节点 (简称sql节点)即通常所说的 msyql server
  
sql 节点主要负责实现一个数据库在存储层上的所有事情,如连接管理,query优化和响、cache管理等,只有存储层的工作交给NDB数据节点去处理。也就是说在纯粹的 mysql cluster 环境中的 sql 节点,可以被认为是一个不须要提供任何非系统表使用的存储引擎的mysql 服务器,因为它的存储引擎由cluster 中的ndb 节点来担任。所以SQL层各MYSQL服务器的启动与普通MYSQL server的启动也有一定的区别,必须添加ndbcluster参数项才行。可以将其添加在my.cnf配置文件中,也可以通过启动命令来指定;

2、storage 层的NDB数据节点,也就是上面所说的NDB cluster

最初的NDB是一个内存式存储引擎,当然也会将数据持久化到存储设备上,但是最新的NDBcluster 存储引擎已经改进了这一点,可以选择数据是全部加载到内存中,还是仅仅加载索引。NDB节点主要实现底层数据存储功能,来保存cluster的数据。每一个cluster 节点保存完整数据的一个fragment ,也就是一个数据分片;(或者一份完整的数据,视节点数目和配置而定);所以只要配置的当,mysql cluster在存储层不会出现单点的问题。一般来说,DNB节点被组织成一个一个的NDB group,一个NDG group 实际上是一组有完全相同物理数据的NDB节点群;
    NDB各个节点对数据的组织,可能每个节点都保存全部数据也可能只保存一部分,主要由节点数目和参数来控制。首先在 mysql cluster主配置文件(在管理节点上一般为config.ini )中,有一个非常重要的参数 NoOfReplicas ,该参数指定了每一份数据被冗余存储在不同节点上的份数,一般至少被设置成2.也只须要设置成2,一般来说,两个互为冗余的节点同时出现故障的概率是非常小的。如果机器和内存足够多的话,也可以设置大一点进一步减少出现故障的概率,此外一个节点上面是否保存所有数据还受到存储节点数目的限制。NDB存储引擎首先保证按no or replicas 参数配置的要求使用存储节点,对数据惊醒冗余,在根据节点数目将数据分段来继续使用多余的NDB节点。分段的数目为节点总数除以NO of replicas;

3、负责管理各个节点的manage节点主机

管理节点负责整个cluster集群中各个节点的管理工作,包括集群的配置,启动关闭各节点,对节点进行常规维护,以及实施数据的备份和恢复等。管理节点会获取整个cluster环境中节点的状态和错误信息,并将各个cluster集群中各个节点的信息反馈给整个集群中其他的所有节点。由于管理节点上保存了整个cluster的环境配置,同时担任了集群中各个节点的沟通工作,所以它必须是最先被启动的节点。

二、环境搭建

搭建mysql cluster 首先需要至少一个管理节点主机来实现管理功能,一个sql节点来实现mysql功能,以及两个NDB节点实现DNB cluster功能,我们采用双sql节点来搭建测试环境:

1、硬件准备:
1)、mysql 节点1     192.168.0.11
2)、mysql 节点2     192.168.0.12
3)、NDB   节点1     192.168.0.13
4)、NDB   节点1     192.168.0.14
5)、管理节点        192.168.0.15