Only the Chinese version of this page is provided currently. The English version will be provided soon.

数据预热

Last updated: 2026-01-27 17:23:21

GooseFS 缓存特性说明

为提供最佳性能,GooseFS 使用懒加载的形式加载缓存数据,其元数据预热及数据预热的原理如下。

元数据预热原理

首次访问 GooseFS 时,因为 GooseFS 元数据中不存在路径信息,会主动从 COS 同步访问的元数据信息。例如首次访问 ls /a/ 时,由于GooseFS 不存在该路径信息,会从 COS 中进行同步,将 COS /a/ 目录下的所有文件元数据信息同步到 GooseFS 中。

当 GooseFS 已经存在某个目录后,再次访问该路径将不会再到 COS 中确认一致性。因此,如果您绕过 GooseFS 直接更改了同目录下的文件,GooseFS 将无法感知此变化。例如如果您绕过 GooseFS,新增了如下文件 /a/test-2.txt 或覆盖更新了之前的 /a/test.txt 文件,此时 GooseFS 的元数据都不会更新。

若需要将更新过的 COS 路径同步到 GooseFS 中,需要执行手动元数据预热,有以下三种方式可以执行:
说明:
元数据发现、数据预热任务需要 GooseFS 集群版本 ≥ 1.5.1,命令行方式需要在执行的机器上安装 GooseFS 客户端并解压。如需升级 GooseFS 集群服务端版本,或获取最新客户端版本,请 联系我们
1. GooseFS 控制台 > 实例详情 > 命名空间中开启 元数据发现 功能,由 GooseFS 后台自动发现并更新元数据信息。
2. GooseFS 控制台 或通过 API 接口发起元数据预热任务
3. 通过 GooseFS 命令行执行元数据预热,格式如下。
# 递归更新目录下的所有元数据信息,需要将 <ip1>、<ip2>、<ip3> 替换为 GooseFS Master 地址
./bin/goosefs fs -Dgoosefs.master.embedded.journal.addresses=<ip1>:9202,<ip2>:9202,<ip3>:9202 loadMetadata -R /
# 递归更新目录下的所有元数据信息并对比每个文件的 MD5,适用于覆盖更新场景,需要将 <ip1>、<ip2>、<ip3> 替换为 GooseFS Master 地址
./bin/goosefs fs -Dgoosefs.master.embedded.journal.addresses=<ip1>:9202,<ip2>:9202,<ip3>:9202 loadMetadata -R -F /

数据预热原理

相同逻辑,首次访问 GooseFS 时 GooseFS 会从 COS 拉取数据并缓存在 GooseFS 中,后续再请求相同文件时,会直接从 GooseFS 返回。因此,首次访问时,为保证性能最优,需要主动预热,可通过以下方式执行数据预热:
说明:
元数据发现、数据预热任务需要 GooseFS 集群版本 ≥ 1.5.1,命令行方式需要在执行的机器上安装 GooseFS 客户端并解压。如需升级 GooseFS 集群服务端版本,或获取最新客户端版本,请 联系我们
1. GooseFS 控制台 或通过 API 接口发起数据预热任务
2. 通过 GooseFS 命令行执行数据预热,格式如下。该方式需要在执行的机器上安装 GooseFS 客户端并解压。如需获取最新客户端版本,请 联系我们
# 需要将 <ip1>、<ip2>、<ip3> 替换为 GooseFS Master 地址、<num> 替换为预热的副本数、<需要预热的目录> 替换为需要预热的目录
./bin/goosefs fs -Dgoosefs.master.embedded.journal.addresses=<ip1>:9202,<ip2>:9202,<ip3>:9202 distributedLoad --replication <num> /<需要预热的目录>
如果是覆盖更新场景,需要先执行元数据预热以保证一致性。更新元数据信息后,在读取数据时 GooseFS 判断元数据中记录的 MD5 与 GooseFS 缓存数据的 MD5 不一致,会再次去 COS 拉取数据。执行方式如下:
1. GooseFS 控制台 发起数据预热任务,会自动进行元数据预热。
2. 通过 API 接口发起预热任务,需要将 DistributedLoadAttrs.MetadataSync 值传为 true。
3. 通过 GooseFS 命令行执行数据预热。
3.1 集群版本 < 1.5.1 时,命令格式如下:
# 需要将 <ip1>、<ip2>、<ip3> 替换为 GooseFS Master 地址、<num> 替换为预热的副本数、<需要预热的目录> 替换为需要预热的目录
./bin/goosefs fs -Dgoosefs.master.embedded.journal.addresses=<ip1>:9202,<ip2>:9202,<ip3>:9202 -Dgoosefs.user.file.metadata.sync.interval=0 distributedLoad --replication <num> /<需要预热的目录>
3.2 集群版本 >= 1.5.1命令格式如下:
# 需要将 <ip1>、<ip2>、<ip3> 替换为 GooseFS Master 地址、<num> 替换为预热的副本数、<需要预热的目录> 替换为需要预热的目录
./bin/goosefs fs -Dgoosefs.master.embedded.journal.addresses=<ip1>:9202,<ip2>:9202,<ip3>:9202 distributedLoad -F -M --replication <num> /<需要预热的目录>

在控制台管理数据预热任务

创建预热任务

1. 访问 GooseFS 控制台,进入需要管理的集群页面。
2. 在集群页面的侧边栏中点击数据预热,进入数据预热的管理页面,点击创建预热任务按钮。

相关字段描述及配置可参考下表。
字段
说明
建议配置
任务名称
预热任务名称
自定义,例如:test_load_task
任务类型
预热任务的类型,可选仅预热元数据预热元数据和数据内容
按需选择
预热范围
预热的数据范围,可选通过 GooseFS 目录指定通过 COS 清单批量预热
按需选择
GooseFS 路径
预热范围选择通过 GooseFS 目录指定时需填写,指定需要预热的 GooseFS 路径(命名空间的路径)
例如:添加了名称为 cosn 的命名空间挂载 COS 整桶,需要预热桶的根路径,则填写 /cosn/
COS 路径
预热范围选择通过 COS 清单批量预热时需填写,指定清单所在的 COS 文件路径,仅支持 txt 格式。txt 文件中将需要预热的 GooseFS 路径通过行分隔,例如:
/load_path1/
/load_path2/test.txt
例如:bucket-125000000/list.txt
结果报告投递路径
为方便任务运维,创建任务默认会产生任务报告,并投递在 COS 桶中。该字段需要填写预期投递的 COS 路径
例如:bucket-125000000/GoosefSLoadReport/
跳过相同文件
在预热时跳过相同命名的文件,不比较 GooseFS 与 COS 中文件的 MD5 值是否相同。如果您的业务有覆盖写场景,推荐打开此配置
打开
优先级
任务优先级,数值越高代表优先级越高,范围为 1-9999
按需填写,例如:1
副本数配置
预热任务类型选择预热元数据和数据内容时需填写
默认建议选择单副本
若您的业务为单热点场景,建议选择指定副本数并配置 3 副本。
3. 点击确定提交预热任务。

查看预热任务


访问 GooseFS 控制台,进入需要管理的集群页面,在集群页面的侧边栏点击数据预热,进入数据预热的管理页面,即可查看任务列表。待执行状态的任务,可以通过更多操作中下拉修改任务优先级或取消任务,已执行中的任务仅支持取消,无法修改优先级。

任务执行完后将会在任务预设的 COS 路径下投递形如此格式的任务报告:
--------------- Failed Files Path ---------------

--------------- General Report ---------------
Total path: 6222
Successful path: 6222
Fail path: 0
Loading time: 6 s