基于docker搭建mycat读写分离架构

2017-06-19  本文已影响233人  hjqjk

前言

最近在学docker,应业务需求,要研究mycat的使用,为了方便学习测试,就想着用docker的镜像和容器来构造所有的组件。

mysql主从架构搭建

创建总目录:

mkidr mycat-ms
cd mycat-ms

在宿主机创建本地目录,印射为容器的数据目录,方便以后查看数据内容。

mkdir mysql-ms/data/{master,slave} -p

在宿主机创建配置文件,印射为容器的配置文件。可通过本地修改配置文件,达到修改容器配置文件的效果。

master配置文件: mysql-ms/etc/master.cnf

[mysqld]
# 开启logbin
log-bin = mysql-bin
binlog_format = mixed

# 设置唯一服务ID,要跟slave不同
server-id=1

datadir = /var/lib/mysql

slave 配置文件: mysql-ms/etc/slave.cnf

[mysqld]
# 开启log-bin
log-bin = mysql-bin
binlog_format = mixed

# 开启relay-log
relay-log = mysql-relay

# 设置唯一服务ID,要跟master不同
server-id = 3

datadir = /var/lib/mysql

创建网络mscat,用于各容器之间通信

docker network create mscat

分别启动master、slave容器(用的是docker官方提供的 mysql5.6.36 的镜像)

docker run --name mysql-master -v $PWD/mysql-ms/etc/master.cnf:/etc/mysql/my.cnf -v $PWD/mysql-ms/data/master:/var/lib/mysql --net=mscat -e MYSQL_ROOT_PASSWORD='yueioe123' -d mysql:5.6.36
docker run --name mysql-slave -v $PWD/mysql-ms/etc/slave.cnf:/etc/mysql/my.cnf -v $PWD/mysql-ms/data/slave:/var/lib/mysql --net=mscat -e MYSQL_ROOT_PASSWORD='yueioe123' -d mysql:5.6.36

master上,创建主从复制账号:

docker exec -ti mysql-master mysql -uroot -p'yueioe123' -e "CREATE USER 'repl'@'%' IDENTIFIED BY 'repl123';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';"

在master上,获取复制开始的二进制文件和位置(File和Position)

# docker exec -ti mysql-master mysql -uroot -p'yueioe123' -e "show master status\G" 
*************************** 1. row ***************************
             File: mysql-bin.000005
         Position: 441
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:

在slave上,连接master:

# 连接master
docker exec -it mysql-slave mysql -uroot -p'' -e "CHANGE MASTER TO MASTER_HOST='mysql-master',MASTER_USER='repl',MASTER_PASSWORD='repl123',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=441;"
# 启动 slave 线程
docker exec -it mysql-slave mysql -uroot -pyueioe123 -e "start slave;"

查看主从是否成功:

# docker exec -it mysql-slave mysql -uroot -pyueioe123 -e "show slave status\G"
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
# docker exec -ti mysql-master mysql -uroot -pyueioe123 -e "create database test;"
# docker exec -ti mysql-slave mysql -uroot -pyueioe123 -e "show databases;"

+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+

mycat读写分离

mycat是用java语言编写的,需要jdk的支持,这次将安装mycat1.6,jdk版本需要1.7以上

上一篇下一篇

猜你喜欢

热点阅读