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 路径通过行分隔,例如:
| 例如: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: 6222Successful path: 6222Fail path: 0Loading time: 6 s