数据库总结:分布式-复制

数据复制

概念:

复制,备份,快照

复制:行复制和语句复制(逻辑复制),主库记录二进制日志(Binary Log),从库重放日志的过程;
快照:是在特定时间点的系统/卷的图像,通常基于版本,随着数据不断变化,新的快照最终会覆盖旧的。因此,不建议将快照作为长期存储数据的解决方案。
备份:是在执行备份时,整个系统/卷的副本。每次备份都会占用整个数据卷的空间,因此备份操作需要大量存储资源。

WAL(Write Ahead Log)预写日志

是关系数据库系统中用于提供原子性和持久性(ACID 属性中的两个)的一系列技术,原理是在修改在提交之前都要先写入 log 文件中
1、保证数据操作的原子性和持久性。
2、使得随机写变为顺序写提高性能。

架构:

1、主从复制 (只有主副本才接收写请求):适合读密集型(如Web)
2、多主节点复制:主节点同时扮演其他主节点的从节点(mysql不支持多主库复制 )

多数据中心场景,可在每个数据中心配置主节点;
多设备同步,如手机、笔记本在离线状态下更改,会在下次上线时与服务器进行同步,即每个设备都有一个充当主节点的本地数据库。
协作编辑场景
主要问题是如何解决写冲突: 如何解决,思想上以一种收敛趋同的方式解决冲突,只需保证最终一致,如时间戳方式,合并方式,或自定义。

3、无主节点复制(去中心)

要解决的问题是,当一个失效节点重新上线后如何赶上中间错过的请求?
基于版本号,在多个节点同时写入时,只要过半写入成功则认为成功,

复制技术

同步复制,异步复制

注意:实践中,其中一个从节点是同步,其他节点是异步模式,但,当同步的从节点性能下降或不可用,则将另一个异步节点提升为同步模式,也成为了半同步。
主从复制通常配置为全异步模式,提升吞吐,一般适用于从节点数量大且分布地域较广,后续讨论引起的“复制滞后”的问题。
增加新从节点:快照拷贝,如mysql的binlog coordinates,一般需要第三方工具如mysql的innobackupex
节点失效 :追赶式恢复,节点切换

实现方式:

1、基于操作语句的复制

副作用(自增列、触发器、存储过程):在不同副本上产生不同的值(遗留问题)。
如VoltDB基于语句复制,通过事务级别的确定性来保证复制安全。

2、基于预写日志(WAL)传输

一个wal包含哪些磁盘哪些字节发生变化,存储引擎紧密耦合,通常无法在数据库不同版本间有效复制。

3、基于行逻辑日志复制

mysql 的binlog。逻辑日志和存储引擎解耦。

4、基于触发器复制

oracle 的GoldenGate。

复制中的问题

数据分布在不同数据中心,需保证连接环境;
负载均衡,针对读密集型可使用对机器编码或DNS轮询(轮训多个ip地址);
升级测试,mysql向后兼容,先使用高版本从库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值