ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

FusionStorage白皮书拆解:从分布式存储架构到部署验收的工程指南

FusionStorage白皮书拆解:从分布式存储架构到部署验收的工程指南 简介《华为FusionStorage技术白皮书》是一份官方发布的技术文档主要面向存储架构师、云运维工程师、企业IT选型人员以及对分布式存储技术感兴趣的进阶学习者。资源包仅包含1个PDF文件压缩后大小约7.52MB便于离线阅读。文档共分为概述、产品价值、产品架构、数据服务、块存储、对象存储、文件存储七大部分系统梳理了FusionStorage技术从背景演进到应用落地的主线。其中产品架构部分重点介绍了软件架构设计涵盖存储控制器、存储节点、管理节点等关键组件的实现原理数据服务部分则分别对块存储、对象存储、文件存储的架构概述、关键业务流程和特性进行了深入拆解内容兼顾方案全景与实现细节。已有338人学习了该资源适合用于技术调研、方案对比和知识体系构建读者可通过这份白皮书快速掌握FusionStorage在统一存储、高性能、高可用等方面的设计思想与典型应用方式。1. FusionStorage技术白皮书先看懂它在解决什么问题再谈性能数字FusionStorage是华为的分布式存储软件形态它的核心思路是把一批服务器自带的本地盘聚合成一个统一存储池对外提供块、文件、对象等存储接口。技术白皮书里最容易被翻过去的部分反而是部署决策最该看的部分IO路径、副本与纠删码策略、故障域约束。很多人下载这份PDF是为了确认“能不能用、性能多高”但拿着性能数字去投标、去定硬件回来验收时才发现数字的测试条件和自己的业务负载对不上。下面按“架构—配置—部署—避坑”的顺序把白皮书里能直接指导落地的信息拆开并补充白皮书不会写的验收细节。2. 白皮书的架构主线DSFS、VBS、OSD、MDC这四个角色谁管什么2.1 为什么先读架构而不是先读性能把本地盘变成“一块大盘”这件事最关键的是元数据和数据怎么分开管理。FusionStorage的架构核心是一个分布式文件系统在资料里通常被称为DSFSDistributed Storage File System它把文件与块语义和物理磁盘解耦。读这份白皮书时先找“架构图”和“IO路径”这两节——它们比性能章节更能决定你这个集群能不能按预期工作。传统双控制器存储的思路是升级机头来获得更多性能而分布式存储的思路是加节点每加入一台服务器就同时增加CPU、内存、网络和磁盘。这个区别解释了为什么FusionStorage的扩容是“加节点”而不是“换设备”也解释了为什么白皮书会反复强调“横向扩展”。架构图能回答三个实际问题数据放在哪、元数据放在哪、客户端从哪里进入。这三个答案直接决定故障域怎么划分、扩容时数据要不要重分布、以及为什么某些节点故障会导致整个集群不可用。2.2 四个核心角色一张表看清职责FusionStorage白皮书的架构章节核心是几个角色的分工。第一次读的时候容易把它们混在一起我建议直接做一张对照表把每个角色对应到自己将要部署的服务器上角色职责部署位置故障时影响DSFS分布式文件系统负责数据切片与全局命名空间逻辑层跨所有节点命名空间失效数据无法寻址VBS虚拟块系统负责卷创建、地址映射和快照计算节点侧该卷无法映射给主机OSD对象存储设备负责数据落盘、副本写入和EC计算每个存储节点触发数据重建有冗余则业务不受影响MDC元数据控制器维护文件和对象的元数据控制节点新建卷、创建文件等控制操作失败ZooKeeper集群协调与主节点选举控制节点集群管理短暂不可用这个表在规划时非常好用OSD数量决定容量和吞吐MDC和ZooKeeper所在节点的可靠性决定控制面是否可靠VBS决定计算节点的IO路径长度。读白皮书时把架构图里的每个角色对应到你的服务器清单上这是一个值得花半小时做的练习比反复看性能数字有用得多。2.3 IO请求从客户端到磁盘的七步当一台计算节点上的应用发起一次写请求数据大致要经过应用进程 → 文件系统 → VBS地址映射 → 网络传输 → 目标节点OSD → 写缓存 → 数据落盘 → 返回确认。前两步消耗CPU中间两步消耗网络带宽后两步决定时延。白皮书里的IO路径图看的时候要特别注意“写请求是否经过缓存”和“读请求是否命中缓存”这两处。读请求和写请求的实际路径不太一样。写请求通常先落到缓存或日志盘再异步刷到数据盘所以时延相对低读请求如果命中缓存会很快但缓存未命中时必须从HDD或SSD读取时延一下子涨上去。如果业务是数据库这类小IO随机写瓶颈通常在OSD日志盘和网络时延如果业务是视频或备份这类大IO顺序写瓶颈通常在HDD聚合带宽。这一点直接决定你后续硬件选型看见“时延”数字时先问一句这个数字是读的还是写的、有没有缓存参与。2.4 读架构图最该停下来的两个细节第一个细节是计算节点本地盘是否被纳入存储池。FusionStorage常见有两种部署形态一种是独立存储节点专门做存储一种是计算节点带着本地盘一起组成存储池Server SAN形态。后者是很多方案里强调的“融合”卖点但它对计算节点的CPU和内存会有额外占用。遇到对可靠性要求很高的生产库我一般会建议独立存储节点避免业务负载和存储后台任务互相抢资源。第二个细节是后台自愈。白皮书会提到数据均衡、故障重建这类后台任务但很少强调这些任务要占用CPU、IO和网络资源。副本数越多、EC条带越大重建时读的数据量越大。规划容量与带宽时要按“正常业务峰值带宽 后台重建带宽”预留而不是只按业务峰值算。很多集群在出现单节点故障后业务变慢不是因为故障本身而是因为重建过程把带宽吃满了。3. 把性能数字变成配置决策副本、EC、硬盘布局和容量计算3.1 副本还是纠删码白皮书给范围选型要自己算白皮书通常会把三副本、两副本、EC 42、EC 63等方案都列出来并给出各自的可用容量和可靠性特征。但最终选哪个要结合你的故障域半径不能只看“数据冗余”那一页推荐了哪个就用哪个。三副本的可靠性最高但有效容量只有约33%EC 42能把有效容量做到约67%适合容量优先的大数据、备份场景EC 63的校验计算开销更高适合对写入性能不那么敏感的对象存储和归档场景。冗余方式有效容量比例可容忍节点故障典型场景3副本约33%2个节点核心数据库、虚拟化2副本约50%1个节点开发测试环境EC 42约67%2个节点视频、备份、大数据EC 63约67%3个节点对象存储、归档补充一个经验EC 63虽然节点故障容忍数更高但单个节点失效后编码计算压力更大对CPU有明确要求。如果你的存储节点CPU核数偏少EC 63重建时会明显拖慢正常业务。白皮书给出的是能力边界不是推荐配置选型必须用自己的硬件配置和业务模型去验证。3.2 容量利用率一个小脚本算清可用容量我一般会在规划阶段写一个小脚本把几种冗余方案的可用容量一次性算出来方便跟业务方对齐# 计算不同冗余方案的可用容量单位TB def calc_usable(raw_capacity_tb, redundancy_type, reserve_ratio0.12): # reserve_ratio 为预留比例用于数据重建和故障转移建议 0.10~0.15 usable_after_reserve raw_capacity_tb * (1 - reserve_ratio) if redundancy_type 3副本: return usable_after_reserve / 3 elif redundancy_type 2副本: return usable_after_reserve / 2 elif redundancy_type EC_4_2: return usable_after_reserve * 4 / (4 2) elif redundancy_type EC_6_3: return usable_after_reserve * 6 / (6 3) else: raise ValueError(未知的冗余类型) # 12台服务器每台 10TB 裸容量 raw 12 * 10 for rtype in [3副本, 2副本, EC_4_2, EC_6_3]: print(f{rtype}: 可用容量 {calc_usable(raw, rtype):.1f} TB)逻辑说明先扣掉预留容量再做冗余折算。比如120TB裸容量按12%预留后是105.6TBEC 42的可用容量是105.6 × 4/6 70.4TB。这里预留比例不能省——分布式存储在节点故障后会启动数据重建若容量已经用满到95%以上重建过程很可能因为空间不足反复失败甚至出现数据无法恢复的局面。参数说明reserve_ratio是预留比例生产环境我见过留10%到15%都合理低于8%时重建翻车的概率明显上升redundancy_type需要与存储池实际配置一致脚本里四类方案覆盖了常见场景如果厂商后续支持了自定义EC条带自己扩展一行即可。3.3 性能数字怎么读先看IO模型再看硬件配置白皮书里的性能数字通常会给出好几列4KB随机写IOPS、64KB顺序读带宽、平均时延等。这些数字来自特定硬件组合比如全闪配置、NVMe盘、RDMA网络。如果业务是虚拟化场景优先去看“4KB随机读写”那一列如果业务是小文件密集重点看“元数据操作速率”如果是视频写入看“大块顺序写带宽”。最怕的是拿着全闪配置的带宽数字去规划HDD集群预算和容量全部按错。还要注意测试条件里的“并发数”同样的数字8线程压测和64线程压测完全不可比。我建议把性能这一页截图存下来在下面标注“该数字的IO大小、随机顺序、并发数、盘型、节点数”后续对照验收时用同一套条件复测。条件不写清楚性能排障就变成黑匣子谁也没法判断问题出在存储还是测试方法。3.4 不同层级硬盘该放什么数据FusionStorage支持把不同类型盘纳入同一个存储池常见布局是SCM或SSD负责日志和热数据缓存HDD负责大容量冷数据。白皮书会提到“分层”这个概念但很少告诉你每层数据占比怎么定。我的经验是日志盘或缓存盘容量按业务写入带宽和掉电保护窗口估算一般预留数小时到一天的写入量——太小会频繁触发写满回刷太大则浪费成本。HDD容量层按数据增长曲线预留18到24个月的空间。冷热数据比例不确定时先把热数据层做小后续扩容比换层简单。还有一个容易忽略的点不同批次、不同容量的盘混插在同一节点时OSD的均衡策略会把大容量盘的利用率拉低规划节点时尽量保证同节点内盘型一致。4. 部署与扩容规划从网络、硬盘到故障域的落地顺序4.1 部署前必须确认的五项基础条件读白皮书时会看到硬件兼容性清单和部署前检查项但实际落地时我建议把下面五项优先级放到最前面网络分布式存储对网络带宽和时延非常敏感万兆是起步RoCE或IB更好。网卡队列数、交换机流控、MTU都要在部署前确认否则后续排查链路时延会非常被动。硬盘直通存储节点的RAID卡建议设置为HBA直通模式不要让RAID卡再做一层虚拟化否则磁盘故障定位和SMART信息都会失真。时钟同步整个集群的节点时间偏差要控制在毫秒级。时间漂移会引发心跳超时和节点误判这是分布式存储里很常见的隐性故障。兼容性清单操作系统内核版本、固件版本、驱动版本以官方兼容列表为准。任何一项超出列表范围后续排障都会被支持部门拒绝。电源与机柜节点掉电会导致多副本写入不一致UPS和双电源接入要在规划拓扑时一并考虑不要等部署完成后再补。这五项里最容易“看着没问题出了事才后悔”的是第二条和第四条。RAID卡没有切到直通模式掉盘时控制器可能直接把盘标记为离线重建逻辑完全走偏固件版本超范围可能连驱动都加载不上。部署前花半天逐项核对省下的是后面几周的排障时间。4.2 故障域怎么划机架、机房和控制节点故障域是分布式存储里最容易因“看着简单”而疏忽的配置。常见做法是把一个机架或一个机房设为一个故障域副本或者EC的数据块强制分散到不同故障域。小规模集群至少要做到容忍一个机架故障比如机架内有两台存储节点就要确保同一个卷的两个副本不会同时落在同一个机架里。控制节点建议至少3个分布在不同的机架或电源域避免单点电源故障把控制面全部打掉。这里有个容易翻车的点如果只按“节点”建故障域不按“机架”建机架掉电时所有副本可能都在这个机架上服务直接不可用。白皮书的可靠性章节会画故障域拓扑示意图规划时要把自己的机柜编号和节点IP填进去真实演练一次单机架断电。演练结果会告诉你配置里的故障域和你以为的故障域是不是一回事。4.3 中等规模集群的规划顺序以一个12节点、每节点10TB HDD加2块NVMe SSD做缓存的集群为例我建议从到到尾按下述顺序推进确认业务峰值容量与增长曲线推算出两年后的规模。用第3章的容量脚本确定冗余方案倒推出需要的裸容量和节点数。把计算节点和存储节点分开画清楚网络拓扑标注每台设备的IP和机柜位置。划分故障域按机架分组分配节点角色。预留扩容端口和IP段避免扩容时改动地址段。先在3节点小集群跑通部署、建卷、挂载、压测的完整流程再做全量部署。顺序别倒过来。有些团队先买机器再谈架构最后陷入容量不够或者网络带宽不足的被动局面。白皮书最前面的部署规划部分虽然读起来枯燥但它暗含了硬件和网络的边界条件值得逐项核对。还有一个建议部署完成后第一周每天看一眼存储池容量、重建任务数和网络错误计数把基线记录下来。没有基线后面出现性能劣化时你连“变差了多少”都说不清。5. 读FusionStorage白皮书时容易踩的五个坑现象、原因与解决5.1 把“聚合带宽”当成了单卷性能现象按白皮书性能表规划了带宽验收时单个卷只能跑到标称值的三分之一。原因很多性能数字是多个节点、多个卷并行测试的聚合结果单卷受限于单个OSD节点的网卡速率和磁盘队列深度不可能跑到整个集群的聚合值。解决验收时至少用3个卷并行压测把带宽相加后再与白皮书数字对比单卷性能按单个节点的能力估算再留一定余量。记录测试结果时务必标注“几并发、几个卷、什么IO大小”。5.2 预留容量不足扩容周期比预期快一倍现象集群上线不到一年就容量告警而且数据重建任务反复失败。原因预留比例设得太低比如低于8%。节点故障触发重建时需要额外空间存放新副本或校验块空间不足时重建任务会反复失败。解决把预留比例固定在10%到15%并在容量监控里设置“使用率达到85%即触发扩容评估”的告警线。这条经验基本适用于所有分布式存储白皮书会告诉你“推荐预留空间”这个参数存在但不会替你算你的业务该留多少。5.3 在虚拟机里测性能结果让白皮书背锅现象测试结果比白皮书差了将近一倍项目组怀疑存储本身有问题。原因测试机本身是虚拟机vCPU抢占、磁盘精简置备、虚拟化层中断开销都会拖低IOPS这和存储的关系不大。解决性能基线测试用裸金属服务器或者至少在虚拟机里给vCPU做绑定、用厚置备盘而不是精简置备盘。测完对比时把主机端工具的负载模型参数一并记录避免同类问题反复纠缠。5.4 小集群的故障域设置过细节点故障后可用性反而下降现象一个节点宕机后告警不断紧接着另一个节点也被标记为疑似故障业务受损范围扩大。原因故障域理解有偏差。有人把每个节点单独设为一个故障域单个节点故障就触发大范围数据重建重建风暴把其他节点的IO和CPU打满拖垮了第二个节点。也有人把副本分散到了控制节点上控制节点故障时数据可用性同时受影响。解决故障域最少按机架级规划。节点数再少也要保证任意一个故障域失效时剩余副本仍然能满足数据冗余策略的要求。小规模集群宁可减少副本数也不要让故障域碎到单机粒度。5.5 升级固件后出现掉盘兼容性列表救不回来现象给存储节点更换了网卡固件重启后磁盘控制器识别不到部分盘。原因固件版本超出厂商兼容性矩阵。“同型号就兼容”这种直觉在存储场景不可靠固件微码差异可能导致驱动加载失败或磁盘链路异常。解决任何硬件固件升级前先查白皮书附带或官网的兼容性清单确认当前系统版本和固件版本都被支持再分批升级。每批控制在一台节点观察至少一天再继续。这类问题属于翻车后基本没有后悔药的情况升级节奏放慢就是最大的保障。6. 把白皮书变成自己的验收清单验证一套FusionStorage配置的五个自问白皮书不是拿来看完就合上的它应该是一份可以对着核对的检查清单。我在每次做存储方案验收时会对着自己从白皮书提炼出的五个问题逐条过一遍自问对应白皮书模块验收动作架构图里的每个角色落在哪台服务器架构章节在机柜拓扑图上标出OSD、MDC、ZooKeeper实际位置副本和EC的故障域是否与机架拓扑一致可靠性章节停掉一个机架电源确认数据仍可正常读写性能指标是否对应我的IO模型性能章节用4KB随机写和64KB顺序读分别压测并记录条件预留容量是否覆盖重建空间容量规划章节查看存储池当前利用率与预留比例配置是否匹配固件和驱动是否在兼容性矩阵内兼容性章节导出所有节点固件版本逐项比对这五个自问看起来简单但多数项目翻车都出在其中一两项上。我有一次做方案时只盯着白皮书里最亮眼的聚合性能数字忽略了IO模型差异结果业务方用4KB随机写来验收数据差了一倍整个交付延期两周。后来我给自己定了个习惯任何存储方案的承诺书里必须写清楚性能数字的测试条件——几并发、什么IO大小、什么盘型、几个节点。这样即使将来出现分歧双方还有同一把尺子可以对照。FusionStorage技术白皮书的价值不在于让你记住几个数字而在于帮你建立一个从架构到配置再到验收的思考框架。下次打开这份PDF时直接翻到真正有用的章节先对照自己的环境和业务模型去读再落到部署与验收动作上。希望这份拆解能帮你把文档变成可执行的方法也希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进