- 存储
- 分布式文件系统
- 对象存储
- 云原生
【免费下载链接】cubefs
cloud-native distributed storage
本指南对应仓库 docs-zh/source/evaluation/env.md,讲解在 CubeFS v3.3.1 集群上开展性能评估(如 fio、mdtest 基准测试)之前的环境准备工作:从集群节点规划、卷(Volume)关键参数选型,到使用cfs-cli创建测试卷、并通过 Master API 批量扩容数据分区(Data Partition)的完整操作流程。读完本文,你将掌握一套可直接复制的性能测试环境搭建方法,并理解每个卷参数背后的源码实现逻辑。
一、集群信息规划:测试环境的硬件基线
性能测试结果的可信度首先取决于测试集群的硬件配置。本仓库评估文档给出的参考集群由三类节点组成,均以容器化(docker 容器)方式部署:
| 节点类型 | 节点数 | CPU | 内存 | 存储 | 网络 | 备注 |
|---|---|---|---|---|---|---|
| 管理节点(Master) | 3 | 8 | 32GiB | 197GiB SSD | 10 Gb/s | docker 容器 |
| 元数据节点(MetaNode) | 5 | 80 | 377GiB | 4 x 3.7TiB SSD | 50 Gb/s | 混合部署 |
| 数据节点(DataNode) | 5 | 80 | 377GiB | 4 x 3.7TiB SSD | 50 Gb/s | 混合部署 |
规划要点说明:
- 管理节点三副本:Master 依赖 Raft 协议保证元数据一致性,3 节点可容忍单点故障,是生产与测试环境的常规配置;
- 元数据节点与数据节点混合部署:文档注明两者“混合部署”,即同一批 5 台物理机上同时运行 MetaNode 与 DataNode 进程。这种拓扑在压测时会让元数据操作与数据读写共享网络与磁盘资源,评估结果更贴近真实混合负载;
- 高性能 SSD 与高带宽网络:元数据节点承载 B+ 树索引与目录项操作,数据节点承载数据分片的读写,4 x 3.7TiB SSD 与 50 Gb/s 网络可显著降低 I/O 与网络瓶颈,避免压测结果被基础设施拖累。
该表是性能评估文档给出的基线环境,实际部署时可参考仓库 docs-zh/source 下的部署文档按需调整节点规模。
二、卷设置:性能测试前必须明确的参数
卷(Volume)是 CubeFS 中用户可操作的存储容器,性能测试前需要根据测试目标(顺序/随机读写、元数据密集型等)预先规划好卷参数。评估环境在未设置配额、DataNode 未设置流控限速的前提下,采用了以下卷参数:
| 参数 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| FollowerRead | False | False | 是否开启 FollowerRead(从副本读) |
| Capacity | 10 GB | 300 000 000 GB | 容量 |
| Data Replica Number | 3 | 500 | 数据副本数 |
| Meta Replica Number | 3 | 10 | 元数据副本数 |
| Data Partition Size | 120 GB | 120 GB | 只是理论值上限,并不预分配空间 |
| Data Partition Count | 10 | 1500 | 数据分区数 |
| Meta Partition Count | 3 | 10 | 元数据分区数 |
| Cross Zone | False | False | 是否跨 zone |
需要说明的是,表中“默认值”列与实际 CLI 工具的默认参数略有出入。从源码看,cfs-cli volume create的真实默认值为:容量 10(单位 GB)、初始 Meta 分区数 3、初始 Data 分区数 3、Data 分区大小 120 GB,见 cli/cmd/vol.go:
cmdVolDefaultMPCount = 3 cmdVolDefaultDPCount = 3 cmdVolDefaultDPSize = 120 cmdVolDefaultCapacity = 10 // 100GB cmdVolDefaultEbsBlkSize = 8 * 1024 * 1024各参数在性能测试中的实际影响:
- Capacity(容量):单位 GB。文档推荐值 300 000 000 GB 是面向大规模评测的理论上限,测试卷容量只决定卷的“配额上限”,不会预占磁盘空间(与 Data Partition Size 一样为逻辑上限);
- Data Replica Number / Meta Replica Number(副本数):分别控制数据分区与元数据分区的副本个数,副本数越高冗余与读并发能力越强,但写入开销也越大。文档给出的推荐值面向大规模并发评测场景;
- Data Partition Size(数据分区大小):单个数据分区的逻辑容量上限,默认与推荐值均为 120 GB。需要注意它“只是理论值上限,并不预分配空间”,实际磁盘占用随写入增长;
- Data Partition Count / Meta Partition Count(分区数):创建卷时初始化的数据分区数与元数据分区数。分区数越多,数据打散到更多 DataNode、元数据索引分布更广,并发吞吐上限更高,这也是文档推荐值远高于默认值的原因;
- FollowerRead:默认 False,即客户端默认从数据分区主副本读取。若开启,客户端可从 follower 副本读,适合读多写少场景,但对一致性与副本间同步有额外要求,评估文档选择保持默认关闭;
- Cross Zone:默认 False,即单 zone 部署,不启用跨可用区容灾,简化测试拓扑。
三、使用 cfs-cli 创建测试卷
卷创建通过cfs-cli(对应仓库 cli 目录下的 CLI 工具,入口为 cli/cli.go)执行。评估文档给出的完整命令如下:
./cfs-cli volume create test-vol {owner} --capacity=300000000 --mp-count=10其中{owner}为卷属主用户。命令执行后 CLI 会回显将要创建的卷配置并请求确认,完整输出如下:
Create a new volume: Name : test-vol Owner : {owner} capacity : 300000000 G deleteLockTime : 0 h crossZone : false DefaultPriority : false description : mpCount : 10 replicaNum : size : 120 G volType : 0 followerRead : false readOnlyWhenFull : false zoneName : ebsBlkSize : 8388608 byte cacheTTL : 30 day cacheHighWater : 80 cacheLowWater : 60 cacheLRUInterval : 5 min TransactionMask : TransactionTimeout : 1 min TxConflictRetryNum : 0 TxConflictRetryInterval : 0 ms Confirm (yes/no)[yes]: yes Create volume success.从源码 cli/cmd/vol.go 可以看出,CLI 在回显后等待用户输入确认(Confirm (yes/no)[yes]),输入yes或直接回车即提交;随后通过client.AdminAPI().CreateVolName(...)调用 Master 创建卷。该命令常用的核心参数及含义如下:
| CLI 参数 | 默认值 | 说明 |
|---|---|---|
--capacity | 10 | 卷容量,单位 GB(cli/cmd/vol.go中CliFlagCapacity) |
--mp-count | 3 | 初始元数据分区数(CliFlagMPCount) |
--dp-count | 3 | 初始数据分区数(CliFlagDPCount) |
--dp-size | 120 | 数据分区大小,单位 GB(CliFlagDataPartitionSize) |
--replica-num | 3(普通卷)/1(低频卷) | 数据分区副本数(CliFlagReplicaNum) |
--follower-read | false | 是否开启从副本读(CliFlagFollowerRead) |
--crossZone | false | 是否跨 zone(CliFlagCrossZone) |
--zone-name | 空 | 卷所在 zone 名称 |
--delete-lock-time | 0 | 卷删除锁定时间,单位小时 |
--ebs-blk-size | 8388608 | 与 BlobStore 对接的数据块大小,单位字节 |
--yes/-y | false | 跳过确认提示直接创建 |
其余回显字段(如cacheTTL、cacheHighWater、cacheLowWater、TransactionMask等)为远程缓存与事务相关配置的当前值,未显式指定时使用 Master 侧默认值,一般性能测试无需调整。
命令参数定义可进一步查看 cli/cmd/const.go 中的CliFlagMPCount、CliFlagDPCount、CliFlagCapacity、CliFlagReplicaNum、CliFlagFollowerRead等常量。
四、通过 Master API 扩容数据分区
性能测试需要足够多的数据分区来分散 I/O 负载,因此评估文档在创建卷后还进行了数据分区扩容,使用 Master 的 HTTP API 直接批量创建分区:
curl -v "http://10.196.59.198:17010/dataPartition/create?count=32&name=test-vol"参数说明:
10.196.59.198:17010:Master 节点地址与 HTTP 服务端口;name=test-vol:目标卷名称;count=32:本次批量创建的数据分区数量。文档标题注明“扩容 dp 至 500 个”,即通过多次执行(或调整 count)分批将分区总数扩到目标值 500。
从源码 master/http_server.go 可以看到该路由注册在 Master HTTP 服务上,处理函数为 master/api_service.go 中的createDataPartition。该处理逻辑的关键点包括:
- 每次请求的
count不能超过单次上限maxInitDataPartitionCnt(值为 200,见 master/const.go),否则直接返回参数错误; - 默认(未加
force=true)时会检查卷当前可写分区数是否超过 Master 配置的MaxWritableDataPartitionCnt上限,该上限默认 1000,可通过 Master 配置项maxWritableDataPartitionCnt调整(见 master/config.go 与 master/server.go); - 低频卷(StorageClass 为 BlobStore)不允许调用此接口扩容;
- 成功后会返回“createDataPartition succeeeds”并附带扩容前后的分区数量对比信息。
因此,文档示例中count=32完全在单次上限 200 以内;若要一次性创建更多分区,可调大 count(≤200)或分批执行,直至卷的总数据分区数达到目标值(如 500)。扩容后,新建的数据分区会由 Master 依据 DataNode 的容量与负载均衡策略自动选择宿主节点,客户端写入时数据将被均匀打散到这些分区上。
五、测试前的检查清单
完成上述环境准备后,建议在正式压测前核对以下几点:
- 卷状态确认:通过
./cfs-cli volume info test-vol确认容量、分区数与副本数与规划一致; - 分区分布确认:确认扩容后的数据分区已成功创建、宿主节点分布均衡,可参考 master/data_partition_test.go 中
createDataPartition测试对创建数量与总数的断言方式来验证; - 流控与配额:本评估环境未设置配额、DataNode 未设置流控限速,以保证测试数据能反映集群真实吞吐上限;若你的环境开启了流控,需注意其会对带宽/IOPS 结果产生影响;
- 挂载验证:环境准备完成后即可挂载测试卷,后续的 I/O 基准测试(如仓库 docs-zh/source/evaluation/io.md 涉及的 fio 场景)与元数据基准测试(如 docs-zh/source/evaluation/meta.md 涉及的 mdtest 场景)都建立在本指南的集群与卷配置之上。
六、小结
本指南围绕 CubeFS v3.3.1 性能评估的“环境准备”阶段,完整覆盖了三件事:规划由 3 管理节点 + 5 元数据节点 + 5 数据节点构成的混合部署测试集群;依据卷参数表确定 FollowerRead、容量、副本数、分区大小与分区数量等关键配置;通过cfs-cli volume create创建测试卷,并通过dataPartition/createAPI 将数据分区批量扩容至测试所需规模。结合 cli/cmd/vol.go、master/api_service.go 等源码,你既能照此步骤复现测试环境,也能理解每个参数在 Master 调度与客户端读写路径中的实际作用,为后续解读 I/O 与元数据基准测试结果打下基础。
- 存储
- 分布式文件系统
- 对象存储
- 云原生
【免费下载链接】cubefs
cloud-native distributed storage
相关推荐
CubeFS 元数据性能评估:基于 mdtest 的目录与文件操作基准测试实战指南
CubeFS 元数据性能评估:基于 mdtest 的目录与文件操作基准测试实战指南 本指南以 CubeFS 官方在 v3.3.1 集群环境下使用 mdtest
存储分布式文件系统对象存储云原生如何为Amlogic设备打造高效Armbian系统:性能评估与适配实战指南
如何为Amlogic设备打造高效Armbian系统:性能评估与适配实战指南 Amlogic s9xxx armbian项目是一款专为Amlogic、Allwin
嵌入式开发工具构建工具操作系统SWE-bench 完整安装指南:从环境准备到 Docker 评估环境搭建
SWE bench 完整安装指南:从环境准备到 Docker 评估环境搭建 本篇技术指南聚焦 SWE bench 的本地安装与运行环境配置,覆盖前置条件、标准安
模型评测AI 评测大模型人工智能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考