华为FusionStorage,分布式块存储软件,SDS,是一款可大规模横向发展的软件定义存储产品,通过存储系统软件将标准服务器的本地存储资源组织起来,构建全分布式存储池,实现一套存储向上层应用提供块、文件和对象三种存储服务,满足结构化和非结构化等多类型数据存储需求。FS具有保电内存,掉电以后内存不丢失
早期的FusionStorage成为Server SAN,用服务器替代SAN存储(块存储和文件存储),安装SDS(软件即存储,使用软件替代存储)软件,由多个独立服务器自带的存储组成一个存储资源池,同时融合了计算和存储资源。
Server SAN:
概念:由多个独立服务器自带的存储组成一个存储资源池,同时融合了计算和存储资源。
特征:专有设备变通用设备,计算与存储线性扩展,简单管理、低TCO
FusionStorage:
概念:FusionStorage是为了满足云计算数据中心存储基础设施需求而设计的一种分布式存储软件,将通用的X86服务器的本地HDD、SSD等介质通过分布式技术组织成大规模存储资源池,对非虚拟化环境的上层应用和虚拟机提供工业界标准的SCSI和ISCSI接口,并且具有开放的API,类似一个虚拟的分布式SAN存储。
特征:FusionStorage块存储具有高扩展性、高性能、高可靠性、高安全性以及高易用性等特点,提供了双活、远程复制、快照等丰富的数据保护技术、具备重删和压缩、精简配置、Qos、Cache等搞笑的空间及性能分配技术,广泛兼容各种虚拟化平台及应用。
- 大规模线性扩展和弹性:FusionStorage块存储采用DHT架构,将所有元数据按规则分布在各存储节点,不存在跨节点元数据访问,彻底避免了元数据瓶颈。
- 高性能:FusionStorage块存储分布式的SSD cache技术,配合大容量的SATA盘作为主存,使得系统的性能可以具备SSD的性能和SATA的容量在使用HDD作为主存时,将各个存储节点上的SSD组建成为一个共享的分布式Cache资源池,供所有的业务共同所用,实现HDD主存的性能加速。
- 高可靠性:FusionStorage采用分布式集群管理方式,系统全冗余部署,无单点故障,支持多副本和EC(纠删码)数据冗余保护机制,支持设置灵活的数据可靠性,后台数据一致性校验等数据完整性校验功能。
- 高安全性:
- 存储网络可以划分为管理、业务、存储、BMC和仲裁网络(双活),网络之间通过设置VLAN进行通信隔离,增强系统安全
- 如果操作系统使用的是FusionStorageOS,支持系统进行安全加固,并且会定期发布漏洞补丁
- 对于写入存储系统的数据支持采用加密盘和内置的秘钥管理服务方式进行数据加密存储
- 登入接口采用安全的鉴权机制,使用不同的账号进行不同的业务操作,支持对账号密码进行修改、重置;支持通过HTTPS方式传输数据,保证数据在传输环节不被泄漏。
- 高易用性:FusionStorage支持网络拓扑统一管理,管理维护高效集中,简洁易用。
- 支持兼容:
- FusionStorage支持各种存储介质,如SATA、NL-SAS、SAS、SSD卡、SSD盘等,并且这些都可以作为FusionStorage的主存;支持网络介质,允许采用Infiniband、10GE/GE等将存储服务器互联,FusionStorage可以支持这些网络环境。
- 支持工业界标准的SCSI和ISCSI接口,可以与各种VMM集成,如XEN、KVM、VMware,包括在此基础上的各厂家增强的虚拟化平台
- 支持各种应用,如数据库相关的SQL Server、RAC、DB2等等
- 持续更新:FusionStorage采用模块化设计,个存储服务器可以通过微服务升级和更新;滚动升级,按节点和存储池批量滚动升级,降低了升级对系统的业务影响及升级风险,提升了升级效率。
FusionStorage块存储当前的主要应用场景分为两大类:
- 资源池:将通用存储服务器池化,建立大规模块存储资源池,可以和各种虚拟化平台集成,如华为FusionSphere、VMware vSphere、开源OpenStack等,按需分配存储资源
- 数据库:一SSD作为Cache或主存,极大的提升了存储系统的性能,又保留了分布式存储的高扩展性基因,从而解决了企业关键数据库,关键ERP等应用的高性能需求
FusionStorage架构
- FusionStorage Manager:FSM,FusionStorage管理进程模块,提供告警、监控、日志、配置等操作维护功能,是虚拟机装在FC或者是OpenStack,一般情况下FSM主备节点部署,安装管理节点时启动FSM进程。
- FusionStorage Agent:FSA,代理进程,装在物理服务器上面,部署在各节点上,一般在节点上面部署单数进程。实现各节点和FSM通信。FSA包含MDC、VBS和OSD三种不同的进程,根据不同系统配置要求,在不同的节点上启用不同的进程组合来完成特点的功能,安装存储节点和计算节点时启动FSA进程。
- MDC:MetaDataController,集群状态管理,实现对分布式集群的状态控制,以及控制数据分布式规则、数据重建规则等。FusionStorage的核心灵魂,默认部署在三个节点的ZK盘上,通过ZK(ZK的主要工作,投标选主,MDC主备管理,数据存储,数据同步,必须为单数,需保证大于总数一半的ZK处于活跃状态)来选举MDC领导者,剩下的两台帮助领导者工作,当主MDC出现故障,剩下两台通过ZK再次选举一个领导者。保证集群的可靠性。通过HA机制保证整个系统的高可用性和高可靠性。形成MDC控制集群,一个系统最多启动96个MDC。
- VBS:Virtual Block System,虚拟块存储管理组件,计算,负责对元数据的管理,提供分布式集群接入,是计算资源能够通过VBS访问分布式存储资源,每个节点上默认部署一个VBS进程,形成VBS集群,节点上也可以部署多个VBS提升IO性能。向MDC确认自己是否为领导者,VBS从主MDC获取IO。VBS通过计算确定数据存放在哪个服务器的哪块硬盘上,VBS负责完成卷和快照的管理功能,IO的接入和处理。
块存储类型:①SCSI:直接在HOST OS上部署VBS,IO通过总线到达VBS、KVM、LINUX、XEN、FusionSphere
②ISCSI:通过IP网络访问VBS,IO通过封装在IP网络传输,安装VBS外的虚拟机或主机提供访问存储,到达VBS后解封装,适用于大多数场景,性能次于SCSI。
- OSD:Object Storage Device,对象存储设备服务,执行VBS下发的具体的IO操作,在每个服务器上部署多个OSD进程,一块磁盘默认对应部署一个OSD进程,主要功能是接管底层存储介质,向上模拟出块对象存储,并处理VBS下发的IO流程,提供持久化存储。SSD卡作为主存时,充分发挥性能可以再一张SSD卡上面部署多个OSD。FusionStorage是副本机制,多副本一主机制。OSD通过计算确定数据存放在硬盘的具体位置,硬盘IO操作由OSD来完成IO的复制、IO数据的Cache处理。
部署方式:
计算节点——运行应用系统的服务器 存储节点——提供存储资源的服务器
对接FusionCompute时,CNA作为VBS节点,同时使用SCSI协议进行传输
FusionStorage支持以下两种部署方式:
融合部署:将VBS(计算)和OSD(存储)部署在同一台服务器中,即作为存储节点也作为计算节点。虚拟化应用推荐采用融合部署的方式部署,CPU和内存硬盘都来自同一服务器性能会很快
分离部署:指的是将VBS和OSD分别部署在不同的服务器中,高性能数据库应用则推荐采用分离部署的方式,因为分离部署OSD会给数据资源,让其独自运行
FusionStorage和传统存储有什么优缺点:
传统存储 | FusionStorage |
---|---|
优点 | |
性价比不高,随性能提升大幅增加,存储更新换代速度快 | 支持融合部署,X86服务器堆叠扩展,节约成本,扩容简单,设备利旧、保护投资 |
机头(控制端)瓶颈,双控——16控,无法线性扩展 | 分布式控制器,可线性扩展至4096节点 |
元数据服务集中于机头,易出现性能瓶颈 | 元数据服务有分布式控制器提供 |
IO集中于有限的机头,易出现IO瓶颈 | IO由无状态的分布式软件机头提供 |
Cache通常为控制器主存GB级别 | 分布式Cache扩展至TB |
网络瓶颈:10GE、8G FC | 采用高速连接总线,P2P无阻塞高速IB网络,56GInfiniband RDMA(直接内存读取) |
存储资源缺乏共享,不易管理 | 数据中心级资源共享统一管理 |
硬盘故障需立即更换,实时手动恢复 | 提高机柜间、服务器间可靠性,故障业务无影响,硬盘故障无需手动管理,自动数据重建恢复 |
数据重建慢,重建1TB需要12小时 | 数据分布跨服务器、机柜故障后在全资源池内重建数据,重建1TB数据小于10分钟 |
受限于架构,最多只能达到16个控制器 | 通用架构,软件架构,SDS,线性扩容 |
缺点 | |
100TB以下数据读写,推荐使用传统存储 | 至少三节点起步,并且在节点数据达到一定规模才可以赶上数据存储 |
支持远程复制,双活 | 不支持 |
小规模场景下,传统存储实施简单 | 小规模场景下,FusionStorage实施复杂 |
支持容灾 | FusionStorage通过上层才可以完成容灾 |
DHT分布式哈希环:
DHT:分布式哈希表,FusionStorage中数据路由算法,路由、路径选择 FusionStorage将OSD提供上来的存储分成了0——32^2-1环形存储空间
Partition:块空间,代表一块数据区,每份一个Partition,一个Partition对应一个OSD,Partition用来存储Key,Partition分区固定式3600个。
Key-Value:LUN ID+Lba(逻辑块地址) ID/1m取整,余数=offset,0键值对,每个Value代表一个减值块存储空间 Lba ID:数据块在LUN中的偏移量,Lun设备的具体位置,逻辑区块地址 offset:数据在Value块内的偏移量
LUN空间切割成1M的块,硬盘的Value区也切割成1M的块,形成映射关系,每个1M的空间对应一个Key,每个Key对应硬盘中1块区域(1M空间)所以叫Key-Value。
资源池:FusionStorage中一组分区构成的资源池,对应到DHT环
通过哈希寻址找到数据所在的磁盘,多副本机制来保证数据的可靠性,同一份数据可以备份2-3个。
FusionStorage利用DHT分布式hash算法,将OSD提供上来的磁盘分成了2的32次方个地址块。每一个地址块用LBA ID作唯一标识,由于此地址空间过大,FusionStorage存储系统为了更好的管理与查找LBA ID,便将多个LBA ID组成的连续地址空间划分为一个Partition(区),一个Partition对应一个OSD也就是对应一个磁盘,DHT分布式hash算法的作用就是保存LBA ID与Patition的对应的关系(即LBA ID属于哪个一个Partition),与Patition对应OSD的关系(即Partition用到了哪个OSD提供上来的地址空间)。
将操作系统的SCSI命令中的key提取出来,VBS计算出Key,通过哈希运算,哈希环找到哈希值,哈希值确定访问数据内容落到DHT环上的哪块Partition上,根据Partition和Disk的对应关系(系统初始化时形成),确定数据存放在那个服务器上的哪块盘上,再通过OSD通过计算确定数据存放在硬盘的具体位置以及元数据区,并将获取的数据返回给VBS,确定磁盘和磁盘数据所在位置。
读写数据:
写数据:当VBS收到写IO时,将数据转为Key-Value形式,然后将Key存入Partition中,然后通过IO View找到主OSD,将数据写入主OSD中。 主OSD通过PartitionView找到备OSD,将数据同步到备OSD。
读数据:VBS收到读IO,算出Key、offset、Len,根据Key找到对应Partition,得到Partition的ID后通过IO View找到主OSD,再从主OSD对应的硬盘中找到Key对应的Value块,再根据offset去定位数据的起始位置,再根据Len算出文件的结尾。
存储池内数据同步,重构由主OSD完成,当主OSD故障,由MDC重新选主。
Cache:
主存为机械硬盘时,必须配缓存,可以是SSD卡也可以是SSD盘
同一资源池的存储节点上,缓存的类型、数量必须一致
读Cache:首先去找内存,再找读Cache,然后再写Cache,最后再找机械硬盘。
写Cache:先写内存,由内存写入Cache,最后写入机械硬盘完成落盘(周期写、水位值写、大块直通,大于256KB直接落盘不写Cache,这个配置可以修改)
FusionStorage模块交互关系:
系统启动时,MDC与ZK互动决定主MDC,主MDC和其他MDC相互监控心跳,主MDC指定一个备MDC,主MDC故障升备MDC为主。
OSD启动向MDC查询归属MDC,向归属MDC报告状态,归属MDC把状态变化发送到VBS,当归属MDC故障,主MDC指定一个MDC接管,最多两个池归属同一个MDC。
VBS启动时查询主MDC,向主MDC注册,主MDC确认自己是否为leader,VBS从主MDC获取IO View,主VBS向OSD获取元数据,其他VBS向主VBS获取元数据。
单资源池服务器数:
2副本:3——16台服务器,12——96块硬盘 3副本:4——255台服务器,12——2048块硬盘
机柜级至少要12台服务器,超64台服务器必须选择机柜级
服务器之间硬盘数相差不能超2块且容量不能超20%
数据副本随机分配到其他服务器上面,不是连续的
跨机柜容灾、跨地区容灾
事务处理型数据库OLTP 随机小IO读写,对IO要求较高,对可靠性较高
数据仓库型数据库OLAP,顺序IO读写