1 概述
MySQL Cluster 是MySQL 适合于分布式计算环境的高实用、可拓展、高性能、高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达到99.999%。MySQL Cluster允许在无共享的系统中部署“内存中”数据库集群,通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。
实际上,MySQL集群是把一个叫做NDB的内存集群存储引擎集成与标准的MySQL服务器集成。它包含一组计算机,每个都跑一个或者多个进程,这可能包括一个MySQL服务器,一个数据节点,一个管理服务器和一个专有的一个数据访问程序。
MySQL Cluster能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但在Cluster 级别上的存储引擎上做这个最简单。以下为MySQL集群结构关系图,
MySQL从结构看,由3类节点(计算机或进程)组成,分别是:
管理节点:用于给整个集群其他节点提供配置、管理、仲裁等功能。理论上通过一台服务器提供服务就可以了。
数据节点:MySQL Cluster的核心,存储数据、日志,提供数据的各种管理服务。2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。
SQL节点(API):用于访问MySQL Cluster数据,提供对外应用服务。增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在 同一台服务器上。
2 NDB引擎
MySQL Cluster 使用了一个专用的基于内存的存储引擎――NDB引擎,这样做的好处是速度快, 没有磁盘I/O的瓶颈,但是由于是基于内存的,所以数据库的规模受系统总内存的限制, 如果运行NDB的MySQL服务器一定要内存够大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台服务器上来实现数据的可靠性和扩展性,理论上 通过配置2台NDB的存储节点就能实现整个数据库集群的冗余性和解决单点故障问题。
2.1 缺陷
基于内存,数据库的规模受集群总内存的大小限制
基于内存,断电后数据可能会有数据丢失,这点还需要通过测试验证。
多个节点通过网络实现通讯和数据同步、查询等操作,因此整体性受网络速度影响,
因此速度也比较慢
2.2 优点
多个节点之间可以分布在不同的地理位置,因此也是一个实现分布式数据库的方案。
扩展性很好,增加节点即可实现数据库集群的扩展。
冗余性很好,多个节点上都有完整的数据库数据,因此任何一个节点宕机都不会造成服务中断。
实现高可用性的成本比较低,不象传统的高可用方案一样需要共享的存储设备和专用的软件才能实现,NDB 只要有足够的内存就能实现。
3 集群搭建及测试
3.1 配置规划
管理(MGM) 和管理客户端节点1:192.168.1.110 master
数据(NDBD)和SQL节点2:192.168.56.102 slave1
数据(NDBD)和SQL节点3: 192.168.56.103 vm3.sysu
3.2安装 前期准备
在三台服务器上配置好hosts文件
在三天服务器上都安装好MySQL-Cluster-server-gpl-7.3.6-2.el6.x86_64.rpm
在数据节点上创建系统账号
确认网络畅通
确认iptables设置
确认Selinux设置
依赖环境
python 2.6+
paramiko 1.7.7.1 or newer
pycrypto 2.6 or newer
请自行下载paramiko和pycrypto或者yum进行安装
地址https://pypi.python.org/pypi/paramiko/1.10.6
https://pypi.python.org/pypi/pycrypto
解压 tar -xvf paramiko-1.10.6.tar.gz
解压后会看到 setup.py 这个脚本
运行 python setup.py install
解压tar -xvf pycrypto-2.6.1.tar.gz
解压后悔看到setup.py这个脚本
运行python setup.py intall
如果出现 error: command 'gcc' failed with exit status 1
这说明缺少python-devel包 通过yum安装 yum install gcc python-devel
安装完毕后,重新执行python setup.py install
以上准备工作做好后,执行ndb_setup.py
这是会弹出浏览器,进去浏览器进行配置
hostlist填写你3台机器的hostname
然后点next,检查通过后,会显示3台机器的配置等情况。然后点next配置sql节点和datanode节点