MySQL-Cluster数据库集群测验

云:白驹苍狗,聚散离合,变化万千。

这是我没接触云计算之前,大自然的云在我心中的形象,倏忽缥缈,形态万千。在接触云计算这个词之后,更是觉得有太多相似之处,聚散离合之间有无尽可能创造出新的形态。我对于服务集群的概念,就像是缩小版的云计算服务,不过是对企业内部的服务而已。

对于任何一个互联网相关的公司,数据往往是核心,数据服务的稳定也是重中之重。随着现在公司业务上升,数据库服务压力也是急剧增加,频繁出现数据库宕机的情况。所以想要采用数据集群的方式去分摊数据库压力,解决这个技术瓶颈。(当然,数据库服务压力过大,跟缓存层设计,以及代码查询实现方式都有解不开的关系,这一部分也是解决问题的关键点)以下测验在本地docker环境下实现,并未上线,还请各位知悉。

结构图示:

MySQL-Cluster数据库集群测验_第1张图片
mysql-cluster常用结构图

1.数据节点管理器(不影响其他服务);
2.数据库服务进程(可扩展);
3.数据节点(可扩展)。
注:2/3 部分都是可以动态扩展,1 的运行状态不影响2/3提供服务;

服务启动顺序

ndb_mgmd  >>>  数据节点ndbd   >>>  mysql服务

实现细节:

系统环境:Ubuntu14.04
MySQL Cluster 7.5(mysql5.7.19)
Docker version 1.12.4
docker-compose version 1.14.0

1.mysql-cluster镜像加载

docker pull mysql/mysql-cluster

2.创建专用虚拟网络cluster

docker network create cluster --subnet=192.168.0.0/16

3.启动数据管理节点ndb_mgmd

docker run -d --net=cluster --name=management1 --ip=192.168.0.2 mysql/mysql-cluster ndb_mgmd

4.启动数据节点ndbd

docker run -d --net=cluster --name=ndb1 --ip=192.168.0.3 mysql/mysql-cluster ndbd
docker run -d --net=cluster --name=ndb2 --ip=192.168.0.4 mysql/mysql-cluster ndbd

5.启动mysql服务节点

docker run -d --net=cluster --name=mysql1 --ip=192.168.0.10 -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql/mysql-cluster mysqld

6.检查所有服务运行状态

docker ps -a

7.检查数据节点连接状态

docker run -it --net=cluster mysql/mysql-cluster ndb_mgm
Starting ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management
Server at: 192.168.0.2:1186
Cluster Configuration
---------------------
[ndbd(NDB)]    2 node(s)
id=2    @192.168.0.3  (mysql-5.7.18 ndb-7.6.2, Nodegroup: 0, *)
id=3    @192.168.0.4  (mysql-5.7.18 ndb-7.6.2, Nodegroup: 0)
[ndb_mgmd(MGM)]    1 node(s)
id=1    @192.168.0.2  (mysql-5.7.18 ndb-7.6.2)
[mysqld(API)]    1 node(s)
id=4    @192.168.0.10  (mysql-5.7.18 ndb-7.6.2)

到这里服务已经启动,但是想要本地访问还需要设置mysqld 服务允许远程登录。
连接mysql

###查看随机登录密码
docker logs mysql1 2>&1 | grep PASSWORD
###连接mysql服务-mysql1
docker exec -it mysql1 mysql -uroot -p
###修改登录密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
###设置远程登录访问
GRANT select on *.* to 'root'@'%' identified by "defaultpass";
FLUSH privileges;

动态扩展

第一步:确保数据节点和mysql节点运行正常,在管理节点服务器上杀掉管理节点的进程(此时只杀掉管理节点进程,不会对NDB节点和mysql节点产生影响,数据库功能一样可以进行运行)。

第二步:如果只是调整当前数据库的配置参数,可以直接修改/etc/my.cnf,修改完成之后保存,然后执行管理节点启动命令ndb_mgmd -f /etc/mysql-cluster.cnf启动管理节点即可,已经修改的内容即可生效。

如果是需要添加数据节点或者mysql节点的话。同样需要先停掉管理节点的管理进程,原有的数据节点和mysql节无需进行任何操作。直接在管理服务器上修改/etc/mysql-cluster.cnf文件。
比如需要新增两台服务器192.168.0.5、192.168.0.6来做数据节点,192.168.0.6来做mysql服务节点,修改管理节点上的/etc/mysql-cluster.cnf文件如下:

docker run -d --net=cluster --name=mysql2 --ip=192.168.0.20 -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql/mysql-cluster mysqld

注意事项:只需要设置数据节点的配置文件与mysql1的相同即可,配置文件如下
/etc/mysql-cluster.cnf
++++++++++ADD MYSQLD++++++++++
[ndbd]
NodeId=3
hostname=192.168.0.4
datadir=/var/lib/mysql

[ndbd]
NodeId=4
hostname=192.168.0.5
datadir=/var/lib/mysql

++++++++++++++END++++++++++++
++++++++++ADD MYSQLD++++++++++

[mysqld]
NodeId=7
hostname=192.168.0.20

++++++++++++++END++++++++++++

附:使用dokcer-compose管理服务

效果实例:

MySQL-Cluster数据库集群测验_第2张图片
关闭管理进程management1
MySQL-Cluster数据库集群测验_第3张图片
节点管理进程关闭情况下mysql服务状态:自动同步,正常服务

你可能感兴趣的:(MySQL-Cluster数据库集群测验)