前言
随着时代的发展,新技术的层出不穷。Mysql数据库在业务量不大的时候,我们会使用主从复制的方法实现服务器数据同步,一主多从或者是双主等,但是虽然进行了读写分离,但是对于读的方法限制还是比较大,所以解决数据同步的问题就是数据库集群的意义。这里使用mysql官网提供的mysql-cluster实现集群,主要供技术学习及研究使用。
mysql cluster简介
1、mysql-cluster已经包含了mysql,这里使用的mysql-cluster7.5,官方说明包含的是mysql版本是5.7。所以不需要使用别的msyql的安装包安装数据库。同时注意mysql5.7的版本在安装的命令和配置上面和之前的版本有很大的不同,所以网上有很多mysql-cluster7.5之前的版本,所包含的mysql版本不同,所以安装方法不同。
2、管理节点,mysql-cluster管理节点负责管理、配置、监控整个集群。
3、数据节点,使用内存存放数据,保存进数据节点的数据都会自动复制并存储到其他数据节点。
4、mysql节点,也叫数据库节点,和我们平时使用的mysql相同,作为数据库使用。被数据节点访问。
mysql cluster架构图及说明
环境中的配置如图所示,因为虚拟机占用内存较大,只使用了3台服务器,在实际情况中最好将数据节点和mysql节点分开。在实际中负载均衡服务还需要做备份,因为万一负载均衡服务器宕机将会导致所有数据节点都无法访问,所以需要对负载均衡服务器备份,有条件的话,分开管理节点和负载均衡器。
192.168.74.21 管理节点
192.168.74.22 数据节点、sql节点
192.168.74.23 数据节点、sql节点
mysql cluster安装介质
CentOS操作系统版本:CentOS-7-x86_64-DVD-1511.iso
mysql cluster版本:mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz
mysql cluster安装准备工作
安装之前,如果之前安装过mysql,那么需要删除相应的各种mysql文件,删除之前请停止mysql服务。并且不要忘记删除my.cnf这些配置文件。确保删除干净。不然可能会和后面的安装有冲突。如果是实验,关闭防火墙,实际中,防火墙打开对应端口(注意实际中需要使用的端口不只有3306端口,还有同步需要使用的1186端口)。保证服务器之前能互相访问,能ping通。保证固定的ip地址。保证没有别的程序占用需要使用的端口。如3306等。这些都确认完毕后再进行安装。
关闭防火墙、设置主机名
systemctl stopfirewalld.service
systemctl disable firewalld.service
vi /etc/hosts
192.168.74.21 hdp21
192.168.74.22 hdp22
192.168.74.23 hdp23
将下载后的包上传至服务器/usr/local下
cd /usr/local
tar xvfmysql-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
下面是配置文件,根据自己的需求修改。
[ndbd default]
NoOfReplicas=2
DataMemory=512M
IndexMemory=18M
[ndb_mgmd]
HostName=192.168.74.21
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=192.168.74.22
DataDir=/var/lib/mysql-cluster
[ndbd]
HostName=192.168.74.23
DataDir=/var/lib/mysql-cluster
[mysqld]
HostName=192.168.74.22
[mysqld]
HostName=192.168.74.23
使用配置文件初始化管理节点
/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进去管理了
cd /usr/local/bin
ndb_mgm
ndb_mgm>show
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下
解压
cd /usr/local
tar xvfmysql-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官网的对应版本的安装命令。)
进入刚才创建的目录的bin目录下初始化,正常安装mysql如何初始化就如何进行安装就可以了,这里还可以设置安装数据库的data目录等参数。
cd /usr/local/mysql/bin
./mysqld --initialize--user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
如果初始化成功之后,系统会提示一个随机生成的数据库密码,此时需要记住这个密码,之后登录数据库需要使用这个密码。
192.168.74.22 p.(V9O+2*etk #记录192.168.74.22的初始化密码
192.168.74.23 vKeCI;+4Igl? #记录192.168.74.23的初始化密码
修改权限
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 --addmysql.server
配置数据节点
vi /etc/my.cnf
[client]
port = 3306
socket =/tmp/mysql.sock
[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
user=root
port=3306
socket=/tmp/mysql.sock
server-id = 1
ndbcluster
ndb-connectstring=192.168.74.21
[mysql_cluster]
ndb-connectstring=192.168.74.21
其中的IP为管理节点的IP
启动集群节点上面的服务启动mysql(成功会有success)
/etc/init.d/mysql.serverstart
启动mysql成功之后请自己登录进mysql内然后进行密码修改等操作,就和正常安装完成mysql的操作一样。需要注意的是,集群数据库的密码需要相同。
./mysql -uroot -p #登录mysql,密码粘贴上面记录的初始密码
setpassword=password('123456'); #修改密码
./mysql -uroot -p123456 #测试修改后的密码是否能够登录
启动ndbd
/usr/local/mysql/bin/ndbd–initial
如果出现下述现象就成功了
最后当所有的节点配置完成,回到管理节点,使用上述说过的show查看,如下的类似显示,证明已经连接完成
到这,数据节点跟sql节点配置就完成了,但是管理节点查看的状态可能还是有些连接不上的,比如上图的sql节点就没有连上,这个时候不要慌,先把集群关闭了,再启动一次就行了
关闭管理节点:
ndb_mgm -e shutdown
关闭SQL节点:
/etc/init.d/mysql.serverstop
启动管理节点:
/usr/local/bin/ndb_mgmd-f /var/lib/mysql-cluster/config.ini
cd /usr/local/bin
ndb_mgm>show
启动数据节点:
/usr/local/mysql/bin/ndbd
启动SQL节点:
/etc/init.d/mysql.serverstart
都启动后结果是下面那样就是成功了
mysql cluster测试
修改mysql密码统一,修改mysql的访问权限,使外部ip能远程访问mysql
cd /usr/local/mysql/bin
GRANT ALL PRIVILEGES ON*.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
然后创建在一台上面创建数据库,看另一台是否被同步,然后创建表,然后新增删除等等。
下列命令都在192.168.74.22上执行,同时在192.168.74.22和192.168.74.23上查看
create database hdp;
show databases;
需要注意的是,创建表的时候必须选择表的引擎为NDBCLUSTER,否则表不会进行同步
use hdp;
CREATE TABLE student(age INT) ENGINE=NDBCLUSTER;
下面是测试的截图
同样的,插入数据,增加、删除、更改库表都会同步,这里就不一一测了。
下面测试其中一台(192.168.74.23)宕机的情况,这里采取停掉服务的方式
/etc/init.d/mysql.serverstop
接下来新增一个表
CREATE TABLE student2(age INT) ENGINE=NDBCLUSTER;
再次启动服务
/etc/init.d/mysql.serverstart
mysql cluster集群启动和关闭
启动mysql集群。启动顺序为:管理节点→数据节点→SQL节点。
启动的命令上面都有,删去--initial即可。
管理节点:
/usr/local/bin/ndb_mgmd-f /var/lib/mysql-cluster/config.ini
cd /usr/local/bin
ndb_mgm>show
数据节点:
/usr/local/mysql/bin/ndbd
SQL节点:
/etc/init.d/mysql.server start
关闭时只需要关闭管理节点,后面的数据节点会同时被关闭,mysql就和原来一样即可
管理节点关闭命令:
ndb_mgm -e shutdown
(执行完成之后管理节点会关闭,数据节点也会关闭,但SQL节点不会,也就是数据库服务需要手动到每一台服务器上停止以保证数据同步)
关闭SQL节点:
/etc/init.d/mysql.serverstop
1、在实际中需要分开数据节点和sql节点。
2、安装最好参考官网的文档进行配置安装,网上的博客安装的可能为旧版本,命令可能不同,连我自己现在写的不知道你看的时候是不是官网又出了新版本,可能在某些地方进行了改动。
3、配置文件过于简单,还有很多配置会在实际中被使用到,需要参考文档进行添加。(my.cnf文件的配置需要根据你的实际进行修改)
4、经过测试各种节点断开、服务器停止、数据库服务停止、未会出现数据异常等特殊情况,但是宕机的机器恢复后如果有删库操作,不会同步,其他删表、删数据不会影响。