13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

MySQL双主一致性架构优化

一、双主保证高可用

超过十多年行业经验,技术领先,服务至上的经营模式,全靠网络和口碑获得客户,为自己降低成本,也就是为客户降低成本。到目前业务范围包括了:网站制作、网站建设,成都网站推广,成都网站优化,整体网络托管,微信小程序,微信开发,重庆App定制开发,同时也可以让客户的网站和网络营销和我们一样获得订单和生意!

MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点。

在一个MySQL数据库集群中可以设置两个主库,并设置双向同步,以冗余写库的方式来保证写库的高可用。

二、并发引发不一致

数据冗余会引发数据的一致性问题,因为数据的同步有一个时间差,并发的写入可能导致数据同步失败,引起数据丢失:

如上图所述,假设主库使用了auto increment来作为自增主键:

三、相同步长免冲突

能否保证两个主库生成的主键一定不冲突呢?

回答:

就能够做到。

如上图所示:

如上图所示,两个主库最终都将包含1/2/3/4/5/6/7/8所有数据,即使有一个主库挂了,另一个主库也能够保证写库的高可用。

四、上游生成ID避冲突

换一个思路,为何要依赖于数据库的自增ID,来保证数据的一致性呢?

完全可以由业务上游,使用统一的ID生成器,来保证ID的生成不冲突:

如上图所示,调用方插入数据时,带入全局***ID,而不依赖于数据库的auto increment,也能解决这个问题。

至于如何生成全局***,趋势递增的ID,参见文章《分布式ID生成算法》。

五、消除双写不治本

使用auto increment两个主库并发写可能导致数据不一致,只使用一个主库提供服务,另一个主库作为shadow-master,只用来保证高可用,能否避免一致性问题呢?

如上图所示:

这个切换由于虚IP没有变化,所以切换过程对调用方是透明的,但在极限的情况下,也可能引发数据的不一致:

如上图所示:

六、内网DNS探测

虚IP漂移,双主同步延时导致的数据不一致,本质上,需要在双主同步完数据之后,再实施虚IP偏移,使用内网DNS探测,可以实现shadow master延时高可用:

七、总结

主库高可用,主库一致性,一些小技巧:

【本文为专栏作者“58沈剑”原创稿件,转载请联系原作者】


网页题目:MySQL双主一致性架构优化
当前URL:http://cdbrznjsb.com/article/dhopogg.html

其他资讯

让你的专属顾问为你服务