拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CubeFS 性能评估环境准备与卷配置实战指南(v3.3.1)

CubeFS 性能评估环境准备与卷配置实战指南(v3.3.1)
  • 存储
  • 分布式文件系统
  • 对象存储
  • 云原生

【免费下载链接】cubefs

cloud-native distributed storage

项目地址:https://gitcode.com/gh_mirrors/cu/cubefs
点击查看免费下载

本指南对应仓库 docs-zh/source/evaluation/env.md,讲解在 CubeFS v3.3.1 集群上开展性能评估(如 fio、mdtest 基准测试)之前的环境准备工作:从集群节点规划、卷(Volume)关键参数选型,到使用cfs-cli创建测试卷、并通过 Master API 批量扩容数据分区(Data Partition)的完整操作流程。读完本文,你将掌握一套可直接复制的性能测试环境搭建方法,并理解每个卷参数背后的源码实现逻辑。

一、集群信息规划:测试环境的硬件基线

性能测试结果的可信度首先取决于测试集群的硬件配置。本仓库评估文档给出的参考集群由三类节点组成,均以容器化(docker 容器)方式部署:

节点类型节点数CPU内存存储网络备注
管理节点(Master)3832GiB197GiB SSD10 Gb/sdocker 容器
元数据节点(MetaNode)580377GiB4 x 3.7TiB SSD50 Gb/s混合部署
数据节点(DataNode)580377GiB4 x 3.7TiB SSD50 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 未设置流控限速的前提下,采用了以下卷参数:

参数默认值推荐值说明
FollowerReadFalseFalse是否开启 FollowerRead(从副本读)
Capacity10 GB300 000 000 GB容量
Data Replica Number3500数据副本数
Meta Replica Number310元数据副本数
Data Partition Size120 GB120 GB只是理论值上限,并不预分配空间
Data Partition Count101500数据分区数
Meta Partition Count310元数据分区数
Cross ZoneFalseFalse是否跨 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 参数默认值说明
--capacity10卷容量,单位 GB(cli/cmd/vol.go中CliFlagCapacity)
--mp-count3初始元数据分区数(CliFlagMPCount)
--dp-count3初始数据分区数(CliFlagDPCount)
--dp-size120数据分区大小,单位 GB(CliFlagDataPartitionSize)
--replica-num3(普通卷)/1(低频卷)数据分区副本数(CliFlagReplicaNum)
--follower-readfalse是否开启从副本读(CliFlagFollowerRead)
--crossZonefalse是否跨 zone(CliFlagCrossZone)
--zone-name空卷所在 zone 名称
--delete-lock-time0卷删除锁定时间,单位小时
--ebs-blk-size8388608与 BlobStore 对接的数据块大小,单位字节
--yes/-yfalse跳过确认提示直接创建

其余回显字段(如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 的容量与负载均衡策略自动选择宿主节点,客户端写入时数据将被均匀打散到这些分区上。

五、测试前的检查清单

完成上述环境准备后,建议在正式压测前核对以下几点:

  1. 卷状态确认:通过./cfs-cli volume info test-vol确认容量、分区数与副本数与规划一致;
  2. 分区分布确认:确认扩容后的数据分区已成功创建、宿主节点分布均衡,可参考 master/data_partition_test.go 中createDataPartition测试对创建数量与总数的断言方式来验证;
  3. 流控与配额:本评估环境未设置配额、DataNode 未设置流控限速,以保证测试数据能反映集群真实吞吐上限;若你的环境开启了流控,需注意其会对带宽/IOPS 结果产生影响;
  4. 挂载验证:环境准备完成后即可挂载测试卷,后续的 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

项目地址:https://gitcode.com/gh_mirrors/cu/cubefs
点击查看免费下载

相关推荐

上一篇:Obsidian Admonition与其他插件协作:Templater和Templates插件集成教程
下一篇:Apereo CAS 配置管理:基于 Spring Cloud Kubernetes 的 ConfigMap 与 Secret 配置源实战

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表