美文网首页
后端存储13(主从复制)

后端存储13(主从复制)

作者: 兮兮码字的地方 | 来源:发表于2020-10-27 22:32 被阅读0次

主从复制操作时序

当客户端提交一个事务到 MySQL 的集群,直到客户端收到集群返回成功响应,在这个过程中,MySQL 集群需要执行很多操作:

主库需要提交事务、

更新存储引擎中的数据、

把 Binlog 写到磁盘上、

给客户端返回响应、

把 Binlog 复制到所有从库上、

每个从库需要把复制过来的 Binlog 写到暂存日志中、

回放这个 Binlog、

更新存储引擎中的数据、

给主库返回复制成功的响应

这些操作的时序非常重要,

如果先复制 Binlog,等 Binlog 复制到从节点上之后,主节点再去提交事务,这种情况下,从节点的 Binlog 一直和主节点是同步的,任何情况下主节点宕机也不会丢数据,但性能不好。

但如果把这个时序倒过来,先提交事务再复制 Binlog,性能就会非常好,但是存在丢数据的风险。

异步复制

默认情况下,MySQL 采用异步复制的方式,执行事务操作的线程不会等复制 Binlog 的线程。具体的时序图:

MySQL 主库在收到客户端提交事务的请求之后,会先写入 Binlog,然后再提交事务,更新存储引擎中的数据,事务提交完成后,给客户端返回操作成功的响应。同时,从库会有一个专门的复制线程,从主库接收 Binlog,然后把 Binlog 写到一个中继日志里面,再给主库返回复制成功的响应。从库还有另外一个回放 Binlog 的线程,去读中继日志,然后回放 Binlog 更新存储引擎中的数据,提交事务和复制这两个流程在不同的线程中执行,互相不会等待,这是异步复制。

同步复制

同步复制的时序和异步复制基本是一样的,唯一的区别是,什么时候给客户端返回响应。异步复制时,主库提交事务之后,就会给客户端返回响应;而同步复制时,主库在提交事务的时候,会等待数据复制到所有从库之后,再给客户端返回响应。

同步复制这种方式在实际项目中,基本上没法用,原因有两个:一是性能很差,因为要复制到所有节点才返回响应;二是可用性也很差,主库和所有从库任何一个数据库出问题,都会影响业务。

半同步复制

MySQL 从 5.7 版本开始,增加一种半同步复制(Semisynchronous Replication)的方式。异步复制是,事务线程完全不等复制响应;同步复制是,事务线程要等待所有的复制响应;半同步复制介于二者之间,事务线程不用等着所有的复制成功响应,只要一部分复制响应回来之后,就可以给客户端返回了。

这种半同步复制的方式,它兼顾了异步复制和同步复制的优点。如果主库宕机,至少还有一个从库有最新的数据,不存在丢数据的风险。并且,半同步复制的性能也还凑合,也能提供高可用保证,从库宕机也不会影响主库提供服务。

半同步复制重要的参数

1,“rpl_semi_sync_master_wait_no_slave”含义是:“至少等待数据复制到几个从节点再返回”。这个数量配置的越大,丢数据的风险越小,但是集群的性能和可用性就越差。一般情况下,配成默认值 1 也就够了。丢数据的风险也不大,只有在恰好主库和那个有最新数据的从库一起坏掉的情况下,才有可能丢数据。

2,“rpl_semi_sync_master_wait_point”,这个参数控制主库执行事务的线程,是在提交事务之前(AFTER_SYNC)等待复制,还是在提交事务之后(AFTER_COMMIT)等待复制。默认是 AFTER_SYNC,也就是先等待复制,再提交事务,这样完全不会丢数据。AFTER_COMMIT 具有更好的性能,不会长时间锁表,但还是存在宕机丢数据的风险。

PS:虽然我们配置了同步或者半同步复制,并且要等待复制成功后再提交事务,还是有一种特别容易被忽略、可能存在丢数据风险的情况———如果说,主库提交事务的线程等待复制的时间超时了,这种情况下事务仍然会被正常提交,并且,MySQL 会自动降级为异步复制模式,直到有足够多(rpl_semi_sync_master_wait_no_slave)的从库追上主库,才能恢复成半同步复制,如果这个期间主库宕机,仍然存在丢数据的风险。

相关文章

  • 后端存储13(主从复制)

    主从复制操作时序 当客户端提交一个事务到 MySQL 的集群,直到客户端收到集群返回成功响应,在这个过程中,MyS...

  • 后端存储3

    购物车系统的主要功能包括:加购、购物车列表页和结算下单。 购物车系统需要保存两类购物车,一类是未登录情况下的“暂存...

  • 后端存储4

    如何保证账户系统中流水和余额数据一致? 账户系统用于记录每个用户的余额,为了保证数据的可追溯性,通常都是需要记录账...

  • 四、备份容灾技术

    备份 常用备份拓扑 存储网络主要分为前端业务网以及后端的存储网络,业务网主要受理用户的请求,后端存储网主要用户数据...

  • Redis Sentinel(哨兵) 入门

    主从复制高可用? 主从复制的问题: 手动故障转移,写能力和存储能力有限(读写都只能在一个节点上进行,其他节点为副本...

  • 2019-12-11 Kubernetes Persistent

    定义 PV 作为存储资源,主要包括的设置 存储能力 访问模式 存储类型 回收策略 后端存储类型 PV(Persis...

  • 你不知道的-主从复制,因为该命令redis作者曾摊上事?

    一、什么是主从复制 主从复制就是我们建立数据存档的时候,将一份数据进行复制保存多分存储在不同的机器上。 二、为什么...

  • 1. day01-Spring起步

    一,后端开发的概念和技术 1.1什么是后端开发 什么是后端开发 1.2 Java后端技术图16493376-13b...

  • Alluxio后端存储(HDFS)

    版本 Alluxio:alluxio-1.3.0-hadoop2.7 HDFS:2.7.1 配置 创建alluxi...

  • 后端存储实战1

    实现操作的幂等的方法 因为网络、服务器等等这些不确定的因素,重试请求是普遍存在并且不可避免的。 (前端页面上应该防...

网友评论

      本文标题:后端存储13(主从复制)

      本文链接:https://www.haomeiwen.com/subject/vfqvuktx.html