当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求。因为负载均衡的前提是,各个服务器的数据库是数据同步的。在业务量不大的时候,我们会使用主从复制的方法实现服务器数据同步,一主多从或者是双主等,但是虽然进行了读写分离,但是对于读的方法限制还是比较大,所以解决数据同步的问题就是数据库集群的意义。这里使用mysql官网提供的mysql-cluster实现集群。
为了给初学搭建者一个简单明了的思路,我们去除复杂的功能,将数据节点和mysql节点放在同一台虚拟机上。管理节点可以实现负载均衡。数据节点可以实现数据相同备份。
1、管理节点,mc管理节点负责管理、配置、监控整个集群。
2、数据节点,使用内存存放数据,保存进数据节点的数据都会自动复制并存储到其他数据节点。
3、mysql节点,也叫数据库节点,和我们平时使用的mysql相同,作为数据库使用。被数据节点访问。
1.下载mysql cluster,推荐使用下面的镜像,下载速度比官网快一些
http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/
ps:我下载的版本是mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz
注意看清是64位版本的,别下载错了
2.准备好三台虚拟机,并且保障三台机器能够互相ping通。(以下为我的虚拟机ip)
管理节点:192.168.33.40,数据节点1(mysql节点1):192.168.33.41,数据节点2(mysql节点2):192.168.33.42
将安装包上传并解压到 /usr/local下
# tar -zxvf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz -C /usr/local
将需要的文件取出
# 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
# vim /var/lib/mysql-cluster/config.ini (以下可以直接复制)
[NDBD DEFAULT]
NoOfReplicas=2 #定义在Cluster环境中相同数据的份数,最大为4
DataMemory=200M #每个数据节点中给数据分配的内存
IndexMemory=20M #每个数据节点中给索引分配的内存
MaxNoOfAttributes=20480 #该参数用于设置簇中触发程序对象的最大数目。该参数的默认值为768,不修改建表时可能会报708错误
[NDB_MGMD]
NodeId=1
#设置管理节点服务器
HostName=192.168.33.40
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=2
#设置存储节点服务器(NDB节点)
HostName=192.168.33.41
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=3
#第二个NDB节点
HostName=192.168.33.42
DataDir=/usr/local/mysql/data
[MYSQLD]
NodeId=4
HostName=192.168.33.41
[MYSQLD]
NodeId=5
HostName=192.168.33.42
使用配置文件初始化管理节点
# /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节点
tar -zxvf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz -C /usr/local #首先解压到usr/local
cd /usr/local
mv mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64 mysql (重命名)
mkdir data 创建data文件夹
新增用户组mysql和用户msyql
# groupadd mysql
# useradd -g mysql -s /bin/false mysql
新建文件夹并赋予权限
# mkdir /var/lib/mysql-cluster
# chown root:mysql /var/lib/mysql-cluster
# 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/
# cpsupport-files/mysql.server /etc/init.d/mysqld (可以使用service mysqld start了)
# chmod +x /etc/rc.d/init.d/mysql.server
# chkconfig --add mysql.server
chown -R mysql.mysql .
vim /etc/my.cnf(以下可直接复制)
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
user=mysql
port = 3306
socket=/tmp/mysql.sock
ndbcluster
max_connect_errors=100
ndb-connectstring=192.168.33.40
connect_timeout=300
[mysql_cluster]
ndb-connectstring=192.168.33.40
启动ndbd# /etc/init.d/ndbd --initial如果上述不行使用绝对路径的这个:/usr/local/mysql/bin/ndbd --initial
最后当所有的节点配置完成,回到管理节点,使用上述说过的show查看,如下的类似显示,证明已经连接完成
ndb_mgm> show
修改密码:
alter user 'root'@'localhost' identified by 'youpassword';
./mysql -u root -pINSERT INTO city VALUES(3, 'city3');
创建完以后发现在第二台虚拟机上的数据,在第三台虚拟机上也有。已经实现了基本功能。