博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker学习系列13 实现 基于pxc 的mysql 多节点主主同步 ...
阅读量:5872 次
发布时间:2019-06-19

本文共 2003 字,大约阅读时间需要 6 分钟。

背景

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集群方案

img_2606c3ec639bace22e92f23b304cb6a0.png
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 --172.18.0.2 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 --172.18.0.3 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 --172.18.0.4 pxc
  7. 接下来可以创建第N个节点,注意参数如容器名称 --name 和映射的端口别冲突;
  8. 测试:本地连接这三个节点,在其中一个创建demo数据,其他节点都自动同步数据过去了
img_65439eea03f7b6a6a1cff57880df9562.png
image.png

注意

  1. 启动第一个节点后记得使用docker logs查看启动状态,然后使用navicat等工具测试连接,等第一个mysql运行成功后再运行第二个容器。否则第二个起不来,需要重新启动容器。
  2. 如果停掉某一节点 docker stop pxc_node1 再启动时 docker start pxc_node1 可能会发现连接不上了。这时候可以删除容器,重新运行,命令类似 docker run -d -p 33010:3306 -e MYSQL_ROOT_PASSWORD=root -e CLUSTER_NAME=pxc_cluster -e CLUSTER_JOIN=pxc_node2 --name=pxc_node1 --net=pxc-network --172.18.0.2 pxc

参考

转载地址:http://mqhnx.baihongyu.com/

你可能感兴趣的文章
监控摄像机的区别和分类
查看>>
Java学习——对象和类
查看>>
ElasticSearch 组合过滤器
查看>>
HttpClient连接池的连接保持、超时和失效机制
查看>>
1-4 多文档界面处理(2)
查看>>
《Essential Linux Device Drivers》中文版第1章
查看>>
让远程传输大文件变得更快
查看>>
iOS:Xcode7下创建 .a静态库 和 .framework静态库
查看>>
complex的小困惑
查看>>
十进制、十六进制、二进制的转换
查看>>
双网卡centos7 iptables防火墙与/etc/rc.d/rc.local开机运行
查看>>
tomcat PermGen space 不足的解决方法
查看>>
STM32系统滴答_及不可不知的延时技巧 - (上)
查看>>
Linux下企业级分区方案
查看>>
CentOS下LAMP一键yum安装脚本
查看>>
拖来拖去今天终于重装系统了
查看>>
NestJS 脑图
查看>>
我的友情链接
查看>>
Html body的滚动条禁止与启用
查看>>
Tengine新增nginx upstream模块的使用
查看>>