当你的业务到达必定的当量,确定须要必定数量的数据库来负载均衡你的数据库请求,我在以前的博客中已经说明了,如何实现负载均衡,可是还有一个问题就是数据同步,由于负载均衡的前提就是,各个服务器的数据库是数据同步的。在业务量不大的时候,咱们会使用主从复制的方法实现服务器数据同步,一主多从或者是双主等,可是虽然进行了读写分离,可是对于读的方法限制仍是比较大,因此解决数据同步的问题就是数据库集群的意义。我这里使用mysql官网提供的mysql-cluster实现集群。(到文章发布前的最新版本的安装教程,把网上踩的坑都踩过了一遍;)node
为了简单,我后面简称mysql-cluster为mc。mysql
一、mc已经包含了mysql,我下载的最新的mc7.5,官方说明包含的是mysql版本是5.7。因此不须要使用别的msyql的安装包安装数据库。同时注意mysql5.7的版本在安装的命令和配置上面和以前的版本有很大的不一样,因此网上有不少mc7.5以前的版本,所包含的mysql版本不一样,因此安装方法不一样。linux
二、管理节点,mc管理节点负责管理、配置、监控整个集群。sql
三、数据节点,使用内存存放数据,保存进数据节点的数据都会自动复制并存储到其余数据节点。数据库
四、mysql节点,也叫数据库节点,和咱们平时使用的mysql相同,做为数据库使用。被数据节点访问。服务器
我实验中的配置就是如图所示,由于虚拟机占用内存较大,只使用了3台服务器,在实际状况中最好将数据节点和mysql节点分开。在实际中负载均衡服务还须要作备份,由于万一负载均衡服务器宕机将会致使全部数据节点都没法访问,因此须要对负载均衡服务器备份,有条件的话,分开管理节点和负载均衡器。实验只实现整个数据库集群,负载均衡请参考以前的博客配置便可。架构
129的负载均衡能够参考 HAProxy实现mysql负载均衡 也可使用的别的负载均衡方案。负载均衡
首先下载mysql cluster,推荐使用下面的镜像,下载速度比官网快一些post
http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/
我下载的版本是mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz
注意看清是64位版本的,别下载错了
安装以前,若是以前安装过mysql,那么须要删除相应的各类mysql文件,删除以前请中止mysql服务。而且不要忘记删除my.cnf这些配置文件。确保删除干净。否则可能会和后面的安装有冲突。若是是实验,关闭防火墙,实际中,防火墙打开对应端口,{注意实际中须要使用的端口不仅有3306端口,还有同步须要使用的1186端口!!!}。保证服务器以前能互相访问,能ping通。保证固定的ip地址。保证没有别的程序占用须要使用的端口。如3306等。这些都确认完毕后再进行安装。须要linux基础的命令熟练,须要熟练安装mysql基本版本等操做,由于后序的一些操做我会简单描述,不作过多的说明了。
将下载后的包上传至服务器/usr/local下
解压
# tar xvf mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz
将须要的文件取出
# cd mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64
# cp bin/ndb_mgm* /usr/local/bin
# cd /usr/local/bin
# chmod +x ndb_mgm*
新建配置文件而且初始化管理节点
# mkdir /var/lib/mysql-cluster
# mkdir /usr/local/mysql
# vi /var/lib/mysql-cluster/config.ini
下面是配置文件,根据本身的需求修改,首先给出官网的默认配置文件,而后给出个人配置文件,根据我修改的修改便可,别的都可不动。
使用配置文件初始化管理节点
# /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
出现MySQL Cluster Management Server mysql-5.7.16 ndb-7.5.4
而后就能使用ndbd进去管理了(若是ndbd命令不行,就使用在/usr/local/bin目录下使用ndb_mgm命令)
# ndbd
ndb_mgm>show(使用show命令查看管理状况,当数据节点配置完毕以后,咱们再用这个命令查看和管理)
到此为止管理节点配置完毕,接下去配置数据和sql节点
如下的全部操做须要在全部的集群节点都要进行相同的操做
新增用户组mysql和用户msyql
# groupadd mysql
# useradd -g mysql -s /bin/false mysql
新建文件夹并赋予权限
# mkdir /var/lib/mysql-cluster
# chown root:mysql /var/lib/mysql-cluster
将下载后的包上传至服务器/usr/local下
解压
# tar xvf mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz
建立连接方便访问
# ln -s /usr/local/mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64 /usr/local/mysql
初始化数据库(这里要注意,若是你安装的版本和个人不一样,数据库初始化的命令使不一样的,不少以前的版本会使用:scripts/mysql_install_db --user=mysql来初始化,这个已经被mysql在新的版本中废弃了,因此须要使用下面的命令安装,若是你须要安装别的版本请参考mysql官网的对应版本的安装命令。)
进入刚才建立的目录下
# cd /usr/local/mysql
若是下方这个命令没法使用,那么就进入bin目录下使用./mysqld --initialize进行初始化,总之正常安装mysql如何初始化就如何进行安装就能够了,这里还能够设置安装数据库的data目录等参数这里就很少解释了,网上安装mysql5.7的教程不少。
# mysqld --initialize
若是初始化成功以后,系统会提示一个随机生成的数据库密码,此时须要记住这个密码,以后登陆数据库须要使用这个密码!!!
修改权限
# chown -R root .
# chown -R mysql data
# chgrp -R mysql .
# cp support-files/mysql.server /etc/rc.d/init.d/
# chmod +x /etc/rc.d/init.d/mysql.server
# chkconfig --add mysql.server
配置数据节点
# vi /etc/my.cnf
其中的IP为管理节点的IP
启动集群节点上面的服务启动mysql(成功会有success)# /etc/init.d/mysql.server start
启动mysql成功以后请本身登陆进mysql内而后进行密码修改等操做,就和正常安装完成mysql的操做同样。须要注意的是,集群数据库的密码须要相同哦!
启动ndbd# /etc/init.d/ndbd --initial若是上述不行使用绝对路径的这个:# /usr/local/mysql/bin/ndbd --initial若是出现下述现象就成功了
2017-03-06 14:04:07 [ndbd] INFO -- Angel connected to '192.168.75.129:1186'
2017-03-06 14:04:07 [ndbd] INFO -- Angel allocated nodeid: 2
最后当全部的节点配置完成,回到管理节点,使用上述说过的show查看,以下的相似显示,证实已经链接完成
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.75.128)
id=3 @192.168.75.130 (mysql-5.1.63 ndb-7.1.23, starting, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.75.129 (mysql-5.7.16 ndb-7.5.4)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)
修改mysql密码统一,修改mysql的访问权限,使外部ip能远程访问mysql
而后建立在一台上面建立数据库,看另外一台是否被同步,而后建立表,而后新增删除等等。
惟一须要注意的是,建立表的时候必须选择表的引擎为NDBCLUSTER,不然表不会进行同步
下面是测试的截图
若是使用sql建立表,命令为:CREATE TABLE student (age INT) ENGINE=NDBCLUSTER
启动mysql集群。启动顺序为:管理节点→数据节点→SQL节点。
启动的命令上面都有,删去--initial便可
关闭时只须要关闭管理节点,后面的数据节点会同时被关闭,mysql就和原来同样便可
管理节点关闭命令:ndb_mgm -e shutdown
(执行完成以后管理节点会关闭,数据节点也会关闭,但SQL节点不会,也就是数据库服务须要手动到每一台服务器上中止以保证数据同步)
一、在实际中须要分开数据节点和sql节点。
二、安装最好参考官网的文档进行配置安装,网上的博客安装的可能为旧版本,命令可能不一样,连我本身如今写的不知道你看的时候是否是官网又出了新版本,可能在某些地方进行了改动。
三、配置文件过于简单,还有不少配置会在实际中被使用到,须要参考文档进行添加。(my.cnf文件的配置须要根据你的实际进行修改)
四、架构简单,实验足够,现实远不足。(须要使用备份数据库,要备份管理节点等)
五、还未测试各类节点断开、服务器中止、数据库服务中止、是否会出现数据异常等等特殊状况,还须要进行考虑。由于一旦数据不一样步,想要恢复数据会比较麻烦。(以后通过测试,数据库服务中止以后,或者服务器中止以后,只要管理节点正常,数据会以后在开启以后同步过去,可是为了防止万一仍是须要作好数据备份工做)
最后给出mysql官网的参考文档:https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-installation.html
官网安装步骤可能和个人不一样,我尽量一台弄好再弄另外的,官网有配置和启动进行划分,每台同时进行,因此须要看清楚。
实现集群的方式不止这一种,网上给出了几种方式,这里只作参考: