数据库设计 - 主主一致性

一、What

在双主或者多主的情况下,主与主之间需要同步,在高并发的情况下,可能会出现同步失败的现象。那么此时就出现了主与主之间不一致的问题。

二、Why

那么为什么会出现主主不一致呢,也就是说为什么主与主之间会同步失败呢?通常是主主同步时主键冲突引起的,比如说主库使用的是自增id,如果同时来了两个请求分别到数据库主A和数据库主B,那么两者都各自增了1,比如是4,那么主A会同步主A的id为4的记录给主B,主B页会同步主B的id为4的记录给主A,产生了主键冲突,导致数据丢失。

三、How

方案一:数据库的自增主键不同初始值,相同增长步长
在这里插入图片描述

为了避免主主不一致,核心就是避免主键冲突,数据库层面有一个简单的做法:不同初始值,相同增长步长。

图中就是一个简单的例子,左边初始为1,步长为2,那么刚好就都是奇数主键,右边初始为2,步长为2,那么刚好都是偶数主键,两库同步之后就是全量数据,不会有主键冲突。

但是这样子会给运维造成负担,毕竟数据库配置不一样就需要额外的管理成本。

方案二:上游层面处理
一种更加推荐的做法就是由第三方来保证一个全局自增的主键,所有生产者都要从这里获取主键。一个著名的分布式自增主键生成算法 – 雪花算法。

方案三:影子主不服务
其实就是高可用里说的keealived+VIP的方式,让一个主变为影子主,它只在对外提供服务的主库挂了的时候接替它上任,这就不会发生不一致的情况,但是资源使用率只有50%

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值