磨刀不误砍柴工,学好这些FusionStorage理论才能使用好这个产品。

前言

本文主要介绍了华为分布式存储产品FusionStorage,详细阐述其存储原理,架构,读写机制等等。

主要功能特性

FusionStorage分布式存储软件总体框架

FusionStorage分布式存储软件总体框架

FusionStorage块存储功能-SCSI/iSCSI块接口

FusionStorage通过VBS以SCSI或iSCSI方式提供块接口:

  • SCSI方式:安装VBS的物理部署、 FusionSphere或KVM等采用SCSI方式;
  • iSCSI方式:安装VBS以外的虚拟机或主机提供存储访问,VMware、MS SQLServer集群采用iSCSI模式。
    SCSI/iSCSI块接口

FusionStorage精简配置功能

  • 相比传统方式分配物理存储资源,精简配置可显著提高存储空间利用率
  • FusionStorage天然支持自动精简配置,和传统SAN相比不会带来性能下降。
    FusionStorage精简配置功能

FusionStorage快照功能

  • FusionStorage快照机制,将用户卷数据在某个时间点的状态保存下来,可用作导出数据恢复数据之用。
  • FusionStorage快照数据在存储时采用ROW(Redirect-On-Write)机制,快照不会引起原卷性能下降。
  • 无限次快照:快照元数据分布式存储,水平扩展,无集中式瓶颈,理论上可支持无限次快照。
  • 卷恢复速度快:无需数据搬迁,从快照恢复卷1S内完成(传统SAN在几小时级别)。
    FusionStorage快照功能

FusionStorage链接克隆功能

  • FusionStorage支持⼀个卷快照创建多个克隆卷,对克隆卷修改不影响原始快照和其它克隆卷。
  • 克隆卷继承普通卷所有功能:克隆卷可支持创建快照、从快照恢复及作为母卷再次克隆操作。
  • 支持批量进行虚拟机卷部署,在1秒时间内创建上百个虚拟机卷。
  • 支持1:2048的链接克隆比,提升存储空间利用率。
    FusionStorage链接克隆功能

FusionStorage自定义存储SLA

  • 根据业务诉求,用户可自定义多种资源池SLA规格
  • 同⼀个虚拟机的不同的数据卷可归属不同的存储池
    FusionStorage自定义存储SLA

FusionStorage跨资源池的卷冷迁移

跨资源池只支持冷迁移。
跨资源池卷冷迁移:把卷从源资源池 迁移到目的资源池,即【创建目标卷】 ->【卷数据复制】 ->【删除源卷】 ->【目标卷改名】 ->【完成】 整个过程的实现。

  • 迁移过程中,源卷不能有写数据的操作,所以叫做“冷”迁移。
  • 亦可通过工具调用复制接口。

场景1:资源池之间的容量平衡,容量满的池 迁移到⼀个空闲的池。
场景2: 卷在不同性能的资源池池之间的迁移,从低性能的池向高性能的池迁移。
FusionStorage跨资源池的卷冷迁移

FusionStorage弹性扩展

FusionStorage扩容后,容量、性能、带宽、缓存等整体提升。
FusionStorage弹性扩展

分布式SSD Cache加速

  • FusionStorage集群内各服务器节点的缓存和带宽都均匀分布到各个服务器节点上,不存在独立存储系统中大量磁盘共享计算设备和存储设备之间有限带宽的问题。
  • FusionStorage支持将服务器部分内存用作读缓存, NVDIMM和SSD用作写缓存,数据缓存均匀分布到各个节点上,所有服务器的缓存总容量远大于采用外置独立存储的方案。即使采用大容量低成本的SATA硬盘,FusionStorage仍然可以发挥很高的IO性能,整体性能提升1~3倍。
  • FusionStorage支持SSD用作数据缓存,除具备通常的写缓存外,增加热点数据统计和缓存功能,加上其大容量的优势,进一步提升了系统性能。
    分布式SSD Cache加速

FusionStorage Cache写机制

  • OSD在收到VBS发送的写IO操作时,会将写IO缓存在SSD cache后完成本节点写操作。
  • OSD会周期将缓存在SSD cache中的写IO数据批量写入到硬盘,写Cache有一个水位值,未到刷盘周期超过设定水位值也会将Cache中数据写入到硬盘中。
  • FusionStorage支持大块直通,按缺省配置大于256KB的块直接落盘不写Cache,这个配置可以修改。
    FusionStorage Cache写机制

FusionStorage大块直通

  • 从下面的性能数据看,对于小块随机IOPS,SSD对HDD存在明显的性能优势。
  • 在大块顺序IO的场景下,虽然SSD卡存在较大带宽优势,但SSD盘受SAS/SATA接口带宽的影响,和HDD相比,优势并不明显。
  • 考虑到⼀个SSD盘会同时会给多个硬盘作为Cache使用,当⼀个SSD盘同时给超过5个HDD作为Cache时,直接操作HDD反而性能会更高。
  • 大块IO性能会更佳;
  • 释放原来大块IO占用的Cache空间,可以缓存更多的随小块IO, 变相提高了随机小块IO的Cache命中率,提升系统整体性能
  • 提高写IO操作次数,提升SSD卡使用寿命
    FusionStorage大块pass throught

FusionStorage Cache读机制

FusionStorage的读缓存采用分层机制

  • 第⼀层为内存cache, 内存cache采用LRU机制缓存数据。
  • 第二层为SSD cache, SSD cache采用热点读机制,系统会统计每个读取的数据,并统计热点访问因子,当达到阈值时,系统会自动缓存数据到SSD中,同时会将长时间未被访问的数据移出SSD。
  • 第三层为SSD write写缓存
  • 第四层为HDD机械磁盘。

FusionStorage预读机制,统计读数据的相关性,读取某块数据时自动将相关性高的块读出并缓存到SSD中。
Cache读机制

动态Cache调整

  • 分布式存储都支持SSD作为Cache, 部分厂商只提供读Cache, 部分厂商提供读写Cache。
  • 对于读写Cache的厂商,基本上都采用读写Cache静态配置的方法,缺省按照70:30的比例配置
    该配置对于读写均衡性场景来说,可以让系统整体运行良好,但是业务千变万化,应用场景也千变万化。有的场景是以读为主(OLAP) 场景,有的场景以写为主,静态配置会导致SSD空间的浪费,无法发挥系统最大的效率。
  • 华为FusionStorage支持根据系统运行场景,自动均衡配置读写Cache的比例,让SSD Cache在最大程度上发挥作用。

FusionStorage掉电保护

  • 系统运行过程中可能会出现服务器突然掉电的情况, FusionStorage使用保电介质来保存元数据和缓存数据,以防掉电而丢失。
  • FusionStorage支持的保电介质为NVDIMM内存条或SSD。 程序运行过程中会把元数据和缓存数据写入保电介质中,节点异常掉电并重启后,系统自动恢复保电介质中的元数据和缓存数据。
    FusionStorage掉电保护

数据可靠性

FusionStorage跨服务器故障容忍

  • 数据可靠是第⼀位的, FusionStorage建议3副本配置部署。
  • Google, facebook的副本数>=3副本。
  • 左侧双故障节点情况,为3副本情形下。
  • 如果服务器在同⼀个机柜,无法抗拒机柜整体断电断网等故障类型。
    FusionStorage跨服务器故障容忍

FusionStorage跨机柜故障容忍

  • 机柜间要求有独立网络和电力供应。
  • 如果机柜整体在同⼀个机房,无法抗拒机房整体断电断网,自然灾害等故障类型。
  • 小于12台服务器不能使用机柜级安全。
  • 超过64台服务器,必须使用机柜级安全 。
    FusionStorage跨机柜故障容忍

FusionStorage跨机房故障容忍

FusionStorage跨机房故障容忍

FusionStorage快速数据重建

  • FusionStorage中的每个硬盘都保存了多个DHT分区(Partition),这些分区的副本按照策略分散在系统中的其他节点。当FusionStorage检测到硬盘或者节点硬件发生故障时,自动在后台启动数据修复。
  • 由于分区的副本被分散到多个不同的存储节点上,数据修复时,将会在不同的节点上同时启动数据重建,每个节点上只需重建一小部分数据,多个节点并行工作,有效避免单个节点重建大量数据所产生的性能瓶颈,对上层业务的影响做到最小化。
     FusionStorage快速数据重建

DHT数据路由原理

基础概念

  • 资源池:FusionStorage中⼀组硬盘构成的存储池。
  • Volume:应用卷,代表了FusionStorage向上层呈现的一个逻辑存储单元。
    资源池
    数据副本: FusionStorage采用数据多副本备份机制来保证数据的可靠性,即
    同⼀份数据可以复制保存为2~3个副本。
    数据副本
  • DHT:Distributed Hash Table,FusionStorage中指数据路由算法。
  • Partition:代表了⼀块数据分区,DHT环上的固定Hash段代表的数据区。
  • Key-Value:底层磁盘上的数据组织成Key-Value的形式,每个Value代表⼀个块存储空间。
    DHT

FusionStorage数据路由原理

FusionStorage数据路由采取分层处理方式:

  • VBS通过计算确定数据存放在哪个服务器的哪块硬盘上。
  • OSD通过计算确定数据存放在硬盘的具体位置。
    FusionStorage数据路由原理

FusionStorage视图

  • IO View: partition和主osd节点的映射关系。
  • Partition View: partition对应的主备osd关系, ioview是partitionview的⼦集。
  • MDC通过心跳感知OSD的状态; OSD每秒上报给MDC特定的消息(比如: OSD容量等),当MDC连续在特定的时间内(当前系统为5s) 没有接收到OSD的心跳信息,则MDC认为该OSD已经出故障(比如: OSD进程消失或OSD跟MDC间网络中断等), MDC则会发送消息告知该OSD需要退出, MDC更新系统的OSD视图并给每台OSD发送视图变更通知, OSD根据新收到的视图,来决定后续的操作对象。
  • 多副本复制取决于MDC的视图;两副本情况下,当client发送⼀个写请求到达该OSD的时候,该OSD将根据视图的信息,将该写请求复制⼀份到该Partition的备OSD。 多副本情况下,则会复制发送多个写请求到多个备OSD上。
    FusionStorage视图

DHT数据路由过程

  • 系统初始化时, FusionStorage将哈希空间(0~2^32)划分为N等份,每1等份是1个分区(Partition), 这N等份按照硬盘数量进行均分。
    例如:⼆副本场景下,系统N默认为3600,假设当前系统有36块硬盘,则每块硬盘承载100个分区。上述“分区-硬盘”的映射关系在系统初始化时会分配好,后续会随着系统中硬盘数量的变化会进行调整。该映射表所需要的空间很小,FusionStorage系统中的节点会在内存中保存该映射关系,用于进行快速路由。
  • FusionStorage会对每个LUN在逻辑上按照1MB大小进行切片,例如1GB的LUN则会被切成1024*1MB分片。当应用侧访问FusionStorage时候,在SCSI命令中会带上LUN ID和LBA ID以及读写的数据内容, OS转发该消息到本节点VBS模块, VBS根据LUN ID和LBA ID组成⼀个key, 该key会包含LBA ID对1MB的取整计算信息。通
    过DHT Hash计算出⼀个整数(范围在0~2^32内),并落在指定Partition中;根据内存中记录的“分区-硬盘”映射关系确定具体硬盘, VBS将IO操作转发到该硬盘所属的OSD模块。
  • 每个OSD会管理⼀个硬盘,系统初始化时, OSD会按照1MB为单位对硬盘进行分片管理,并在硬盘的元数据管理区域记录每个1MB分片的分配信息。 OSD接收到VBS发送的IO操作后,根据key查找该数据在硬盘上的具体分片信息,获取数据后返回给VBS。 从而完成整个数据路由过程。
  • 举例说明:应用需要访问LUN1+LBA1地址起始的4KB长度的数据,首先构造key=LUN1+LBA1/1M, 对该key进行HASH计算得到哈希值,并对N取模,得到partition号,根据内存中记录的“分区-硬盘“映射表可得知数据归属的硬盘。

组件功能及相互关系

FusionStorage VBS模块及处理流程

VBS模块作为FusionStorage系统存储功能的接入侧,负责完成两大类业务:

  • 卷和快照的管理功能
  • IO的接入和处理

VBM模块负责完成卷和快照的管理功能:创建卷、挂载卷、卸载卷、查询卷、
删除卷、创建快照、删除快照、基于快照创建卷等
VBS模块

FusionStorage OSD模块及处理流程

FusionStorage存储池管理的每个物理磁盘对应⼀个OSD进程, OSD负责:

  • 磁盘的管理
  • IO的复制(主备)
  • IO数据的Cache处理
    FusionStorage OSD模块及处理流程

FusionStorage MDC模块功能

MDC(Metadata Controller)是一个高可靠集群,通过HA(High Availability)机制保证整个系统的高可用性和高可靠性:

  • 通过ZooKeeper集群,实现元数据(如Topology、 OSD View、 Partition View、VBS View等)的可靠保存
  • 通过Partition分配算法,实现数据多份副本的RAID可靠性
  • 通过与OSD、 VBS间的消息交互,实现对OSD、 VBS节点的状态变化的获取与通知
  • 通过与Agent间的消息交互,实现系统的扩减容、状态查询、维护等
  • 通过心跳检测机制,实现对OSD、 VBS的状态监控

Zookeeper(简称ZK) 分布式服务框架主要用来解决分布式应用中经常遇到的,如:统⼀命名服务、状态同步服务、集群管理、分布式应用配置项的管理等,ZK主要工作包括三项:

  • MDC主备管理: MDC采用⼀主两备部署模式;在MDC模块进程启动后,各个MDC进程会向ZK注册选主,先注册的为主MDC;运行过程中,ZK记录MDC主备信息,并通过心跳机制监控MDC主备健康状况,一旦主MDC进程故障,会触发MDC重先选主。
  • 数据存储:在MDC运行过程中,会生成各种控制视图信息,包括目标视图、中间视图、 IO视图信息等,这些信息的保存、更新、查询、删除操作都通过ZK提供的接口实现。
  • 数据同步:数据更新到主ZK, 由主ZK自动同步到两个备ZK,保证主备ZK数据实时同步。⼀旦ZK发生主备切换,业务不受影响。

FusionStorage主机模块交互关系

  • 系统启动时, MDC与ZK互动决定主MDC。 主MDC与其它MDC相互监控心跳,主MDC决定某MDC故障后接替者。其它MDC发现主MDC故障又与ZK互动升任主MDC。
  • OSD启动时向MDC查询归属MDC,向归属MDC报告状态,归属MDC把状态变化发送给VBS。 当归属MDC故障,主MDC指定⼀个MDC接管,最多两个池归属同⼀个MDC。
  • VBS启动时查询主MDC,向主MDC注册(主MDC维护了一个活动VBS的列表,主MDC同步VBS列表到其它MDC,以便MDC能将OSD的状态变化通知到VBS),向MDC确认自己是否为leader;VBS从主MDC获取IOView,主VBS向OSD获取元数据,其它VBS向主VBS获取元数据。
    FusionStorage主机模块交互关系

IO流程分析

FusionStorage读IO流程

  • APP下发读IO请求到OS, OS转发该IO请求到本服务器的VBS模块;VBS根据读IO信息中的LUN和LBA信息,通过数据路由机制确定数据所在的Primary OSD; 如果此时Primary OSD故障,VBS会选择secondary OSD读取所需数据。
  • Primary OSD接收到读IO请求后,按照Cache机制中的“Read cache机制”获取到读IO所需数据,并返回读IO成功给VBS
    FusionStorage读IO流程

FusionStorage写IO流程

  • APP下发写IO请求到OS, OS转发该IO请求到本服务器的VBS模块;VBS根据写IO信息中的LUN和LBA信息,通过数据路由机制确定数据所在的Primary OSD。
  • Primary OSD接收到写IO请求后,同时以同步方式写入到本服务器SSD cache以及数据副本所在其他服务器的secondary OSD, secondary OSD也会同步写入本服务器SSD cache。 Primary OSD接收到两个都写成功后,返回写IO成功给VBS;同时,SSD cache中的数据会异步刷入到硬盘。
  • VBS返回写IO成功,如果是3副本场景,primary OSD会同时同步写IO操作到secondary OSD和third OSD。
    FusionStorage写IO流程

FusionStorage数据处理过程

FusionStorage数据处理过程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章