当前位置: 首页 > news >正文

docker mariadb集群_Docker Swarm 部署Mysql/Mariadb高可用主从复制集群

docker

1. MariaDB与MySQL

MariaDB是MySQL源代码的一个分支,在意识到Oracle会对MySQL许可做什么后分离了出来(MySQL先后被Sun、Oracle收购)。除了作为一个Mysql的“向下替代品”,MariaDB包括的一些新特性使它优于MySQL。

这两个数据库究竟有什么本质的区别,我看mariadb文件夹BIN中还是mysql*.exe,除了MySQL会被ORACLE闭源外,而mariadb则开源。区别1

MariaDB不仅仅是Mysql的一个替代品,它的主要目的是创新和提高Mysql的技术。

区别2

MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB。

MariaDB跟MySQL在绝大多数方面是兼容的,对于开发者来说,几乎感觉不到任何不同。目前MariaDB是发展最快的MySQL分支版本,新版本发布速度已经超过了Oracle官方的MySQL版本。

MariaDB 是一个采用Aria存储引擎的MySQL分支版本,是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器。

这个项目的更多的代码都改编于 MySQL 6.0,例如 “pool of threads”功能提供解决多数据连接问题。MariaDB 5.1.41 RC可以到这里下载,32位和64位已编译Linux版本,还包括源代码包。MariaDB基于GPL 2.0发布。

2. 环境准备

2.1. 服务器准备

为了本次的mysql集群部署,我准备了3台服务器IP主机名角色192.168.89.15host-192-168-88-15manager Reachable

192.168.89.16host-192-168-88-16manager leader

192.168.89.17host-192-168-88-17manager Reachable

2.2. docker swarm 环境

docker swarm 环境的搭建及服务的部署可参考我的另一篇文章:Docker Swarm集群部署实践

集群节点信息

2.3. 所需镜像

除去docker swarm镜像以外,还需要toughiq/mariadb-cluster和toughiq/maxscale镜像。可以通过以下命令拉取镜像:

toughiq/mariadb-clusterdocker pull toughiq/mariadb-cluster

toughiq/maxscaledocker pull toughiq/maxscale

这边,我为了方便,将这两个镜像推送到私有仓库// 修改toughiq/mariadb-cluster标签docker tag toughiq/mariadb-cluster:latest 192.168.77.53:5000/toughiq/mariadb-cluster:latest// 推送toughiq/mariadb-cluster到私有仓库docker push 192.168.77.53:5000/toughiq/mariadb-cluster:latest// 修改toughiq/maxscale标签docker tag toughiq/maxscale:latest 192.168.77.53:5000/toughiq/maxscale:latest// 推送toughiq/maxscale到私有仓库docker push 192.168.77.53:5000/toughiq/maxscale:latest

3. 部署方案

3.1. mariadb-cluster部署创建一个swarm的全局网络docker network create -d overlay mydbnet

创建网络创建一个mysql cluster集群,设置副本为1,–replicas=1,当副本为1时 mariadb-cluster镜像为这个实例自动变成引导节点docker service create --name dbcluster \

--network mydbnet \

--replicas=1 \

--env DB_SERVICE_NAME=dbcluster \

--env MYSQL_ROOT_PASSWORD=123456 \

--env MYSQL_DATABASE=mydb \

--env MYSQL_USER=mydbuser \

--env MYSQL_PASSWORD=123456 \

192.168.77.53:5000/toughiq/mariadb-cluster:latest

注意:服务名称--name 需要与环境变量DB_SERVICE_NAME匹配,其中,MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD等环境变量是可选的。

service create

扩展服务

扩展dbcluster服务的任务数量,即为数据库集群增加2个节点。docker service scale dbcluster=3

service scale

3.2. maxscale 部署

创建MaxScale代理服务并连接到dbcluster

由于Swarm提供了一个负载平衡器,因此使用该Docker Swarm启用的数据库集群不需要MaxScale Proxy服务。因此,可以使用负载均衡器DNS名称连接到集群,上面运行的例子就是mysqldbcluster。它在同一个名字,由启动时提供–name。

但是MaxScale提供了一些关于负载平衡数据库流量的附加功能。它是获取有关群集状态的信息的简单方法。docker service create --name maxscale \

--network mydbnet \

--env DB_SERVICE_NAME=dbcluster \

--env ENABLE_ROOT_USER=1 \

--publish 3306:3306 \

192.168.77.53:5000/toughiq/maxscale要通过MaxScale禁用root对数据库的访问,只需设置--env ENABLE_ROOT_USER=0或删除该行即可。

默认情况下禁用根访问。

maxscale

成功之后,可以到maxscale运行的主机上查看mysql的集群情况:// 查询出maxscale的容器IDdocker ps// 查看集群信息docker exec -it c03542dc8d55 maxadmin -pmariadb list servers

list servers

至此,我们的mysql/mariadb的集群就算是部署成功了。

4. 测试通过docker inspect命令找出mysql的master节点在那一台服务器上。然后重启这台服务器的mysql容器。// 重启容器docker restart 2af34f82d395// 查看服务任务列表docker service ps dbcluster

重启mysql容器通过maxscale查看重启后的集群信息docker exec -it c03542dc8d55 maxadmin -pmariadb list servers

list servers

作者:ChainZhang

链接:https://www.jianshu.com/p/5ad118e30dc1

相关文章:

  • seaborn无法import_seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决...
  • python中文件最重要的功能陶瓷材料_2020大学慕课新型陶瓷材料及商业应用期末考试查题公众号答案...
  • python的notebook怎么打开_ipython notebook 如何打开.ipynb文件?
  • 如何区分电梯卡为id卡ic卡_怎么看小区门禁卡是ic还是id
  • fusionsphere读音_【转载】FusionSphere架构详解
  • wince7 屏幕控制_WinCE 7.0下的触摸屏驱动-嵌入式系统-与非网
  • canvas滚动 vue_基于Canvas+Vue的弹幕组件
  • http 阮一峰_JavaScript 标准参考教程(alpha) 阮一峰
  • python时间字符串表示_python – 将pandas datetime month转换为字符串表示形式
  • react实现汉堡_reactjs – 所有顶级屏幕标题(使用抽屉)标题中的react-navigation汉堡包图标?...
  • c# 多线程界面卡顿_C#多线程解决程序卡顿问题
  • 安卓吸顶+下拉放大_【Android】打造下拉放大效果
  • react 父子传值_react 父子组件传值——父传子
  • python和mysql匹配吗_Python最佳实践和最安全的方法来连接MySQL和执行查询
  • java openresty 调用_OpenResty 究竟解决了什么痛点?
  • (三)从jvm层面了解线程的启动和停止
  • 【5+】跨webview多页面 触发事件(二)
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JS基础之数据类型、对象、原型、原型链、继承
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 复习Javascript专题(四):js中的深浅拷贝
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 记一次用 NodeJs 实现模拟登录的思路
  • 手机app有了短信验证码还有没必要有图片验证码?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #android不同版本废弃api,新api。
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #NOIP 2014#Day.2 T3 解方程
  • #Z0458. 树的中心2
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二十三)Flask之高频面试点
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一)Dubbo快速入门、介绍、使用
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • ****三次握手和四次挥手
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Core 2.1路线图
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .project文件
  • /etc/shadow字段详解
  • [100天算法】-不同路径 III(day 73)
  • [2016.7 day.5] T2
  • [51nod1610]路径计数
  • [Angular 基础] - 表单:响应式表单
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子
  • [BZOJ] 3262: 陌上花开
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [C#小技巧]如何捕捉上升沿和下降沿