美文网首页
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