欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分布式存储入门

程序员文章站 2022-07-12 17:13:21
...

根据阿里云《分布式文件存储系统技术及实现》整理而成。

1 分布式存储的客观需求

  • 存储容量大

考虑对1PB数据进行排序,输入输出都需要1PB,算上中间临时数据,总共需要3-4PB。考虑多用户使用,则集群需要的总的存储空间大于100PB。

  • 高吞吐量,如1PB数据排序需要在2小时内完成,每秒需要几十GB

  • 数据可靠性,在数据规模增长时,降低数据丢失

  • 服务高可用,99.95%意味着每年每年只有4-5小时不可用

  • 高效运维,将日常硬件处理做成流程化,对监控报警要有完善支持

  • 低成本,保证数据安全,正确服务稳定前提下,降低成本,才是分布式存储的核心竞争力

2 小概率事件对分布式系统挑战

单机系统下很少发生的事件,在大规模分布式系统中就会经常发生。

可能发生的小概率问题有:

1 磁盘错误

单机下运行稳定,集群下可能出现频繁。要考虑如何发现慢节点自动规避,发现机器宕机自动绕过。

2 Raid卡故障

发生在高可用节点上的事件。Raid卡是带有电池的缓存块,写入速度很快,能够在断电时保存数据。利用raid卡先缓存数据,之后再写入磁盘中。

3 网络故障

网络架构是一种树形结构,通过顶层交换机连接下层交换机,交换机下连接多台机器。

当上连交换机节点出错时,一部分主机将与其他主机分离,无法发挥作用。

可以将关键角色分布在不同的交换机下,将数据存储多份,某些机器失效时还可以访问到数据。

4 电源故障

由于在数据存储时为了保证速度,通常会先把数据写入MemCache中,然后返回OK响应。但是此时数据并没有持久化存储,当断点故障发生时,需要保证数据能够存储下来。丢失后如何修复也是问题。

5 数据错误

可能出现在磁盘,网络,内存保存过程中等。

可以用CRC校验等方式提供校验手段,保证数据正确性。

6 系统异常

Linux系统时钟每台机器不同,需要NTPserver来进行同步,但是在同步过程中,机器上可能出现时钟跳变,对数据造成异常。

Linux将所有设备抽象为文件,当某个磁盘出错,会影响到网络,内存等各个设备

7 热点

当某个用户使用某个资源很满时,会使机器负载很高从而可能宕机,并且热点是可能不断迁移的。

8 软件缺陷

如果软件设计时没有考虑分布式系统特点,可能造成问题。

如当进程失败时或出错重试时,切换文件,会造成Meta Server中的Meta越来越多,造成内存溢出。

当Data Server重启时会向Meta Server进行Block Report数据汇报,当多台机器人同时重启时,会造成Meta服务不可用等问题

将分布式系统当做单机系统可能会造成服务不可用

9 误操作

人为的操作失误等

3 常见分布式系统

HDFS

开源架构,分三个模块。

nameNode,存储meta信息,存储了文件名,文件长度,位置信息等

datanode,保存实际的数据,集群模式

client端,提供appendonly协议,稳定性比较好

namenode只传输控制信息,流量小,DataNode流量大,但是是分布式集群的

Ceph

用于块存储的架构。

osd是对象存储单元,monitor是监控单元,当osd发生故障时,monitor会发起数据复制。

上层有mds模块,用于存储对象的meta信息,对外呈现文件系统。在Linux内核开发了专门的模块,并提供了rest接口,有自己的gateway,能够很好地访问。

没有中心节点,稳定性比较好。

Pangu

阿里云开发

架构和hdfs相似,但是namenode是集群的,具有很多特性

安全访问认证
Checksum
配额管理和审计
数据多备份
异常恢复机制
磁盘自动上下线
回收站
热升级
动态扩容/缩容
数据聚簇
流控和优先级
在线监控离线分析
热点和慢盘规避
混合存储

4 分布式存储设计要点

1 写入流程

链式写入

client端发送写请求到master,master返回写入地址数组。client向第一个写地址节点写入数据,第一个节点再向后继续传输,到达最后一个节点后,向前返回写入OK响应,最终回到client端,写入结束。

可以充分利用网络流量,适合从集群外导入数据。但是延迟会比较大。高吞吐量,高延迟。

链式异常写入

在链式传输中,节点2故障,导致节点1无法向下传输,此时可以采用

  • 跳过节点2,直接传给节点3,减低数据安全性,提高传输成功率
  • 新增节点4,传给节点3之后传给4,提高数据安全性,减低传输成功率
  • seal and new,重新从master获得新的地址列表,向新的地址列表传输,但是chunk长度不定,meta增多等

主从模式

使用星型辐射方式传输,从primary CS向多个Replica CS传输,所有Replica写入成功后,primary CS返回成功响应。

减少了延时,但是网络利用率低,对流量较高的应用不合适。网络链路短。

2 读流程

  • 向mater获取读取的节点列表,每个节点都是数据的一个副本,读取任意一个成功即可。如果失败,则尝试下一个节点。延迟会比较大。

  • backup read 同时访问返回的所有副本节点,收到一个成功返回后,发送cancel命令,终止其他请求。可能造成IO浪费。

  • 建立响应时间列表,估算每个节点的返回时间。从master获得列表后,先选择时间最短的节点访问,如果失败或超时,继续下一个最短的,成功之后更新响应时间列表。能够找到最优节点,绕开热点。

3 QoS

多用户下的QoS保证

将用户请求放入不同优先级的队列中,从不同队列中取出请求进行处理。

在同一个队列中,不同用户发起请求的数量不同,此时通过记录请求数量设计平衡方法,避免同一个用户占满队列。

4 checkSum

每一段数据会生成一个三元组,包括数据buffer,length,CRC值。

在网络传输时进行分包,每个分包也会生成一个三元组,在保存到磁盘时也会保存CRC值。在各个阶段都保证校验机制。

CRC可以和数据存储在一起,访问速度快,但可能同时出错,相互验证。

分离存储,需要两次访问磁盘。

5 Replication

防止机器损坏时,数据备份不够丢失。需要在磁盘错误时及时复制数据。对于出错机器上的数据快速恢复。查找所有可复制的源,向尽量多的目的复制,充分利用每台机器的流量。数据复制时,根据数据丢失的危险性设置不同优先级。

在复制数据过程中,需要流量控制,避免因为复制数据造成集群不可用,引起更大问题。

trunk server ———盘古master之间用心跳机制

6 Rebalance

数据均衡和数据备份的区别在于,数据安全性。

新增机器,负载不均衡。

需要充分利用多台机器的带宽,复制要有优先级,流量控制要严格。

7 GC

什么时候需要垃圾回收?

  • 数据被删除时,通常采用异步方式,被删除数据要垃圾回收

  • 数据写入失败,脏数据留在磁盘上,数据版本升级后,存在的旧版本需要回收

  • 机器宕机,发现数据拷贝数不够,数据恢复后数据拷贝数量多

8 Erasure Coding

数据压缩

对于m份用户数据,计算出n份编码块,总共占用存储空间m+n,存储效率优于多份复制的效率

并且m+n份数据中,允许n份数据全部丢失,安全性更高。丢失的数据可以通过相邻的数据块和编码块进行恢复。一般用于冷数据存储中。

5 元数据的高可用和拓展性

1 高可用性方案

主从方式

一个主服务器,其他为从服务器,通过锁互斥技术进行选举

数据一致性通过共享存储,主节点将数据更改日志保存到共享存储,从节点根据协议进行更新

主从方式需要依赖其他模块,如分布式锁

盘古采用主从模式,通过选举方式确定主节点

Ceph也是处从模式,通过心跳进行切换,自身具备共享存储能力

分布式协议

Paxos/Raft协议,完成切换和状态同步,不依赖其他模块,能够自包含

Paxos协议的关键点

  • 大多数协商一致

  • 两阶段协商协议

  • 协议号递增且需要持久化

proposer接收用户请求,发起prepare请求到acceptor,如果大多数节点同意请求,则返回成功。

Paxos协议很复杂,很少使用。Raft协议是对Paxos的简化。

2 可拓展性

HDFS NameNode可拓展性

通过对目录树的切换,使各个目录树之间隔离,从而进行拓展

Ceph MetaData Server

基于MDS切换,有效解决了元数据水平拓展能力。实际使用较少

6 混合存储

不同介质的存储特性

磁盘 SSD 内存
容量 1-4TB 400-800GB 24-128GB
延时 10ms 50-75us 100ns
吞吐 100-200MB/s 400MB/s 20GB/s
成本

本地存储加内存来实现最高的性能

HDFS的混合存储

DataNode将本地的SSD和SATA磁盘会区分开,暴露给用户磁盘信息,用户可以选择数据存储在不同的介质上。

NameNode上会划分不同的volume,对应不同的存储介质

盘古混合存储

用户存储直接缓存到SSD,后台再拆分存储到不同介质上,用户感知不到磁盘介质

RAMCloud

用户存入内存直接返回,对内存建立索引,数据连续存储到内存中,异步进行持久化。读取根据内存索引。

相关标签: 分布式存储