Devops - 使用Docker构建MYSQL读写集群
OS Version: Window 10(专业版)
Docker Version: Version 17.03.1-ce-win12 (12058)
1.创建共享目录
Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。
为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。
1. Windoiw 环境需要先设置共享目录才可以挂载, Setting 选择 Share Driver. 选择一个磁盘进行共享.
2. 在磁盘上建立docker-share-data目录,并在其中创建chapter-1目录,chapter-1作为共享目录,在其中分别建立master和slave目录分别存放数据库集群数据
1. mkdir docker-share-data/chapter-1/master
2. mkdir docker-share-data/chapter-1/slave
2.创建Docker镜像
2.1 下载镜像
docker pull mysql:5.7
2.2 创建Master 容器
参数 | 作用
---|---
-name | 容器名称
-e MYSQL_ROOT_PASSWORD | 数据库root用户密码
-p 13306:3306 | 映射到本机的端口13306到容器3306
-v <本机的数据库存放目录>:/var/lib/mysql | 挂载数据
docker run --name mysql-master -p 13306:3306 -v d:/docker-share-data/chapter-1/master/data:/var/lib/mysql -v d:/docker-share-data/chapter-1/master/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=000000 -d mysql
2.4 创建slave容器
docker run --name mysql-slave -p 23306:3306 -v d:/docker-share-data/chapter-1/slave/data:/var/lib/mysql -v d:/docker-share-data/chapter-1/slave/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=000000 -d mysql
2.5 执行docker ps -a 命令可以查看刚刚创建的master容器
3.构建mysql主从结构
3.1 在d:/docker-share-data/chapter-1/master/conf.d 目录下,配置文件 my.cnf 添加
[mysqld]
log-bin=mysql-bin
server-id=1
3.2 在d:/docker-share-data/chapter-1/slave/conf.d 目录下,配置文件 my.cnf 添加
[mysqld]
log-bin=mysql-bin
server-id=2
3.3 分别启动 mysql-master/mysql-slave
docker start mysql-master
docker start mysql-slave
3.4 访问mysql-master数据库,查看Master信息(可以进入容器里面查看,也可以在宿主远程连接) 在命令行运行命令:
show master status;
3.5 访问mysql-slave数据库 (可以进入容器里面查看,也可以在宿主远程连接) 进行集群配置.
在命令行执行:
change master to master_host='172.17.0.2', master_user='root', master_password='000000', master_log_file='mysql-bin.000001', master_log_pos=154;
PS: master_host 可以通过如下命令查询
1. docker exec -it mysql-master bash
2. ip a
3.6 启动Slave
start slave;
3.7(创建好之后,会发现master和slave之间会同步,比如master中创建数据库,slave中也会自动创建,在master中更改数据,slave中也会自动修改)
如果想清理本地docker环境,确保后续实验的正确运行
在Windows上使用以下命令:
FOR /f "tokens=" %i IN ('docker ps -a -q') DO docker stop %i
FOR /f "tokens=" %i IN ('docker ps -a -q') DO docker rm %i
评论已关闭