数据库主从高可用方案

前言

本篇大部分是抄作业的,不过也是看懂了其义才能抄的,同时也是用自己的语言写出来的,所以和网上还是不同的,侧重点不同。
本篇主要讲的是分布式数据库中主从架构的高可用方案。
最近再思考:

  1. 主从架构到底解决什么问题?
  2. 主从架构的延时要如何真正解决?

数据库高可用解决方案

带着上面两个问题,本人仔细查阅了网上的所有相关资料,有两种情况:

  1. 一是说分担流量不应该用主从架构来解决,主从架构主要解决的是主数据库宕机,从数据库马上可以使用,起到容错的作用。要想解决流量负担,提升插入、查询效率需要使用缓存来解决;
  2. 二是从业务(优化业务对数据库的操作时间,这个具体会再写一篇文章)和数据库特性入手(比如 mysql5.6 版本之后
    binlog 并发拷贝和执行)来缩小延迟的时间,没有从架构方面来考虑解决。

上面两种情况都没有从架构方面来真正解决问题,情况一主从架构的作用搞错了(主从架构要解决的问题是解决读库的压力),同时又把问题转移到用缓存来处理;情况二只是把延迟时间缩小,并且需要分析业务上的数据和 mysql 特性来达到尽可能的缩小。

那么对于情况二,如何真正解决主从架构的时间延迟问题,我们接着看。
先简单说答案:有主从,主从之间的时间延迟必存在,即解决不了;但是可通过路由来解决访问主数据(未同步完,则读主)还是从数据(同步完,则读从)

接下来讲讲具体是怎么实现的。
访问的主流程图:
file
步骤:
1.路由功能:由缓存层解决,在缓存层加上DML( 插入或更新操作)的键值,作为判断依据,有(主从同步未完成),则访问主数据库;无(主从同步已完成),则增加相应键值,并访问从数据库。
2.主从 binlog 同步完后,清除缓存相应键值。

键值组成:数据库名-表名-返回的主键ID

总结

我本人觉得这个方法挺好,一是能解决并发量大的时候读库的压力,二是能解决同步时间延迟造成的数据不一致的顽疾,可以参考这个方案来实施生产上线。

参考文献

参考公众号:架构师之路

追求梦想,做最好的自己