如何搭建并使用数据强一致性的MySQL集群?
通常大家熟知的mysql集群采用的是Replication方案,Replication采用的是节点之间异步传输,无法保证数据的一致性,属于弱一致性。Replication事务机制是保证当前节点提交成功,并不保证数据同步成功。
比如下边这种情况,当我们往第一台mysql数据库写入数据,然后提交事务成功,然后因为网络原因这条数据并没有同步到另一个mysql节点,当我们通过读写分离的方式,向第二胎mysql数据库发送读请求的时候,无法读到刚才写入的数据。这就是数据库集群同步采用异步传输呈现出的弱一致性出现的危害。
本文讲解的PXC方案采用的是数据强一致性,数据的强一致性100%保证往一个节点上写入数据,一定会同步到其余的mysql子节点中。
比如如下图,我们在第一台mysql节点写入数据,本地事务提交成功之后,pxc还要保证每一个mysql节点的事务都提交成功才算成功写入。
像上边写到的数据同步不一致的情况在pxc集群中绝对不会出现。pxc集群才是存储关键数据的最佳方案
在之后的博客会按下图的架构实现数据库集群
因为要实现数据库集群,我们需要同时运行多台虚拟机,所以对硬件要求较高。
硬件环境:
- cpu: 英特尔i5以上
- 内存: 8G内存以上
- 硬盘: 100GB闲余空间
软件环境: - VMWare虚拟机+CentOS7.*
- Navicat 或者 DataGrip
- JDK1.8 在上图中我们的集群方案里使用了mycat中间件,mycat中间件是基于java的,所以需要jdk环境
我们要搭建的pxc集群是三个pxc节点的集群,我们不能搭建2节点的pxc集群,为了防止脑一半以上的节点无法访问的情况下,集群会自动停止运行,如果我们配置2节点pxc集群,一旦一个节点挂掉了,恰好是一半节点不能访问,那么剩下的节点也无法使用了。这种方式的容灾性特别不好。假设是三个节点pxc集群,即便dangji宕机一个节点,我们还有2个节点可以使用,高可用性会更好一些。pxc集群增加多一些的节点,pxc集群的高可用性会更加好。一定要记住一半以上的节点宕机时pxc集群就无法使用了
MySQL衍生版对比
MySQL | MariaDB | Percona | |
版本 | 官方原版 | 社区版 | 企业版 |
是否收费 | 免费 | 免费 | 免费 |
是否开源 | 未来可能会闭源(orcale修改过mysql开源的协议,所以以后有可能闭源) | 继续开源 | 继续开源 |
负载性能 | 高负载性能不好 | 高负载性能较好 | 高负载性能较好 |
兼容性 | 兼容性好 | 兼容性一般 | 兼容性好 |
官方版的mysql数据库开源了源代码,有二次开发能力的企业可以选择mysql官方版二次开发,没有二次开发能力的企业建议使用Percona.
所以在后续的数据库集群PXC方案中的数据库我们采用Percona数据库。