专栏首页finleyMadocker学习系列13 实现 基于pxc 的mysql 多节点主主同步

docker学习系列13 实现 基于pxc 的mysql 多节点主主同步

背景

MySQL本身是开源的,有些公司或社区基于MySQL发布了新的分支,如有名的MariaDB。 在介绍 Percona 之前,首要要介绍的是XtraDB存储引擎,在MYSQL中接触比较多的是MyISAM 和 InnoDB这两个存储引擎。 MySQL 4 和 5 使用默认的 MyISAM 存储引擎安装每个表。从5.5开始,MySQL已将默认存储引擎从 MyISAM 更改为 InnoDB。MyISAM 没有提供事务支持,而 InnoDB 提供了事务支持。与 MyISAM 相比,InnoDB 提供了许多细微的性能改进,并且在处理潜在的数据丢失时提供了更高的可靠性和安全性。 Percona Server由领先的MySQL咨询公司Percona发布。Percona Server是一款独立的数据库产品,其可以完全与MySQL兼容,可以在不更改代码的情况了下将存储引擎更换成XtraDB 。

Percona XtraDB Cluster 完全兼容MySQL。

常见MySQL集群方案

image.png

Percona XtraDB Cluster优缺点

优点如下: 1.当执行一个查询时,在本地节点上执行。因为所有数据都在本地,无需远程访问。 2.无需集中管理。可以在任何时间点失去任何节点,但是集群将照常工作。 3.良好的读负载扩展,任意节点都可以查询。

缺点如下: 1.加入新节点,开销大。需要复制完整的数据。 2.不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。 3.有多少个节点就有多少重复的数据。

基于Docker的实现流程

  1. 拉镜像 docker pull percona/percona-xtradb-cluster:5.7
  2. 镜像名字有点长,起个短点的 docker tag percona/percona-xtradb-cluster:5.7 pxc
  3. 出于安全考虑,针对PXC集群实例创建内部网络 创建的时候通过参数指定IP段和子网掩码,Docker默认使用的IP 172.17.0.1 docker network create --subnet=172.18.0.0./24 pxc-network
  4. 创建第一个节点 docker run -d -p 33010:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc_cluster --name=pxc_node1 --net=pxc-network pxc 执行 docker logs pxc_node1 查看执行状态,如果看到 mysqld: ready for connections. 可以使用navicat等工具测试连接。
  5. 创建第二个数据库节点,并加入到第一个集群中,注意多了 CLUSTER_JOIN 参数 docker run -d -p 33011:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc_cluster -e CLUSTER_JOIN=pxc_node1 --name=pxc_node2 --net=pxc-network pxc
  6. 创建第三个数据库节点,并加入到第一个集群中,注意多了 CLUSTER_JOIN 参数 docker run -d -p 33012:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc_cluster -e CLUSTER_JOIN=pxc_node1 --name=pxc_node3 --net=pxc-network pxc
  7. 接下来可以创建更多的节点,只需修改 容器名称 --name 和映射的端口;
  8. 测试:本地连接这三个节点,在其中一个创建demo数据,其他节点都自动同步数据过去了

image.png

注意

  1. 启动第一个节点后记得使用docker logs查看启动状态,然后使用navicat等工具测试连接,等第一个mysql运行成功后再运行第二个容器。否则第二个起不来,需要重新启动容器。
  2. 由于 docker 封装了一些细节,虽然很快实现了主主同步,还是不能再生产环境中使用,因为经验少,遇到问题不能很快的恢复,比如停掉一节点 docker stop pxc_node1 再启动时连接不上了。需要在下面花更多的时候看文档,逛论坛。更多技术细节参见官方文档

参考

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/install/docker.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Angular 样式使用注意事项

    如果是用angular-cli生成的项目,可以在angular.json中配置样式预处理器

    mafeifan
  • Jenkins2 学习系列13 -- 邮件和Slack通知

    需求:需要把Jenkins的构建情况通过邮件,钉钉,Slack等通知告诉相关的测试,开发人员。 结合之前讲的 post钩子 更进一步可以实现失败时只通知给开发...

    mafeifan
  • docker学习系列5 nginx 容器

    docker run 其实等于 docker create + start 因为tag为 1.15 的 nginx 镜像并不在本地,会先下载再运行

    mafeifan
  • 第 5 章 系统建模

    理解一个系统模型并不是系统的一个完备表示,这点很重要。系统模型有意抹去一些细节以使模型更容易理解。模型研究的是系统的一种抽象而不是系统的另一种表示。

    love丁酥酥
  • 谷歌Chromebook的野心 逐渐渗入企业市场

    ? 自谷歌推出Chrome OS以来,通过与多个厂商积极配合推进,谷歌已经在Chromebook方面小有成绩。在年初的CES2014上,亮相了多款Ch...

    静一
  • SpringBoot设置全局错误页面

    SpringBoot内置了一套错误页面:Default Whitelabel Error Page,很多时候我们通常要自己个性化错误页面,方法很简单,使用Jav...

    王念博客
  • Nebula3 SDK (Mar2010)更新内容(山寨版)

    逍遥剑客
  • Numpy 运算

    最简单的数值计算时数组和标量进行计算,计算过程是直接把数组里的元素和标量逐个进行计算:

    拾点阳光
  • LeetCode - 盛最多水的容器

    LeetCode第11题,难度中等,严重怀疑该题在英文版里是不是第11题,一点印象都没有.

    晓痴
  • 【NDN实验】ndnSIM: NDN simulator for NS-3 全文翻译

    Alexander Afanasyev, Ilya Moiseenko, and Lixia Zhang

    魏晓蕾

扫码关注云+社区

领取腾讯云代金券