MySQL-基于docker实现Replication集群主从复制及读写分离

本文介绍了如何使用Docker部署MySQL主从复制,通过日志文件实现双节点Replication集群,以达到读写分离的效果。文章详细讲解了从环境准备、主从节点配置到测试的全过程,探讨了Replication与PXC集群方案的优缺点,强调了根据数据重要性选择合适集群方案的重要性。
摘要由CSDN通过智能技术生成

什么是MySQL集群

MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高可用性能。
说的直白一点就是要做一件事,一个人做着非常吃力,没有那么多精力,所以需要多个人分工合作,最终一起完成。MySQL集群就是这个道理,比如读写分离等等。这个说的比较简单了,今天这篇文章就是一个简单的一主一从双节点的Replication集群,为了测试使用。介绍两种数据同步方案来实现主从和读写分离。

关于MySQL集群方案介绍(Replication,PXC)

MySQL的常用集群有很多种:mysql cluster,nbd,MHA,Mariadb Galera cluster,Replication,Percona XtraDB Cluster。
本来我是想一起写这个Replication(本文以下简称Rep)Percona XtraDB Cluster(PXC)两种方案的实现的,不过篇幅太长。这一篇先来写Rep的实现。
先来大概说下这两种方案的优劣势:

  • Replication 采用异步复制,无法保证数据的准确性。我们写入数据操作的只是master节点,只要操作master成功了就算是成功了。至于master节点是否将数据传输给slave几点,客户端是不知道的。写入速度快,但是无法保证数据的强一致性。
  • PXC 同步复制,事务在所有的集群节点要不就同时提交,要不就不提交。它是对一个节点的操作有了准确的成功返回标识后,才会对其他节点同步操作,是以牺牲性能为代价保证强一致性的。

从上面两条信息来看,很多人会觉得明显是PXC集群方案更好啊,不过真的是这样吗?显然,一个事物存在就有其存在的道理。来看下下面的介绍:
不同于pxc集群方案的是,Rep集群方案无法保证数据的强一致性,自然性能稍微好一点,保证一致性的代价就是牺牲性能,保存一些非高价值的数据,例如订单之外的数据等。

比如大数据领域的协同过滤算法分析行为的算法,数据源就是日志,比如商品浏览日志,单条价值不大,积累起来价值达,但是你说这些数据敏感吗?显然不是非常重要比起订单数据。所以在考虑性能后这里就可以采用Rep方案实现,至于订单等一些敏感数据必须采用可保证强一致性的集群方案,比如PXC。

简单点说,最终结果就是你可以搭建多个集群,重要的数据存储在PXC集群中,不是那么重要的数据存储在Rep集群中。保证性能的同时,保证数据的完整一致性。

注意: PXC集群并不是说节点越多读写速度就越快,恰恰相反,节点越多,同步的消耗就越大,所以,小规模的重要数据节点集群使用PXC很不错。集群性能的好坏取决于整个集群中性能最差的主机的配置性能,还是木桶装水问题。

来看几个案例:
16年微信红包支付峰值15.8W次/秒刷新世界纪录。

17年天猫双11数据库读写峰值4200W次/秒,可支付峰值为25.6W次/秒,再次刷新世界纪录,为什么差距这么大,这就是因为支付数据是很重要敏感的数据,必须保证强一致性,所以整个的读写成本高,峰值自然较低。
由上面的例子就可以看出,整个的大型高可用数据库集群并不是单纯的节点都建立在pxc集群中,重要等级不高的数据可以在Replication集群中操作,降低整体数据库架构的压力。

所以没有技术存在了就没有好与坏,取决于你需不需要。
好了,不说太多文字性描述了,直接开始试验。

环境

该文的所有测试都是基于docker部署的,如果没有使用过或者不是很了解的自己查阅一下先关资料,保证基础的使用就可以完成以下配置搭建。如果你实在不想去使用docker,那你用虚拟机也可以,配置大同小异,几乎没有差距。

1.使用日志文件实现主从

1.1准备工作

首先我们拉取一个MySQL5.7的镜像,一会就使用这个镜像来创建运行几个MySQL容器来做实验。

docker pull mysql:5.7

完成后如下:
在这里插入图片描述
然后你需要创建几个文件夹,用来挂载容器中的文件。你可以按照我这样操作,或者选择别的地方来创建,首先我的位置(如果你选择别的位置,命令中的文件夹位置请勿写错):

/home/guwenjie/docker

在这里插入图片描述
创建两个文件夹:mysql-master,mysql-slave-1。表示一个是主节点容器文件挂载位置,一个是从节点。
然后分别在两个文件夹中创建三个文件夹confdatalogs。那个timezone不用管,哪个是时区文件,一会执行相应命令即可。如下:

在这里插入图片描述

1.2创建mysql-master主节点MySQL容器并运行

现在需要创建运行MySql容器了。首先,设置时区:

echo "Asia/shanghai" 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

millet109

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值