分布式存储如何保证数据一致性?

作为一个面向大规模的分布式存储系统,故障处理是作为一个常态异常处理,在多副本机制下,数据的一致性是如何保证的,中间应用了什么机制?

参与7

2同行回答

wangshuai_gowangshuai_go存储工程师证券
这里以solidfire和fusionstorage block 作为典型的分布式块存储,2种在架构区别较大的存储来讲讲在2种主流协议架构下数据一致性的保障问题。一、 solidfiire分布式块存储写入数据数据一致性保障:solidfire 是全闪存架构双副本保护机制,主机端的写操作会被分片成多个4K的blo...显示全部

这里以solidfire和fusionstorage block 作为典型的分布式块存储,2种在架构区别较大的存储来讲讲在2种主流协议架构下数据一致性的保障问题。

一、 solidfiire分布式块存储写入数据数据一致性保障:
solidfire 是全闪存架构双副本保护机制,主机端的写操作会被分片成多个4K的block 下发到存储集群,数据首先写到存储集群中该卷(类似传统存储分给主机的LUN)对应primary存储节点的NVRAM,之后再被复制到集群中该卷对应的secondary 存储节点NVRAM完成第二份副本复制,复制完成secondary 副本之后,集群直接acknowledge write to host 返回主机写入完成。
注意这里还没有完—返回主机写入完成后,集群中存储节点还有做将NVRAM中数据刷入后端SSD硬盘的数据落盘操作,最终完成数据存储过程。
djsupurmb8f

djsupurmb8f

二、 fusionstorage block分布式块存储数据一致性保障:

数据一致性意味着当应用成功写入一份数据到存储系统时, 存储系统的几个数据副本必
然是一致的,当应用再次读时,无论在哪个副本上读取,都是之前写入的数据。
FusionStorage Block 采取多种方式来保证系统中数据的一致性:

1、 副本同步写
当 VBS 模块将写操作发送给指定主 OSD 时, 该 OSD 在写入本节点硬盘时,同时将写
操作同步到备 OSD, 同步过程中严格按照 IO 编号进行,保证了主 OSD 接收到的 IO 顺
序和同步到备 OSD 的 IO 顺序一致。 当主备 OSD 同时完成写操作时,才向应用返回操
作成功。具体流程如下图所示:
67ihw0u5h8u

67ihw0u5h8u

2、 读修复(Read Repair)
Read Repair 机制是指在读数据失败时,系统会判断错误类型,如果是磁盘扇区读取错误,
系统会自动从其他节点保存的副本读取数据,然后重新写入该副本数据到硬盘扇区错误
的节点, 从而保证数据副本总数不减少和副本间的数据一致性

收起
证券 · 2018-06-20
浏览3538
baimmibaimmi系统架构师中国银联股份有限公司
从服务端角度,如何尽快将更新后的数据分布到整个系统,降低达到最终一致性的时间窗口,是提高系统的可用度和用户体验非常重要的方面。对于分布式存储系统:N — 数据复制的份数W — 更新数据是需要保证写完成的节点数R — 读取数据的时候需要读取的节点数如果W+R>N,写的节点...显示全部

从服务端角度,如何尽快将更新后的数据分布到整个系统,降低达到最终一致性的时间窗口,是提高系统的可用度和用户体验非常重要的方面。对于分布式存储系统:
N — 数据复制的份数
W — 更新数据是需要保证写完成的节点数
R — 读取数据的时候需要读取的节点数
如果W+R>N,写的节点和读的节点重叠,则是强一致性。例如对于典型的一主一备同步复制的分布式存储系统,N=2,W=2,R=1,则不管读的是主副本还是从副本的数据,都是一致的。
如果W+R<=N,则是弱一致性。例如对于一主一备异步复制的分布式存储,N=2,W=1,R=1,则如果读的是从副本,就可能无法读取主副本已经更新过的数据,从而读到了脏数据所以是弱一致性。
对于分布存储式系统,为了保证高可用性,一般设置N>=3,且强制在主副本读取,也是通常说的分布式存储系统使用强一致性原则。

收起
银行 · 2018-06-21
浏览3415

提问者

乃伊组特
系统架构师制造
擅长领域: 云计算容器容器云

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2018-06-19
  • 关注会员:2 人
  • 问题浏览:4776
  • 最近回答:2018-06-21
  • X社区推广