云:白驹苍狗,聚散离合,变化万千。
这是我没接触云计算之前,大自然的云在我心中的形象,倏忽缥缈,形态万千。在接触云计算这个词之后,更是觉得有太多相似之处,聚散离合之间有无尽可能创造出新的形态。我对于服务集群的概念,就像是缩小版的云计算服务,不过是对企业内部的服务而已。
对于任何一个互联网相关的公司,数据往往是核心,数据服务的稳定也是重中之重。随着现在公司业务上升,数据库服务压力也是急剧增加,频繁出现数据库宕机的情况。所以想要采用数据集群的方式去分摊数据库压力,解决这个技术瓶颈。(当然,数据库服务压力过大,跟缓存层设计,以及代码查询实现方式都有解不开的关系,这一部分也是解决问题的关键点)以下测验在本地docker环境下实现,并未上线,还请各位知悉。
结构图示:
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++++++++++++