# Docker MySQL MHA
基于Docker 1.13.1之上构建的MySQL MHA Docker Compose Project
可快速启动GTID模式下的MasterHA集群, 主用于MySQL与Docker的学习研究
## 构建环境
- MacOS 10.12.3
- Docker 1.13.1
- Docker Compose 1.11.1
- Docker image for MySQL 5.7.17
- Docker image for Debian jessie
- mha4mysql-manager-0.56
- mha4mysql-node-0.56
## 特性
- USTC debian sources
- 自动生成MySQL复制账户与MHA工作账户
- 可自定义的MySQL复制与MHA工作账户信息
- SSH key的自动生成
- 容器间的SSH key相互复制与SSH免密登录
- MasterHA的自启动
## 构建与启动
### docker-compose.yml 定义
`master` - Docker compose中名为`master`的service, 主库容器默认映射端口3406
`slave_1` - Docker compose中名为`slave_1`的service, 从库容器默认映射端口3407
`manager` - Docker compose中名为`manager`的service, 作为MHA manager
`mha_share` - 容器间的共享数据卷
### 目录与文件功能说明
- account.env
保存容器间的公用环境变量, 如MySQL复制账户repl的账号密码
- employees_db
`master` 启动时的MySQL初始化脚本
- employees_master
`master` 主库容器中的配置文件, 日志与库存放位置
- employees_slave_1
`slave_1` 从库容器中的配置文件, 日志与库存放位置
- employees_share
容器间的共享数据卷
- mha_manager
构建Docker镜像`mha_manager`所需的Dockerfile及其依赖文件的存放目录, 在docker-compose.yml有定义
- mha_node
构建Docker镜像`mha_node`所需的Dockerfile及其依赖文件的存放目录, 在docker-compose.yml有定义
- reset.sh
停止project并删除所有数据库的日志与库(配置文件除外)
- shutdown.sh
单纯地停止project
- start.sh
1. 启动project
2. 在各个容器中生成ssh key
3. 将ssh key分别复制到其他容器中, 使得容器之间都可以使用SSH免密登录
4. 使`master`与`slave_1`形成复制链路
5. 根据自定义的MySQL账户密码生成MHA配置文件
6. masterha_check_ssh检测容器间的SSH正确性
7. masterha_check_repl检测复制的健康状况
8. 启动masterha_manager并将日志写入employees_share中的`mha.log`
### 启动
1. **首次运行时**请先初始化MySQL, 否则容器将不接受连接
```shell
➜ mha git:(master) docker-compose up -d
Creating network "mha_default" with the default driver
Creating mha_mha_node_1
Creating mha_mha_share_1
Creating mha_mha_manager_1
Creating mha_master_1
Creating mha_slave_1_1
Creating mha_manager_1
```
待容器可接收宿主机的MySQL连接代表初始化完成
2. 预热后运行start.sh脚本以构建MHA集群
```shell
➜ mha git:(master) ./start.sh
>>> Docker Compose starting...
Starting mha_mha_manager_1
Starting mha_mha_share_1
Starting mha_mha_node_1
mha_master_1 is up-to-date
mha_slave_1_1 is up-to-date
mha_manager_1 is up-to-date
>>> Setting ssh...
fd9686976e61 initializing SSH...
fd9686976e61 change the password of root successfully.
fd9686976e61 SSH service has been restarted.
fd9686976e61 succeed in generating ssh key.
...
fd9686976e61 copy ssh key to manager successfully.
fd9686976e61 copy ssh key to master successfully.
...
>>> Creating mysql user for replication named 'repl' on master container...
mysql: [Warning] Using a password on the command line interface can be insecure.
>>> Configuring replication with GTID mode...
configuring slave_1 754214d5bdfc ...
mysql: [Warning] Using a password on the command line interface can be insecure.
>>> Initializing MHA configuration...
mha configuration "/mha_share/application.cnf" is not initialized.
added host "master" to mha configuration file.
added host "slave_1" to mha configuration file.
**********************************************
checking mha ssh...
Wed Feb 15 11:04:08 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
...
Wed Feb 15 11:04:08 2017 - [debug] ok.
Wed Feb 15 11:04:09 2017 - [info] All SSH connection tests passed successfully.
**********************************************
checking mha repl to mysql...
Wed Feb 15 11:04:09 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
...
MySQL Replication Health is OK.
**********************************************
starting mha manager with file "/mha_share/application.cnf"...
nohup: redirecting stderr to stdout
>>> Done!
```
> NOTE: 首次运行时如果不预热而直接调用start.sh脚本的话, 则会引起MySQL未完成初始化而造成构建主从复制链路出错, 如果是数据库已经经过初始化则不需要进行预热
## 注意事项
1. 首次运行时请先运行`docker-compose up -d`进行MySQL的初始化
2. 一个Docker Compose Service对应一个容器, 以此享用Docker Compose默认构建的容器网络, 即可直接使用service name进行SSH通信
3. 本项目仅用于学习MySQL MHA集群, 同时练习Docker的使用
4. 要使用虚拟IP的话可自行搭配Keepalive, LVS等
## 参考
[MHA Quick Start Guide](https://www.percona.com/blog/2016/09/02/mha-quickstart-guide/)
[MySQL Docker Image](https://hub.docker.com/_/mysql/)
[Two-way link with Docker Compose](https://medium.com/@tristan.claverie/well-there-is-in-fact-a-simpler-solution-than-creating-a-network-do-nothing-at-all-docker-f38e93326134#.l6uupkacv)
[How to configure MySQL master/slave replication with MHA automatic failover](http://www.arborisoft.com/how-to-configure-mysql-masterslave-replication-with-mha-automatic-failover/)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
docker安装 docker安装方法有多种,下面列举在Windows和Linux系统中的安装步骤:12 Windows系统中的安装方法: 对于Windows Server系统,可以使用Microsoft发布的PowerShell模块DockerMicrosoftProvider来安装。以管理员身份打开Windows PowerShell,运行相关命令安装包并重启计算机即可。 对于Windows 10系统,需要通过创建Docker账户来下载和安装Docker Desktop(Windows版)。在安装过程中,可以将默认容器类型设置为Windows容器,也可以在安装后更改类型。 Linux系统中的安装方法(以CentOS7为例): 更新系统软件包并安装必要的软件包,如yum-utils、device-mapper-persistent-data和lvm2等。 添加Docker的yum仓库,以便下载并安装Docker。可以通过访问Docker官网的CentOS下载地址获取帮助文档,按步骤进行安装。 安装Docker CE(Community Edition)
资源推荐
资源详情
资源评论
收起资源包目录
基于Docker Compose构建的MySQL MHA集群.zip (26个子文件)
docker-mysql-mha-master
mha_node
preparation
sources.list 633B
ssh-pass.sh 992B
ssh-init.sh 1KB
mha4mysql-node-0.56.tar.gz 45KB
Dockerfile 680B
account.env 479B
mha_manager
preparation
sources.list 633B
bootstrap.sh 2KB
ssh-pass.sh 992B
ssh-init.sh 1KB
mha4mysql-manager-0.56.tar.gz 102KB
mha4mysql-node-0.56.tar.gz 45KB
Dockerfile 917B
employees_db
employees.sql 4KB
docker-compose.yml 2KB
employees_share
application.cnf 147B
change-master.sh 786B
create-repl-account.sh 992B
start.sh 2KB
employees_slave_1
conf.d
mysqld.cnf 2KB
reset.sh 547B
.gitignore 3KB
employees_master
conf.d
mysqld.cnf 1KB
README.md 6KB
shutdown.sh 76B
新建文本文档.txt 1KB
共 26 条
- 1
资源评论
野生的狒狒
- 粉丝: 3389
- 资源: 2436
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C183579-123578-c1235789.jpg
- Qt5.14 绘画板 Qt Creator C++项目
- python实现Excel表格合并
- Java实现读取Excel批量发送邮件.zip
- 【java毕业设计】商城后台管理系统源码(springboot+vue+mysql+说明文档).zip
- 【java毕业设计】开发停车位管理系统(调用百度地图API)源码(springboot+vue+mysql+说明文档).zip
- 星耀软件库(升级版).apk.1
- 基于Django后端和Vue前端的多语言购物车项目设计源码
- 基于Python与Vue的浮光在线教育平台源码设计
- 31129647070291Eclipson MXS R.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功