美文网首页
MySQL的Docker主从(Master-Slave)集群部署

MySQL的Docker主从(Master-Slave)集群部署

作者: 何弘宇 | 来源:发表于2018-07-22 17:18 被阅读0次

    MySQL的集群主要有两个成熟方案:分布式集群主从集群。 本文主要介绍MySQL的主从集群方案在Docker下的部署。
    Docker下的MySQL主从集群部署,与直接通过启动MySQL server来部署是类似的。要注意的三个点是,配置文件、数据目录的映射、以及replica用户的创建。
    以下将介绍最简单的单Master-单Slave的主从集群部署,需要增加Slave时,配置是类似的。

    0x01 准备工作

    在开始实操之前,我们首先建立一个工作目录,用于配置文件的存放和DB文件的存放:
    > mkdir master_slave && cd master_slave

    配置文件

    首先新建两个配置文件,这两个配置文件在之后均会被重命名为my.cnf,被mysqld所读取:

    Master配置

    新建master.cnf:

    > vi master.cnf
    

    master.cnf配置文件内容如下:

    [mysqld]
    server-id=1
    binlog-ignore-db = "mysql"
    binlog-format = mixed
    log-bin=mysql-bin
    datadir=/var/lib/mysql
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1
    

    Slave配置

    新建slave.cnf:

    > vi slave.cnf

    slave.cnf配置文件内容如下:

    [mysqld]
    server-id=2
    binlog-format=mixed
    log_bin=mysql-bin
    relay-log=mysql-relay-bin
    log-slave-updates=1
    read-only=1
    

    数据存放目录

    在工作目录下新建两个目录master_dbslave_db分别用于存放Master和Slave的数据。

    > mkdir master_db && mkdir slave_db

    执行完以上命令后,工作目录下应有以下文件和目录:

    > ls
    master.cnf master_db  slave.cnf  slave_db
    

    创建子网

    启动两个容器之前,我们先为集群创建一个子网段,用于之后指定连个容器的静态IP和网段。

    > docker network create --subnet=172.18.0.0/16 mysql_cluster
    61692c855b9f405f69e42af272b6985b4188d404ee042c5ff7bef9d8d216264e
    
    

    出现返回的子网ID值,说明子网创建成功。可运行以下命令检查子网创建是否成功:

    > docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    cd02d1cfbf34        bridge              bridge              local
    ddbfa3497c79        host                host                local
    61692c855b9f        mysql_cluster       bridge              local
    c87cd569f510        none                null                local
    

    可以看到,我们名为mysql_cluster的子网已经创建成功。

    0x02 启动

    执行以下命令之前,请先确认当前工作目录为之前创建的master_slave下。

    启动Master节点

    执行以下命令,启动Master节点:

    > docker run -d --name=master \
    -v $PWD/master_db:/var/lib/mysql \
    -v $PWD/master.cnf:/etc/mysql/my.cnf \
    -e MYSQL_ROOT_PASSWORD=root \
    --net=mysql_cluster \
    --ip=172.18.0.2 \
    mysql:5.7
    

    启动Slave节点:

    执行以下命令,启动Slave节点:

    > docker run -d --name=slave \
    -v $PWD/slave_db:/var/lib/mysql \
    -v $PWD/slave.cnf:/etc/mysql/my.cnf \
    -e MYSQL_ROOT_PASSWORD=root \
    --net=mysql_cluster \
    --ip=172.18.0.3 \
    mysql:5.7
    

    建立repl账号

    执行以下命令,进入master容器,并执行mysql命令,连接master数据库。(默认密码已通过环境变量配置为root)

    > docker exec -it master mysql -u root -p
    

    连接数据库后,首先创建一个用于同步的账号repl, 密码为slave123slave的ip为172.18.0.3

    mysql> create user repl@172.18.0.3;
    mysql> grant replication slave on *.* to repl@172.18.0.3 identified by 'slave123';
    mysql> flush privileges;
    

    创建完repl账户后,顺便执行show master status命令,记录下查询到的信息。后面配置slave时将会使用到。

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000009 |     1389 |              | mysql            |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

    配置Slave

    执行以下命令,进入slave容器,并执行mysql命令,连接slave数据库。(默认密码已通过环境变量配置为root)

    > docker exec -it slave mysql -u root -p
    

    接着执行以下sql语句,配置slave的master:

    mysql> CHANGE MASTER TO MASTER_HOST='172.18.0.2',MASTER_USER='repl',MASTER_PASSWORD='slave123', MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=1389;
    

    注意,以上信息,请根据之前查询到的master status来配置。

    接着,激活slave:

    mysql> start slave;
    

    最后,查询slave状态:

    mysql> SHOW SLAVE STATUS \G;
    

    至此,我们的Mysql master-slave集群已经启动完成。

    参考资料

    MySQL 設定 Master-Slave Replication 同步

    个人博客文章地址

    MySQL的Docker主从(Master-Slave)集群部署详解

    相关文章

      网友评论

          本文标题:MySQL的Docker主从(Master-Slave)集群部署

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