
单位最近在推超融合改造我这边接手了深信服aCloud平台里虚拟存储VS3.0的落地和运维。说实话刚接触这个产品时我把注意点全放在了虚拟机迁移和计算虚拟化上对底层那套分布式存储没太上心。直到一次模拟节点宕机演练看到整个存储集群在几十秒内完成故障切换、数据自动补副本才意识到VS3.0这套虚拟存储才是整个平台真正的心脏。这篇东西不是产品文档的复述而是我结合线上环境把数据分片、多副本、仲裁机制这一整条链路从头到尾捋了一遍中间整理了不少适合直接抄作业的配置思路和排查经验希望对你也有参考价值。先说清楚适用场景如果你正在做深信服aCloud的架构设计、容量规划或者已经上线了超融合但被性能波动、节点故障弄得焦头烂额这篇文章适合你。文章里的磁盘容量计算、副本策略选型、仲裁节点部署位置这些内容都是可以直接拿到实际环境里套用的。1. VS3.0的核心思想与架构定位超融合平台和传统架构最大的区别就是把计算和存储揉在同一个x86节点里。传统环境里计算走服务器数据走集中式存储比如SAN两者独立扩容。超融合的逻辑是每台服务器既跑虚拟机又拿出一部分磁盘空间组成分布式存储池所有服务器的磁盘合在一起对外提供统一存储能力。这就是VS3.0在aCloud里扮演的角色。1.1 为什么超融合一定要做分布式存储很多人第一次接触超融合时都会问为什么不用一台高性能存储服务器非要让每台计算节点都承担存储任务核心原因是分布式存储解决了传统集中式存储的两个老大难问题扩展瓶颈和单点故障。集中式存储的控制器处理能力是有限的当计算节点越来越多所有IO都涌向那对控制器性能很快见顶。而且控制器一旦双活没做好整个业务集群全部瘫痪。分布式存储的思路是把数据切碎分散到所有节点每个节点都能并行参与数据读写性能随节点数增长而扩展同时坏掉任何一台节点其余节点仍然持有完整的数据副本业务不受影响。VS3.0在这个思路上做了很多产品化整合比如自动感知磁盘健康状态、数据自动重建、快照克隆能力等。但理解它的第一步是理解它如何把一整块大存储池拆成无数小数据块再把数据块合理散布到各个节点上。1.2 VS3.0在aCloud里的角色和边界在aCloud整个平台里VS3.0不是独立安装的软件而是内嵌在超融合操作系统里的存储组件。它的管理入口在Web控制台的“存储”模块运维人员日常看的是存储池容量、数据均衡状态、副本策略、硬盘健康状态。而实际的数据读写路径是虚拟机发起IO → 经计算节点的虚拟化层 → 转发给本机VS3.0存储代理 → 根据数据分布算法确定目标节点 → 写入数据并同步副本。这个路径里网络质量和延迟直接决定存储性能所以部署时存储网络必须专门规划。VS3.0虽然对外表现像一个黑盒存储但运维人员必须清楚数据是如何流动的出了问题才知道从哪里排查。我见过不少人把VS3.0当成普通磁盘阵列来用以为存储网络随便接个千兆交换机就行结果跑起业务来延迟高得离谱。后面我会专门讲网络规划这里先记住一句话分布式存储的命脉在网络网络抖动就等于磁盘抖动。2. 数据分片存储的第一层地基VS3.0的数据分片机制是整个分布式存储最基础也最关键的设计。分片做得好不好直接决定数据能否均匀分布、故障后能否快速重建、性能能否线性扩展。2.1 从一块磁盘到全局条带化传统的RAID是把多块物理磁盘组合成一个逻辑卷数据按条带写到所有磁盘上。分布式存储的分片思路与之类似但维度更高——它把集群里所有节点的所有磁盘组织成一个巨大的条带化空间。具体过程大致是这样集群初始化时VS3.0把每块物理磁盘划分成固定大小的数据分区然后把这些分区在逻辑上组成多个存储池。每个存储池内部数据按固定块大小通常几MB级别进行切片每片数据再根据哈希算法被分配到集群中不同的节点上。实际效果是假设集群有4台节点每台节点有10块磁盘那么任何一份数据的16个分片会被均匀打散到这40块磁盘里而不是集中在某台机器上。这样做的直接好处是读写IO天然分散到所有磁盘单块磁盘的负载被大幅稀释整集群性能远高于单台服务器。条带化带来的另一个重要能力是故障重建速度。一块磁盘坏了只需要在集群其他磁盘上重建这块盘上的分片数据而不是整个存储池备份重建时间大幅缩短。我实测过一个场景8节点集群里的某块4TB磁盘故障业务高峰时段自动重建大约用了3小时期间业务几乎没有感知。2.2 数据分布算法与IO路径解析数据切片之后最关键的问题就是如何确定某一片数据应该写到哪个节点、哪块磁盘上。VS3.0内部使用的是一种基于哈希和一致性哈希的混合分布策略目的是让数据分布足够随机又能保证在节点增减时只迁移少量数据。一致性哈希的通俗理解是把整个哈希空间看成一个环节点和磁盘都映射到这个环上数据根据哈希值找到最近的节点。这样做的好处是新增或下线节点时只需要迁移环上受影响的那一小段数据而不是全量重新分布这在日常扩容时体验非常明显。IO路径层面一次完整的小块随机写大致是虚拟机发出IO请求 → 经CPU虚拟化层和内存映射 → 到达本机存储代理 → 代理计算目标数据位置 → 通过存储网络发送到拥有主副本的节点 → 主副本写入磁盘 → 同时复制到备副本节点 → 全部确认后返回成功。这条链路每一跳都有延迟所以低延迟网络和高性能磁盘缺一不可。你可以在实际环境中做个简单验证在虚拟机上创建一个100GB的测试文件并写入随机数据然后到VS3.0控制台看各个节点各个磁盘的空间变化。正常情况下你会发现每块磁盘的增长量非常接近这证明数据确实是均匀散列的。如果没有出现这种均匀分布说明存储池可能存在热点需要检查数据均衡策略是否被关闭了。2.3 分片之后的元数据怎么管数据都切成片撒出去了那“哪一片数据在哪个磁盘上”这个问题由谁来回答答案是元数据服务。VS3.0采用元数据与数据分离的架构元数据单独保存在高性能区域并做多副本冗余。每次数据写入实际包含两步操作一是写入数据本身到目标磁盘二是更新这条数据的元数据记录。元数据操作虽然数据量小但频率极高所以元数据存储的性能直接影响整个集群的IO延迟。VS3.0的做法是把元数据优先放在SSD/NVMe盘上并使用独立多副本保护。这个设计思路运维时要格外注意不要为了节省成本把所有SSD都划给数据层做缓存必须预留一部分高性能空间给元数据和热点数据。如果你发现整个集群IO延迟正常但特定虚拟机的同步写性能忽高忽低大概率是元数据所在空间出现了性能瓶颈优先排查SSD盘的寿命和剩余空间。3. 多副本策略与数据一致性数据分片解决的是“数据放哪里”的问题而副本策略解决的是“数据丢不了”的问题。生产环境最怕的就是数据丢失VS3.0在这块提供了灵活的策略配置但在实际使用中很多人选错了副本数要么浪费空间要么防护不足。3.1 副本数怎么选2副本、3副本还是纠删码VS3.0默认支持2副本、3副本和纠删码几种数据保护策略。它们的区别体现在空间利用率和数据安全性的取舍上。2副本模式下每份数据在集群中保存两份存储利用率是50%即1TB有效数据占用2TB物理空间。它能容忍单块磁盘故障或单台节点宕机。3副本模式下每份数据保存三份利用率只有33%但能容忍任意两台节点同时故障而不丢数据。纠删码Erasure Coding则是把数据编码后分成多个数据块和校验块比如常见的42模式4份数据块配2份校验块利用率可以达到67%容忍任意2块不可用。实际选型时不能只盯着利用率看还要考虑性能和重建代价。纠删码虽然节省空间但写入时需要额外的编码计算重建时恢复的数据量也更大。而副本模式写入简单直接性能更好。我个人的使用建议是虚拟化生产环境虚拟机尤其是数据库类至少选3副本数据安全是第一位的开发测试环境、桌面虚拟化等可接受一定风险的环境选2副本节省空间容量紧张但希望有保护时考虑纠删码但要确认平台版本支持并且清楚性能代价集群节点数少于4时建议优先考虑3副本而不是纠删码因为纠删码在某些故障场景下恢复时间更长。3.2 写路径的一致性如何保证副本之间不“打架”多副本机制下写一份数据要同时更新多个副本这就带来一致性问题。如果两个副本的数据不一样读哪个都是错。VS3.0默认采用的是强一致性写策略也就是写操作要等所有副本都写入成功后才返回给虚拟机。核心机制是“对齐-等待”或类似Quorum机制的实现。假设三副本策略写操作必须至少得到2个副本的确认Quorum才算成功。如果某个副本所在的节点宕机另外两个副本依然能形成有效Quorum写操作继续可用。这个设计和分布式系统里的Raft、Paxos协议思路一致只是工程实现做了很多简化。运维层面理解这个机制能帮我们解释很多现象。比如某个节点网络闪断你会发现写延迟瞬间升高这是因为写操作在等待Quorum响应超时。再比如从3副本降为2副本时如果某个副本所在节点正处于离线状态系统可能无法达到Quorum要求导致数据写入失败所以任何副本策略变更前必须确认集群所有节点健康在线。这里有一个值得注意的配置习惯在做计划内节点维护比如升级内存、更换硬盘之前先到VS3.0控制台确认所有数据副本处于Complete状态再操作物理节点。如果带着不完整副本做维护一旦遇到意外断电就可能出现数据副本数不足的告警严重时甚至影响业务。4. 仲裁机制集群分裂时的最后防线如果说数据分片和副本解决的是“稳”和“全”那仲裁机制解决的是“乱”的问题。集群中节点之间通过心跳互通状态一旦网络异常导致节点互相看不到对方就可能出现集群“脑裂”。仲裁机制就是用来确定哪一部分节点继续提供服务哪一部分节点要退出避免两边同时写数据造成数据不一致。4.1 “脑裂”的危害和产生原因脑裂这个词很直白本来是一个大脑分裂成两个各自发号施令。存储集群脑裂时节点A、B和节点C、D各自认为自己是合法集群同时接收业务写入。如果两边都在修改同一份数据的不同副本恢复后数据必然冲突甚至可能丢失。脑裂最常见的触发原因是集群网络故障比如存储交换机某个端口异常导致节点间心跳不通。也可能是高负载导致心跳响应超时节点被误判为离线。VS3.0的仲裁机制会基于可用节点数量判断哪一侧是合法的。最朴素的规则是少数服从多数节点数多的那一侧获得仲裁权继续提供服务另一侧则主动停止存储服务避免写冲突。4.2 仲裁节点的部署方式实际部署中两节点集群是最常见的脑裂高发场景。两个节点互发心跳一旦中间网络断开两边都只有1个节点无法形成多数派。这时就需要引入一个外部仲裁者。VS3.0支持在一个独立节点或虚拟机上部署仲裁服务它不存储业务数据只参与仲裁投票。当集群被迫分裂成两个1节点部分时有仲裁节点支持的那一侧获胜继续提供数据服务。部署仲裁节点时有几个注意点仲裁节点不能和集群节点共用同一台物理服务器否则就失去了仲裁意义仲裁节点与集群间的网络链路要求不高但必须稳定最好走独立网络两节点集群的生产环境建议仲裁服务部署在第三方位置可以是另一台物理机上的虚拟机甚至可以是云上的轻量虚机但网络延迟不能太高。如果你只有两节点且没有部署仲裁服务一旦节点间通信中断存储服务会直接停摆业务虚机无法读写磁盘。这个坑我见过不止一次不少单位把两台服务器直接组集群以为高可用万事大吉结果一次网络交换机误配置就让整个集群不可用。4.3 故障域与数据亲和性的实际应用仲裁机制解决集群层面的可用性而故障域则是更细粒度的数据部署策略。VS3.0支持配置数据故障域让同一份数据的多个副本分散到不同的物理位置。最常见的故障域是节点级和机架级。节点级故障域保证3副本的3份数据分别落在3台不同节点上宕机一台不影响数据完整性。机架级故障域则要求3份数据分散到不同机架的不同节点上这样即使某个机架断电数据在其他机架仍有副本业务可继续。配置故障域时要注意故障域划分越细数据分散要求越严格对节点数量的要求也越高。比如3副本配合3个机架故障域至少需要3个机架的节点。如果节点数量不足VS3.0可能会报副本数无法满足策略告警需要合理评估。此外高可用虚拟机HA的调度策略和存储故障域最好联动设计。比如3副本数据分散在节点A、B、C那运行该虚拟机的主机如果也部署在这三台节点上一旦其中某台节点宕机虚拟机需要迁移到另外节点但该节点的存储副本可能不完整此时需要平台自动结合存储状态决策是否启动。实际配置时应尽量让虚拟机HA策略和存储副本分布策略互相配合避免出现“主机在、副本不全”的尴尬局面。5. 实战部署与配置经验前面的原理部分讲得再多最终都要落到部署和配置上。VS3.0的安装和初始化不算复杂但想在生产环境稳定运行网络规划、磁盘选型、存储池规划这些前置工作必须做扎实。5.1 部署前的硬件与网络规划先把结论放前面存储网络一律万兆起步千兆组超融合生产集群就是自己给自己挖坑。VS3.0节点间同步副本数据、心跳通信、虚拟机迁移全走网络千兆环境下副本同步会把网络带宽占满业务IO直接受到挤压。我最推荐的是双万兆网卡绑定加双交换机的方案。两台交换机分别承载管理、存储、业务流量用VLAN隔离网卡bonding配置主备模式一块网卡故障时自动切换。注意不要为了省钱把存储流量混在业务网里副本同步大流量会严重影响虚拟机对外网络质量。磁盘选型方面节点内建议至少配置1块SSD做缓存和元数据空间剩下用SATA或SAS HDD做数据盘。全闪配置则看预算全部用SSD可以大幅提升IOPS但成本偏高。容量规划时有一个参考公式集群有效容量 节点数 × 单节点数据盘容量 × 磁盘数 ×1 - 副本冗余损耗。如果3副本除以32副本除以2。扩容时记住一条原则同批次节点尽量配置相同磁盘容量否则大容量磁盘会被小容量磁盘拖累导致空间浪费。5.2 创建存储池和设置数据策略初始化完成后第一件事是创建存储池。存储池是VS3.0的逻辑隔离单元不同业务可以规划到不同存储池便于独立管理策略。比如数据库虚拟机放到高性能存储池用3副本SSD缓存备份虚拟机放到低优先级存储池用2副本降低空间占用。创建存储池时需要做的选择主要有存储池名称和关联节点一般默认使用全部节点除非有业务隔离需求副本策略如上面分析的2副本、3副本或纠删码缓存策略SSD缓存的比例、缓存算法的选择QoS策略如果有IOPS瓶颈的业务可以给存储池或虚拟机配置IOPS上限防止业务间互相干扰。曾经有个客户为了节省成本把所有虚拟机的副本策略统一切到2副本结果运行了两天后某节点硬盘故障系统提示数据处于降级状态整个集群的IO响应明显变慢。好在故障硬盘更换及时数据重建也没有异常但这说明策略的选择必须经过业务重要性和资金预算的仔细权衡不能一刀切。5.3 与安全组件同平台部署的运维注意事项很多单位会在超融合平台上直接运行安全组件比如防火墙虚拟化版本、EDR、终端防护中心还有监控类的Zabbix等。这些组件一旦和虚拟机共享底层存储会带来一些特有的资源竞争现象。我遇到过用户反馈EDR和Matlab这类科学计算软件同时运行时Matlab启动异常缓慢甚至无法启动。排查了一圈发现并非EDR本身拦截了进程而是EDR对IO和CPU资源占用较高和Matlab启动时的大量临时文件读写产生了资源争抢在低配虚拟机上表现尤其明显。解决办法是适当调整EDR的资源占用上限或对科学计算类虚拟机单独设置更宽松的QoS策略。监控方面Zabbix可以结合深信服平台提供的API或监控模板采集CPU、内存、存储池容量等指标。相比在每台虚拟机上装Agent直接从超融合平台层采集存储容量和健康状态会更全面也省掉一部分Agent部署量。建议把存储池容量、数据副本状态、节点心跳这些核心指标都纳入Zabbix告警避免登录控制台一处处翻。6. 故障场景复盘与排查技巧再好的架构设计和配置也会在实际运维中遇到各种奇奇怪怪的问题。这里把我在VS3.0日常运维中遇到的几类典型故障和排查思路整理出来。6.1 节点宕机后的数据重平衡过程节点宕机是分布式存储最常见的故障场景。某台节点突然断电或硬件故障后VS3.0会迅速检测到该节点的数据副本不再可用此时数据处于降级状态但有其余副本仍然可读可写业务不中断。这时后台会自动启动数据重建把缺失的副本重新复制到其他健康节点。重建过程对集群性能有较大影响尤其在没有限速配置的情况下大量数据复制会占用存储网络和磁盘IO。建议在VS3.0控制台查看是否有重建限速配置项并设置合理上限比如白天限速30%晚上放开限速避免重建流量影响业务高峰。节点重新上线后集群会做一次反向同步把该节点上过期的数据补到最新状态。这个阶段如果看到节点状态显示“同步中”不要急着在它上面创建新的虚拟机或做存储策略变更等同步完成再进行否则可能引发不必要的额外数据迁移。6.2 慢盘和坏盘的处理流程分布式存储有个有趣的现象一块性能骤降的磁盘比整块磁盘完全坏掉更难排查。因为系统还能读写但每次都拖慢整个数据通路所有涉及这块盘的操作都变得奇慢无比。遇到集群整体IO延迟升高先到存储控制台看一眼各物理磁盘的延迟和错误计数。如果某块盘的延迟数倍于其他盘或者出现大量超时错误基本可以判定是慢盘或坏盘。处理方式分两步如果磁盘还能稳定读写先在系统层面标记该盘让VS3.0把它上的数据迁移到其他磁盘然后将该盘设为维护状态如果磁盘已经无法正常读写直接联系硬件厂商更换。更换后插入新盘VS3.0会自动识别并开始重建数据。有一点特别值得注意更换磁盘前务必确认节点上的电源和背板槽位不要盲目拔盘。我之前在处理故障时因为没仔细核对硬盘序列号差点拔错盘幸好及时发现否则后果不堪设想。6.3 性能瓶颈的排查思路VS3.0的性能问题排查我一般按“网络-磁盘-CPU”三步走。先查存储网络的丢包率和延迟再查物理磁盘的负载和队列长度最后才是CPU和内存资源是否饱和。一条比较典型的排查路径是先看控制台存储统计里的IOPS和带宽趋势图判断是持续高负载还是瞬时尖峰。如果是瞬时尖峰多数是某个业务虚拟机在做批量任务比如数据库全表扫描此时应结合日志找出对应虚拟机检查是否需要调整业务时间或增加资源限制。如果是持续高负载就要看热点是否集中在某些磁盘必要时通过扩展节点或调整数据均衡策略来分散IO。还有一类隐蔽问题存储网络交换机端口协商成了千兆而不是万兆。这个在链路故障或交换机重启后偶有发生sFlow或简单点用ping大包测试延迟能发现端倪。有一次客户反馈集群IOPS上限和带宽都正常但虚拟机内部磁盘延迟高得离谱查到最后就是网卡和交换机协商成了1Gbps重新协商后才恢复。7. 常见问题速查与避坑清单为了控制掌握节奏我把日常运维中最高频的问题整理成一个速查表碰到类似问题时可以先对照排查。现象可能原因排查和解决思路虚拟机磁盘延迟高存储网络拥塞、慢盘、网络协商异常检查存储网络丢包、延迟查看物理磁盘延迟指标确认网卡协商速率数据副本显示缺少节点宕机、磁盘故障、网络隔离到控制台查看故障节点/磁盘状态若无物理故障检查副本重建状态集群扩容后性能不升反降未触发数据重平衡、网络瓶颈确认新节点数据重平衡策略已开启检查存储网络是否成为瓶颈写性能大幅波动缓存空间不足、元数据磁盘性能下降检查SSD剩余寿命和剩余空间考虑调整缓存算法或增加缓存盘节点维护后数据副本异常未完成同步就进行维护维护前确认所有副本Healthy维护后等待数据同步完成再操作安全组件与业务应用抢夺IOQoS未配置、资源抢占给安全组件设置资源上限业务虚拟机单独配置QoS策略存储池空间释放不了存在快照、已删除虚拟机仍占用空间检查快照链删除无用快照确认回收机制已开启最后说一个我自己踩过的坑。早期我管理超融合平台时某台节点硬盘出现过一次轻微故障当时看控制台只是告警没有太在意。后来这台节点的另一块硬盘也出现问题两块盘同时异常导致该节点上的虚拟机需要全部迁移集群其他节点负载瞬间抬高业务系统出现了短暂卡顿。从那以后我给自己定了一条规矩任何磁盘告警无论看起来多轻微都要在当天处理。硬盘故障就像多米诺骨牌第一张倒下时如果没扶住后面就会产生连锁反应。VS3.0这套虚拟存储体系靠数据分片解决规模靠多副本解决安全靠仲裁机制解决一致本质上是一个分布式系统经典三板斧的工程化落地。理解了这个链路日常运维的很多“灵异现象”其实都有清晰的逻辑解释。希望这篇实战记录能帮你在自己的环境中少踩几个坑尤其是在前期规划时就把网络、副本策略、故障域这些底子打好后续运维才能真正省心。