概述MySQLCluster是适用于分布式计算环境的高实用、可扩展、高性能、高冗余的MySQL版本。其研发设计的初衷是为了满足众多行业最严苛的应用需求。这些应用往往要求数据库运行的可靠性达到99.999%。MySQLCluster允许在无共享系统中部署“内存中”数据库集群。通过无共享架构,系统可以使用廉价的硬件,对硬件和软件没有特殊要求。此外,由于每个组件都有自己的内存和磁盘,因此不存在单点故障。事实上,MySQL集群是在一个标准的MySQL服务器上集成了一个名为NDB的内存集群存储引擎。它由一组计算机组成,每台计算机运行一个或多个进程,其中可能包括一个MySQL服务器、一个数据节点、一个管理服务器和一个专有的数据访问程序。MySQLCluster可以使用各种故障转移和负载平衡选项配置NDB存储引擎,但在Cluster级别的存储引擎上执行此操作最简单。下面是MySQL集群结构关系图。从结构上看,MySQL由三类节点(计算机或进程)组成,即:管理节点:用于为整个集群的其他节点提供配置、管理、仲裁等功能。理论上,通过服务器提供服务就足够了。数据节点:MySQLCluster的核心,存储数据和日志,并为数据提供各种管理服务。当超过2个时,才能实现集群的高可用保证。当DB节点数量增加时,集群的处理速度会变慢。SQL节点(API):用于访问MySQLCluster数据,对外提供应用服务。添加API节点会提升整个集群的并发访问速度和整体吞吐量。该节点可以部署在Web应用服务器上,也可以部署在专用服务器上,也可以部署在与DB同一台服务器上。NDB引擎MySQLCluster使用专用的基于内存的存储引擎——NDB引擎,具有速度快、无磁盘I/O瓶颈的优点,但由于是基于内存的,所以数据库的大小受内存总量的限制系统的如果运行NDB的MySQL服务器必须有足够的内存,比如4G、8G,甚至16G。NDB引擎是分布式的,可以配置在多台服务器上,实现数据的可靠性和可扩展性。理论上,通过配置两个NDB存储节点,可以实现整个数据库集群的冗余,解决单点故障问题。.缺陷基于内存,数据库的大小受限于集群总内存的大小基于内存,断电后数据可能会丢失,需要通过测试来验证。多个节点通过网络实现通信、数据同步、查询等操作,所以完整性受网速影响,所以速度比较慢2.2优点多个节点可以分布在不同的地理位置,所以也是一种分布式数据库方案。扩展性很好,可以通过增加节点来实现数据库集群的扩展。冗余性很好,多个节点上都有完整的数据库数据,任何一个节点宕机都不会造成服务中断。实现高可用的成本比较低,不像传统的高可用方案需要共享存储设备和专用软件来实现,NDB只要有足够的内存就可以实现。本文将搭建一个简化的MySQLCluster系统,配置方法中的所有命令均以root账户运行。这个MySQL集群包括一个管理节点、两个数据节点和两个SQL节点。这五个节点将分别安装在五个虚拟机上。虚拟机的名称和IP如下:1.公共配置请在三台虚拟机上分别配置这里的配置项。1、安装虚拟机虚拟机操作系统安装x86_64版本的CentOS6.4,使用NAT网络,同时安装vmware-tools。具体安装方法这里就不详述了。2、复制mysqlcluster,下载以下版本的MySQL-Cluster:http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar将下载.gz得到的压缩包复制到虚拟机的/root/Downloads目录下,然后在shell中运行以下命令:cd/root/Downloadstar-xvzfmysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64。tar.gzmvmysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64/usr/local/mysql3。关闭安全策略并关闭iptables防火墙(或打开防火墙的1186和3306端口),在shell中运行如下命令:chkconfig--level35iptablesoff关闭SELinux,在Shell中运行如下命令:gedit/etc/selinux/config将config文件中的SELINUX项改为disabled,修改后的config文件内容如下:disabled#SELINUXTYPE=cantakeoneofthesetwovalues:#targeted-Targetedprocessesareprotected,#mls-MultiLevelSecurityprotection.SELINUXTYPE=targeted***重新启动系统#p#二、配置管理结束点(192.168.124.141)1.配置config.ini配置文件运行如下shell中的命令:mkdir/var/lib/mysql-clustercd/var/lib/mysql-clustergeditconfig.ini配置文件config.ini内容如下:[ndbddefault]NoOfReplicas=2DataMemory=80MIndexMemory=18M[ndb_mgmd]NodeId=1hostname=192.168.124.141datadir=/var/lib/mysql-cluster[ndbd]NodeId=2hostname=192.168.124.142datadir=/usr/local/mysql/data[ndbd]NodeId=3hostname=192.168.124.143datadir=/usr/local/mysql/data[mysqld]NodeId=4主机名=192.168。124.144[mysqld]NodeId=5主机名=192.168.124.1452。安装管理节点安装管理节点不需要mysqld二进制文件,只需要MySQLCluster服务端程序(ndb_mgmd)和监控客户端程序(ndb_mgm)在shell中运行以下命令:cp/usr/local/mysql/bin/ndb_mgm*/usr/local/bincd/usr/local/binchmod+xndb_mgm*3。配置数据节点(192.168.124.142、192.168.124.143)1。添加mysql组和用户在shell中运行以下命令:groupaddmysqluseradd-gmysqlmysql2。配置my.cnf配置文件在shell中运行如下命令:gedit/etc/my.cnf配置文件my.cnf内容如下:[mysqld]basedir=/usr/local/mysqldatadir=/usr/local/mysql/datasocket=/usr/local/mysql/sock/mysql.sockuser=mysql#Disablingsymbolic-linksisrecommendedtopreventassortedsecurityriskssymbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid[mysql_cluster]ndb-connectstring=192.168.124.1413。要创建系统数据库,请在shell中运行以下命令:cd/usr/local/mysqlmkdirsockscripts/mysql_install_db--user=mysql--basedir=/usr/local/mysql--datadir=/usr/local/mysql/data4。设置数据目录,在shell中运行如下命令:chown-Rroot.chown-Rmysql.mysql/usr/local/mysql/datachown-Rmysql.mysql/usr/local/mysql/sockchgrp-Rmysql.5。配置MySQL服务在shell中运行以下命令:cpsupport-files/mysql.server/etc/rc.d/init.d/chmod+x/etc/rc.d/init.d/mysql.serverchkconfig--addmysql.server#p#4.配置SQL节点(192.168.124.144,192.168.124.145)1.添加mysql组和用户,在shell中运行如下命令:groupaddmysqluseradd-gmysqlmysql2。配置my.cnf配置文件,在shell中运行如下命令:gedit/etc/my.cnf配置文件my.cnf内容如下:[client]socket=/usr/local/mysql/sock/mysql.sock[mysqld]ndbclusterdatadir=/usr/local/mysql/datasocket=/usr/local/mysql/sock/mysql.sockndb-connectstring=192.168.124.141[mysql_cluster]ndb-connectstring=192.168.124.1413。要创建系统数据库,请在shell中运行以下命令:cd/usr/local/mysqlmkdirsockscripts/mysql_install_db--user=mysql--basedir=/usr/local/mysql--datadir=/usr/local/mysql/data4。设置数据目录,在shell中运行如下命令:chown-Rroot.chown-Rmysql.mysql/usr/local/mysql/datachown-Rmysql.mysql/usr/local/mysql/sockchgrp-Rmysql.5。配置MySQL服务在shell中运行以下命令:cpsupport-files/mysql.server/etc/rc.d/init.d/chmod+x/etc/rc.d/init.d/mysql.serverchkconfig--addmysql.server5.集群环境启动注意启动顺序:首先是管理节点,然后是数据节点,***是SQL节点1、启动管理节点,在shell中运行如下命令:ndb_mgmd-f/var/lib/mysql-cluster/config.ini也可以使用ndb_mgm监控客户端,如下:ndb_mgm2。启动数据节点***Start,需要加上--initial参数来初始化NDB节点。在后续的启动过程中,不能添加该参数,否则ndbd程序会将之前创建的数据文件和日志文件全部清空,进行恢复。/usr/local/mysql/bin/ndbd--initial如果不是***启动的,执行以下命令。/usr/local/mysql/bin/ndbd3.启动SQL节点如果MySQL服务未运行,请在shell中运行以下命令:/usr/local/mysql/bin/mysqld_safe--user=mysql&4。启动测试查看管理节点,启动成功6.集群测试1.测试1现在我们在其中一个SQL节点上创建相关数据库,然后到另一个SQL节点上看数据是否同步。在SQL节点1(192.168.124.144)上执行:shell>/usr/local/mysql/bin/mysql-uroot-pmysql>showdatabases;mysql>createdatabaseaa;mysql>useaa;mysql>CREATETABLEctest2(iINT)ENGINE=NDB;//这里必须指定数据库表的引擎为NDB,否则同步失败mysql>INSERTINTOctest2()VALUES(1);mysql>SELECT*FROMctest2;然后在SQL节点2上查看数据是否已经同步经测试,在非master上创建数据,可以同步到master上查看表的引擎是否为NDB,>showcreatetable表名;2.测试2关闭一个数据节点,在另一个节点写入输入,打开关闭的节点,看数据是否同步。先重启数据节点1,然后向节点2添加数据,SQL节点2(192.168.124.145)上的操作如下:mysql>createdatabasebb;mysql>usebb;mysql>CREATETABLEctest3(iINT)ENGINE=NDB;mysql>useaa;mysql>INSERTINTOctest2()VALUES(3333);mysql>SELECT*FROMctest2;等待数据节点1启动,启动数据节点1的服务#/usr/local/mysql/bin/ndbd--initial#servicemysqldstart然后登录查看数据#/usr/local/mysql/bin/mysql-uroot–p可以看到数据已经同步了,说明数据可以双向同步。七、关闭集群1、关闭管理节点和数据节点,在管理节点(ClusterMgm--134)执行即可:shell>/usr/local/mysql/bin/ndb_mgm-eshutdownshowsConnectedtoManagementServerat:localhost:11862NDBClusternode(s)haveshutdown.Disconnectingtoallowmanagementservertoshutdown.2.然后关闭Sql节点(135,136),分别在两个节点运行:shell>/etc/init.d/mysql.serverstopShuttingdownMySQL...成功!注意:再次启动集群,按照第五部分的启动步骤即可,但本次启动数据节点时不要添加“-initial”参数。
