
简介文档以曙光ParaStor云存储系统为主题定位为面向海量非结构化数据的分布式文件系统解决方案。它系统梳理了存储市场从传统阵列向Scale-out NAS迁移的趋势结合2015年中国区NAS排名数据说明ParaStor的市场地位并重点解析其分布式非对称架构索引控制器与数据控制器分离元数据管理和数据存储解耦这与EMC Isilon、华为OceanStor9000等对称式产品以及Lustre、Ceph、GPFS等常见分布式文件系统形成对比辅助读者理解共享式与分布式、对称与非对称架构的差异。内容还覆盖索引控制器2~128个、数据控制器3~4096个的扩展规格POSIX/NFS/CIFS/FTP/HDFS等协议支持以及科研计算、视频监控、云计算等典型应用场景。整个压缩包仅含1个PDF文件大小3.39MB图文完整已有208人浏览学习适合存储架构师、方案售前与分布式存储学习者快速建立整体认知。1. 一份ParaStor“云存储”PDF背后解决共享带宽和扩容两个硬问题在 AI 训练或 HPC 仿真集群里本地盘放数据的尴尬很现实容量不够时不能平滑扩容数据想跨节点共享时只能靠单台 NFS 硬扛带宽和元数据压力都顶不住。曙光 ParaStor 云存储系统做的正是这件事——把多个 x86 节点的磁盘统一调度成一个分布式集群存储对外提供 POSIX、NFS、SMB 和对象接口。很多从业者第一次接触它是从一份《曙光ParaStor云存储系统.pdf》产品材料开始但把架构图变成能跑生产的系统中间还有大量参数和排错经验。适合谁看为 HPC、AI训练或大数据平台选型的人以及正在做ParaStor日常运维的工程师。2. ParaStor架构拆解数据走数据面、元数据走独立通道带宽才有保证2.1 管理节点、元数据节点与数据节点的职责切分ParaStor 本质上是一个并行文件系统不是“一堆机器上的单机存储拼在一起”。架构里的三类角色差异很大理解它们的分工是后续所有调参和排错的基础。控制台/管理节点Console负责集群配置、监控、告警和用户管理它不占数据通路所以哪怕它短期不可用业务读写一般不会中断。元数据节点MDSMetadata Server维护目录、文件名、权限、文件到数据块的映射关系。客户端做一次open或ls时实际上是在和 MDS 打交道。数据节点OSDObject Storage Device才是真正落盘的地方数据会按照条带规则打散到多个数据节点上客户端在拿到布局信息后直接与数据节点并行收发数据。这个设计的关键价值是文件读写的数据流不再强行经过“存储中枢”。客户端打开一个文件后先问 MDS 要一张分布表然后同时跟多个数据节点收发数据聚合带宽随数据节点数量线性增长。同时元数据压力被隔离到独立节点上mkdir、ls、属性更新这类高频小操作不会跟大数据块传输互相干扰。角色部署形态故障影响常见规模控制台/管理面与 MDS 分部署或独立虚机数据不中断管理入口失效1 套集群 1~2 节点元数据节点 MDS独立节点或主备对目录访问不可用数据面仍在至少 2 节点数据节点 OSD独立存储节点单节点故障触发重建3 节点起步实际部署里管理面和 MDS 常常会合并部署但对于生产集群我一般建议把 MDS 单独拆出来。原因很简单元数据服务的抖动会直接表现为全集群的目录操作变慢如果把 MDS 和管理面混跑一次控制台巡检或告警刷新都可能把 CPU 冲高进而拖慢所有客户端的路径解析这种“互相踩脚”的场景非常常见。2.2 协议选型并行客户端吃大文件NFS 管通用接入对象接口管开放生态ParaStor 的优势之一是多协议支持但多协议也意味着选型时要尽早做决定不同协议的底层行为差异很大。POSIX 并行客户端是 ParaStor 性能最高的接入方式它通常以内核模块或专用客户端的形式安装到计算节点上挂载后像本地文件系统一样使用能拿到接近数据节点聚合带宽的能力适合 MPI 计算、深度学习训练这类需要高并发读写大文件的场景。代价是客户端需要安装和版本匹配运维上多一层管理。NFS 是最省事的通用接入方式适合 Kubernetes 节点、普通 Linux 服务器和应用容器。它是文件级协议锁语义和 POSIX 不完全一致所以重依赖文件锁的应用需要做一次兼容验证。SMB 主要用于 Windows 侧的文件共享适合办公文件和备份归档场景。对象接口S3 风格则适合大数据分析、数据湖和跨平台开放访问配合纠删码存储池可以显著降低存储成本。选型建议如果业务节点数量多且以读训练集、写 checkpoint 为主优先上并行客户端如果接入方是 K8s 或异构服务器用 NFS 做统一入口更稳妥把个别高吞吐场景单独挂并行客户端即可。一个 ParaStor 集群完全可以同时承载两种接入按卷导出不同协议即可。2.3 “云存储”在 ParaStor 语境里指的是什么很多第一次接触的人会纠结“云存储”三个字误以为它是某种公有云盘。这里的“云存储”指的是云基础设施形态底层分布式架构支持横向扩容按存储池划分性能和容量域具备配额、快照、QoS、生命周期管理能力可以同时支撑多个业务部门以不同协议接入。跟传统盘阵相比它不是一台机器而是一个由通用服务器组成的弹性存储资源池跟公有云对象存储相比它保留了强一致的文件语义和并行访问能力更适合计算密集场景。理解这一点你就能明白为什么选型文档里会反复强调“共享”“聚合带宽”和“横向扩容”。ParaStor 竞争优势不在于单盘性能而在于多个计算节点同时读一个大规模数据集时能把吞吐叠起来。这也是它和本地盘、单机 NFS 最大的差异。3. 部署最小ParaStor集群节点规划、存储池参数和NFS挂载实操3.1 最小规模从哪里开始2 个元数据节点加 3 个数据节点ParaStor 的最小规模一般不建议低于 5 个节点。元数据节点至少一主一备避免 MDS 单点故障数据节点至少 3 个才能发挥多节点并行写能力也给副本冗余留出空间。节点规划时最常被忽视的是网络平面。网络平面用途推荐规格关键点管理网络控制台与节点带外管理千兆以上不承载业务 IO业务网络客户端访问存储服务10GE 起步决定客户端能拿到的实际带宽数据网络节点间数据复制与重建10GE 起步建议与业务网络隔离我见过的部署翻车多半卡在数据网和业务网混跑。故障恢复时节点间会产生大量复制流量如果业务网和数据网共用客户端 IO 会直接被重建流量冲垮。规划时最好为数据网络单独划 VLAN 或物理网卡交换机上保证足够的队列缓冲。下面是一份最小集群的节点清单模板# nodes.csv 按实际机型替换 IP 与磁盘 role,hostname,ip_mgmt,ip_data,note console,con01,192.168.10.10,10.0.0.10,管理集群入口 mds,mds01,192.168.10.11,10.0.0.11,元数据节点主 mds,mds02,192.168.10.12,10.0.0.12,元数据节点备 osd,osd01,192.168.10.13,10.0.0.13,数据节点 osd,osd02,192.168.10.14,10.0.0.14,数据节点 osd,osd03,192.168.10.15,10.0.0.15,数据节点ip_data是存储内部互访地址所有客户端访问的共享地址通常由业务网络提供。如果后续要扩容数据节点只要加机器、加 IP再执行加节点操作就行不需要迁移已有数据这是分布式架构和传统盘阵在扩容体验上的本质差异。3.2 初始化集群并创建存储池副本还是纠删码初始化阶段要决定两个影响全局的选型数据冗余方式和网络分段。以下命令以管理控制台向导的字段为例说明不同小版本的命名略有差异但逻辑一致# 初始化向导关键字段按实际集群填写 cluster_nameparastor_prod admin_net192.168.10.0/24 data_net10.0.0.0/16 mds_nodes(mds01 mds02) osd_nodes(osd01 osd02 osd03) replica_count2admin_net是管理平面网段控制台通过它管理所有节点data_net是存储数据平面网段客户端并行读写和节点间数据复制都走这里。replica_count2表示每个数据块保留 2 份副本是兼顾可用性和成本的选择如果对数据安全要求更高可以设 3 副本但容量利用率会降到 33% 左右。存储池创建时可以选择副本或纠删码模式# 热数据池用副本冷数据池用纠删码 para_pool create pool_hot --type replica --replica 2 --disk-per-node 4 para_pool create pool_cold --type erasure --parity 11 --disk-per-node 8副本池适合随机读写、小文件密集和在线业务读性能好故障恢复带宽占用高。纠删码池适合大块顺序读写和归档数据容量利用率高但写入需要额外计算随机小文件表现一般。一个 ParaStor 集群里可以同时存在多个存储池按卷指定归属这是最值得多用的一项能力不要在业务初期图省事只建一个池后续想要把冷热数据分开时池之间的数据迁移比重建卷麻烦得多。3.3 创建卷、配额和共享导出挂载参数直接影响业务创建卷是真正面向业务的操作。卷是客户端看到的一个文件系统实例卷可以设置容量配额也可以设置条带策略# 创建业务卷配额软硬限设置 para_volume create vol_data --pool pool_hot --capacity 50T \ --quota-soft 40T --quota-hard 45T # 导出为 NFS 共享并按网段限制访问 para_volume export vol_data --protocol nfs \ --clients 10.1.0.0/16 --rw --sync # 客户端挂载以 CentOS/Rocky 为例 mount -t nfs -o vers4.1,hard,noatime,timeo100 10.0.0.10:/vol_data /mnt/shared配额软上限 40T 是告警阈值超过后开始写入告警日志硬上限 45T 是强制限制达到后业务写入直接报错。这里建议把软限调得比真实预期低一点留出缓冲否则某次大任务把空间打满会影响所有写入该卷的业务。--sync表示服务端同步写确认牺牲一点延迟换取更强的数据一致性。对数据库、容器状态这类对丢失敏感的业务务必保留sync如果只是训练数据缓存这类可重建的业务可以评估改为异步写但我不建议在生产环境初始阶段就这样操作先跑稳再看性能瓶颈在哪。客户端挂载时的vers4.1启用 NFS v4.1 会话管理hard表示服务端恢复后自动重连noatime减少不必要的属性回写timeo100调大超时重试时间这几个参数是容器场景最常见的标配。要写进/etc/fstab时记得加上_netdev避免开机时网络未就绪导致挂载失败。3.4 部署后的第一轮验收先确认基本项集群起来后不要直接压测先做一轮基本验收按以下顺序进行控制台能看到所有节点在线MDS 主备状态正常。从客户端执行showmount -e 10.0.0.10能看到导出的共享目录。挂载后执行df -h /mnt/shared容量和配额信息符合预期。用dd或fio写一个 10G 文件再读回来确认数据能正常落盘。这轮验收的目的是排除最基础的连通性错误。很多“性能差”的投诉最后发现是客户端挂在管理网而不是业务网上流量全挤在管理交换机这一层检查能省掉后面大量排错时间。4. 稳态运维与调参条带、缓存、监控阈值按业务改4.1 条带宽度和条带大小大文件和小文件要分开对待ParaStor 把文件切割成数据块并分布到多个数据节点上这个分布策略由条带参数决定。条带宽度stripe width是参与写入的数据节点数量条带大小stripe size是每个数据块的大小。两者的选择逻辑直接看业务平均文件大小业务类型平均文件大小条带宽度条带大小依据训练样本集数百 MB 以上8~164~8 MB并行度越高聚合带宽越大日志/监控数据几十 KB~几 MB2~41 MB避免小 IO 广播到过多节点混合负载不确定4~81~4 MB中庸配置避免极端这里的核心逻辑是大文件希望被尽可能多节点并行读写所以宽度拉大小文件本身一次 IO 只有几十 KB如果条带宽度是 16客户端需要向 16 个节点发起请求反而增加网络往返和元数据查询开销变成负优化。很多“写小文件很慢”的投诉调整条带参数后能改善 30%~50%。# 在线调整条带参数命令风格因版本而异字段对应即可 para_volume tune vol_data --apply-policyfile_workload \ --stripe-width4 --stripe-size1M条带参数在控制台页面一般可以直接改但生效机制要看版本有些是立即对新建文件生效有些需要重新挂载。调整后记得检查旧文件是否仍然占用旧条带布局这决定了“调了参数为什么感觉没变”。4.2 缓存、预读与写路径的选择ParaStor 的缓存分布在客户端、MDS 和数据节点三个位置最容易忽略的是客户端预读。大文件场景下预读能把顺序读吞吐拉高一个档次训练框架读取 TFRecord、Safetensors 这类文件时收益明显随机小文件场景下预读反而会把无效数据读进缓存挤占有效缓存空间。常见做法是训练节点上把预读调低或关闭而数据湖分析场景保持较高的预读值。元数据侧MDS 会缓存目录项和文件属性。当业务里有大量小文件创建和删除时MDS 缓存命中率直接决定ls和stat的感受。如果发现 MDS 节点内存长期吃满且缓存命中率持续下滑优先检查是不是有某个应用在反复创建临时文件而不是盲目加内存。数据节点侧的写路径则与冗余策略相关副本池写两份数据纠删码池需要计算校验块两者性能特征不同压测时要分开看。4.3 监控指标与告警阈值不要只盯容量ParaStor 运维里最常见的误区是只盯存储池使用率等告警打过来才发现性能已经劣化很久了。推荐的监控指标和阈值如下监控对象指标建议告警阈值说明存储池容量使用率70% 关注80% 告警超过 80% 后碎片和重建风险同时上升数据节点磁盘 busy85% 持续 15 分钟区分单盘高和整体高元数据节点MDS 操作延迟超过 20ms目录操作变慢的直接信号业务网络重传率超过 0.1%客户端吞吐下滑的常见元凶副本状态降级副本数大于 0持续降级说明故障未修复可以写一个简单的轮询脚本把关键指标定时抓出来# 监控采集脚本片段每分钟轮询一次 for i in $(seq 1 60); do ssh adminconsole01 para_metric pool_hot --item usage; \ para_metric mds01 --item latency; \ para_metric osd01 --item disk-busy sleep 60 done在实际落地中我会把脚本输出导入 Prometheus 类时序库按上表的阈值配置告警。容量告警建议设两级70% 时发提醒80% 时发告警并触发扩容或清理流程。大于 80% 之后客户端写入会因空间分配变慢元数据操作也会受到牵连这时候再扩容已经有一段性能劣化窗口了。4.4 客户端侧的隐蔽参数网络队列与并发数调完存储端别忘了客户端。Linux 客户端的网络缓冲区大小、TCP 拥塞控制和并发 IO 深度都直接影响体验。训练节点上常见的问题是默认的tcp_congestion_controlcubic在高带宽延迟下发挥不佳并发连接多时容易出现窗口缩小。生产环境我一般建议把训练节点改为bbr或htcp视内核支持同时调大 socket 读写缓冲# 客户端网络参数写入 /etc/sysctl.conf net.core.rmem_max 16777216 net.core.wmem_max 16777216 net.ipv4.tcp_rmem 4096 87380 16777216 net.ipv4.tcp_wmem 4096 65536 16777216这里要注意改动 TCP 参数前先确认业务网络是专网。如果是跨公网或跨防火墙的长链路激进缓冲反而可能引起拥塞。ParaStor 的业务网络通常都在数据中心内部低延迟高带宽这个配置收益明显。5. ParaStor常见故障排查性能缩水、共享丢失、容量告警的现象学5.1 现象一写带宽只有预期三分之一数据盘 iowait 却不到 60%现象客户端顺序写一个 10G 文件实际吞吐远低于聚合带宽数据节点磁盘利用率却不高。原因最常遇到的是业务网和数据网配置反了。客户端通过管理网 IP 访问存储流量全部挤在管理交换机或者数据网跨了不支持大帧的交换机MTU 不一致导致分片重传。另一类原因是写路径上客户端数量少但iodepth不够单一连接的窗口不足以填满多节点并行通道。解决先在客户端执行ping对比业务网和数据网延迟再查ethtool确认两端 MTU 一致最后用iperf3从单个客户端到多个数据节点分别测带宽。如果物理链路没问题把客户端iodepth从 1 提升到 8~16并发数从 1 提升到 4 再测。这个排查顺序能覆盖 90% 以上的写带宽问题。5.2 现象二目录一多ls 越来越慢MDS 主节点 CPU 打满现象共享目录里文件数超过几十万后ls要等几秒甚至几十秒MDS 节点 CPU 持续 100%。原因典型是单目录文件数量过大客户端每次目录操作都在 MDS 上生成大量元数据请求有的业务还在反复创建和删除临时文件导致目录项缓存频繁失效。解决先从业务侧改造目录结构按日期或按任务 ID 拆分目录避免单个目录下文件数超过几万。这个量级是并行文件系统普遍的建议线。ParaStor 侧可以适当调大 MDS 目录项缓存但根治还是要靠业务侧收敛临时文件的行为。如果元数据节点主备切换频繁检查客户端挂载参数是否用了hard避免客户端反复重试造成 MDS 压力。5.3 现象三NFS 挂载后 root 能看不能写容器 Pod 起不来现象NFS 共享挂载后ls正常但touch报 Permission deniedKubernetes Pod 以 root 运行时无法写数据卷。原因NFS 导出的root_squash默认把 root 映射为匿名用户加上共享目录属主不是容器运行用户权限就断了。另外 SMB 场景下用户映射配置错误也会出现类似问题。解决确认业务方是否真的需要 root 直写。容器场景推荐在 ParaStor 侧创建一个与容器 UID 匹配的用户并把共享目录属主设为该用户而不是关掉root_squash。如果业务必须 root 直写在共享导出选项里显式允许该网段的 root 访问但这会降低安全边界应当仅在受信内网且确认业务必要时才用。涉及文件锁的应用还要检查 NFS v4 锁是否正常避免出现lock表满或锁冲突。5.4 现象四快照删除后容量没有立即释放回滚速度远低于预期现象删掉一个大数据量的快照后存储池容量没有明显回升执行快照回滚时等待时间很长。原因ParaStor 的快照通常采用写时复制或同名文件技术删除快照并不意味着立即释放所有底层空间回收过程需要遍历引用关系。回滚慢则可能是快照链太长或者回滚期间还在承接业务写流量。解决快照不是后悔药不要对所有卷做无节制的频繁快照。生产环境按“保留最近 1~2 个可回滚点”的节奏做计划快照。删除快照后如果容量迟迟不释放在管控面查看后台回收任务是否卡住回滚尽量安排在业务低峰并提前告知业务方 IO 会有抖动。这里没有捷径只能从使用习惯上控制快照数量。5.5 现象五控制台节点重启后管理页打不开业务却在继续读写现象控制台所在节点意外重启管理网页无法访问但数据节点上的客户端读写仍然正常。原因控制台和管理面是独立组件不参与数据 IO 路径。业务不中断是架构的正常表现但管理面需要通过集群其他节点确认状态才能恢复页面如果管理面依赖的数据库或服务没有随系统自启就会出现这个状态。解决检查节点上管理服务是否注册了开机自启重点确认管理面数据库、认证服务和 Web 服务三个进程的状态。如果是主备管理模式确认备节点是否自动接管如果管理面没有落到独立节点上后续扩容时建议把控制台迁移到单独的低负载节点防止管理组件干扰数据面资源。6. 把ParaStor接入K8s与AI训练动态PV配置与最小性能验证6.1 用 NFS StorageClass 把 ParaStor 接进 KubernetesParaStor 给 K8s 用最省事的方式就是走 NFS 动态供给。提前在 ParaStor 上准备一个共享卷作为根路径再通过 NFS CSI 或外部 provisioner 创建 StorageClassapiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: parastor-nfs provisioner: nfs.csi.k8s.io parameters: server: 10.0.0.10 path: /vol_data/k8s mountOptions: vers4.1,hard,noatime,timeo100 reclaimPolicy: Delete volumeBindingMode: Immediateserver是 ParaStor 导出的 NFS 共享地址path是共享根目录下的子路径动态供给会在这个目录下为每个 PVC 创建独立子目录。mountOptions沿用之前的生产参数确保容器节点收到一致的挂载行为。reclaimPolicy: Delete意味着删除 PVC 时对应数据目录会被回收如果业务数据需要长期保留改为Retain并在删除前手动备份。ParaStor 侧建议为 K8s 单独划分一个存储池或卷避免和训练作业的大带宽读写互相干扰。如果某个训练任务需要极高吞吐给它单独挂一个卷并直接使用并行客户端而不是都走 K8s 的 NFS 路径。6.2 用 fio 做一次可复现的性能基线测试上线前要用可信的压测方式验证性能而不是凭感觉。先在多个客户端并行跑 fio 顺序写# 4 个客户端并发顺序写测聚合写带宽 fio --namewrite_test --directory/mnt/shared \ --ioenginelibaio --direct1 --rwwrite --bs1M \ --size10G --numjobs4 --iodepth16 --group_reporting--direct1跳过客户端页面缓存确保压到存储端--bs1M模拟大文件写入--numjobs4配合--iodepth16产生足够并发。测完写再测读--rwread然后测混合随机--rwrandrw --bs4k看小文件 IOPS。注意同一个测试要跑两遍第一遍是预写第二遍结果才可信因为文件系统首次写入涉及空间分配和条带初始化。6.3 保留配置基线给未来排错留一条退路ParaStor 的参数几乎都支持在线调整这是便利也是风险。调参后出问题往往很难说清是上周改了哪一条、改了之后有没有重启触发。我习惯在上线第一个月每周导一次集群配置把初始化参数、存储池设置、卷导出配置存成带日期的文件任何一次变更前先做 diff变更后更新基线。这套习惯救过我很多次。某个训练集群突然变慢回看基线发现是前一天有人把条带宽度从 4 调到了 16服务的是小文件业务立刻回滚就恢复了。希望帮到你。本文还有配套的精品资源点击获取