基于Docker Compose构建的MySQL MHA集群
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
- 启动project
- 在各个容器中生成ssh key
- 将ssh key分别复制到其他容器中, 使得容器之间都可以使用SSH免密登录
- 使
master与slave_1形成复制链路 - 根据自定义的MySQL账户密码生成MHA配置文件
- masterha_check_ssh检测容器间的SSH正确性
- masterha_check_repl检测复制的健康状况
- 启动masterha_manager并将日志写入employees_share中的
mha.log
启动
首次运行时请先初始化MySQL, 否则容器将不接受连接
➜ 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连接代表初始化完成
预热后运行start.sh脚本以构建MHA集群
➜ 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未完成初始化而造成构建主从复制链路出错, 如果是数据库已经经过初始化则不需要进行预热
注意事项
- 首次运行时请先运行
docker-compose up -d进行MySQL的初始化 - 一个Docker Compose Service对应一个容器, 以此享用Docker Compose默认构建的容器网络, 即可直接使用service name进行SSH通信
- 本项目仅用于学习MySQL MHA集群, 同时练习Docker的使用
- 要使用虚拟IP的话可自行搭配Keepalive, LVS等
基于Docker Compose构建的MySQL MHA集群的更多相关文章
- 基于Docker快速搭建多节点Hadoop集群--已验证
Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop ...
- Docker Compose部署 nginx代理Tomcat集群
一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...
- 搭建基于Docker社区版的Kubernetes本地集群
Kubernetes的本地集群搭建是一件颇费苦心的活,网上有各种参考资源,由于版本和容器的不断发展,搭建的方式也是各不相同,这里基于Docker CE的18.09.0版本,在Mac OS.Win10下 ...
- 基于Dubbo框架构建分布式服务(集群容错&负载均衡)
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- 基于docker 搭建Elasticsearch5.6.4 分布式集群
说明: 准备2台机器,我这里有192. 和 192.168.0.164 192.168.0.164 作为master 192.168.0.107 作为普通node 一.环境 .docker 环境 .E ...
- MySQL数据库集群进行正确配置步骤
MySQL数据库集群进行正确配置步骤 2010-06-09 10:47 arrowcat 博客园 字号:T | T 我们今天是要和大家一起分享的是对MySQL数据库集群进行正确配置,我前两天在相关网站 ...
- centos7 mysql cluster集群搭建基于docker
1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5: ...
- 基于Docker的Mysql Cluster集群
参考 mysql-cluster镜像 https://medium.com/@ahmedamedy/mysql-clustering-with-docker-611dc28b8db7 使用Docker ...
- DCOS实践分享(2):基于Docker Compose和Swarm的Docker化之路
2016 年1 月 23 日,北京史上气温最低的一天. 在下午 1 点半的时候,由 DaoCloud 赞助的 2016 年度首次 Docker Meetup 准时开始. 在这次Meetup中,我分享了 ...
随机推荐
- leyer不写content参数直接传递给子页面数据
function btnAddClickownfund(){ //获取数据 var actual = $("#actual_capitals").html().trim(); // ...
- Git很简单--图解攻略
Git Git 是目前世界上最先进的分布式版本控制系统(没有之一) 作用 源代码管理 为什么要进行源代码管理? 方便多人协同开发 方便版本控制 Git管理源代码特点 1.Git是分布式管理.服务器和客 ...
- Redis 之复制-初入江湖
一.前言 在分布式系统中,为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复合负载均衡等需求.Redis也是如此,它为我们提供了复制的功能,实现了相同数据的多个Redis副本.复制 ...
- 大数据学习--day14(String--StringBuffer--StringBuilder 源码分析、性能比较)
String--StringBuffer--StringBuilder 源码分析.性能比较 站在优秀博客的肩上看问题:https://www.cnblogs.com/dolphin0520/p/377 ...
- Hadoop生态新增列式存储系统Kudu
Hadoop生态系统发展到现在,存储层主要由HDFS和HBase两个系统把持着,一直没有太大突破.在追求高吞吐的批处理场景下,我们选用HDFS,在追求低延迟,有随机读写需求的场景下,我们选用H ...
- Python学习笔记十:json序列化,软件结构目录规范,ATM作业讲解,import本质论
json序列化 将系统的某个状态保存为字符串(挂起),序列化. import json json.dumps():序列化 json.loads():反序列化 简单类型数据处理 import pickl ...
- 核密度估计 Kernel Density Estimation (KDE) MATLAB
对于已经得到的样本集,核密度估计是一种可以求得样本的分布的概率密度函数的方法: 通过选取核函数和合适的带宽,可以得到样本的distribution probability,在这里核函数选取标准正态分布 ...
- node.js 监听message事件 message字符串丢失信息
const dgram = require("dgram"); const server = dgram.createSocket("udp4"); serve ...
- 20155212 2016-2017-2 《Java程序设计》第5周学习总结
20155212 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 Chapter8 就Java在异常处理的设计上,不鼓励捕捉InputMismatchExce ...
- 20155313 2016-2017-2《Java程序设计》课程总结
20155313 2016-2017-2<Java程序设计>课程总结 目录 一.每周作业链接汇总 二.实验报告链接汇总 三.代码托管链接 四.课堂项目实践 五.课程收获与不足 六.问卷调查 ...