Mysql 实现主从强一致性和高可用性

在一些对数据有强一致性要求的应用中,数据库宕机导致数据丢失是我们一定要避免的情况。所以保证数据的一致性对我们而言非常重要。
  • 如何做到主从的强一致性呢?
    • 在单机数据库中为了保证事务更新操作不会丢失会使用 WAL 日志优先(Write-Ahead-Logging)技术

      • WAL 的实现其实非常简单,即事务提交时,保证将事务产生的日志先刷到磁盘上,若事务跟新失败,则通过日志可以回滚
    • 同理在主从的过程中,我们根据 WAL 的思想即保证主从的强一致性,即优先保证从库relay log 中继日志更新落盘比主库返回给应用程序事务已提交早 ,操作可以分为以下步骤

      1. 主库事务提交的时候,同时发起两个操作,操作一是将日志写到本地磁盘,操作二是 将日志同步到从库并确保落盘
      2. 主库此时等待两个操作全部成功返回之后,才返回给应用程序,事务提交成功
    • 当有多个从库的时候,为了提升性能,只要有一个从库返回日志落盘成功,在主库日志已落盘的情况下,我们即可返回应用程序提交成功

    • mysql 的具体实现 Loss-Less半同步复制


  • 如何保证主从的可用性呢?
    • 我们首先可以想到的就是苦逼的人肉运维,只要系统一宕机,就让运维人员手动恢复服务,但这样一来成本高,人的成本远比机器贵。二来人的操作速度有限,没有机器快。 三来不人道,机器不知道什么时候宕机,我们不能一直派人守着吧。

    • 这时候,HA(High Availability)检测工具应运而生:HA工具一般部署在第三台服务器上,同时连接主从,检测主从是否存活,如果主库宕机则及时将仓库升级为主库,将原来的主库降级为从库。具体操作如下

    • 主库宕机后,HA探测到,发起一个将备库提升为主库的操作(修改备库的VIP1或者是DNS,可能还需要将备库激活等一系列操作),新的主库提供对外服务。此时,由于主备的数据是通过日志强同步的,因此并没有数据丢失,数据一致性得到了保障

    • HA软件自身的可用性我们改如何保障呢?

      • 增加HA服务,由一台HA主机变为多台HA主机。
      • HA服务,本身是无状态的,多台HA主机,可以通过Paxos/Raft进行自动选主

  • 如果对 mysql 高可用非常感兴趣的话,也可以关注一下 mysql MHA ,不出意外再以后的博客中我也会介绍 MHA 的知识,如果想了解可以持续关注我的博客。


  1. 虚拟IP技术,简写VIP,Virtual IP ↩︎

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值