MySQL-Cluster数据库集群测验

作者: Oomcc | 来源:发表于2017-08-25 13:31 被阅读370次

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

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

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

    结构图示:

    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管理服务

    效果实例:

    关闭管理进程management1 节点管理进程关闭情况下mysql服务状态:自动同步,正常服务

    相关文章

      网友评论

        本文标题:MySQL-Cluster数据库集群测验

        本文链接:https://www.haomeiwen.com/subject/lwzydxtx.html