腾讯云数据加速器GooseFS完全对接指南:从部署到性能调优
1. 认识腾讯云数据加速器GooseFS
数据加速器GooseFS(Data Accelerator Goose FileSystem)是腾讯云推出的高可靠、高可用、弹性的数据加速服务。它以对象存储COS作为数据湖存储底座,为数据湖生态中的计算应用提供统一的数据湖入口,加速海量数据分析、机器学习、人工智能等业务访问存储的性能。
GooseFS在腾讯云数据湖生态中扮演着“上承计算,下启存储”的核心角色。它基于开源Alluxio的分布式缓存架构,通过Master和Worker节点提供强大的分布式Cache能力,将应用层产生的数据持久化在计算节点本地的内存和磁盘上,主要存储热数据和暂态数据。
相比直接读写COS上的数据,GooseFS能够为上层计算应用带来十倍以上的性能提升,极大提高生产效率。此外,GooseFS采用分布式集群架构,具备弹性、高可靠、高可用等特性,为上层计算应用提供统一的命名空间和访问协议,方便用户在不同的存储系统之间管理和流转数据。
1.1 核心功能一览
缓存加速和数据本地化:GooseFS可以与计算节点混合部署提高数据本地性,利用高速缓存功能解决存储性能问题,提高写入对象存储COS的带宽。
融合存储语义:GooseFS支持HDFS、POSIX等协议,支持对接腾讯云COS、云HDFS等多种云存储,适用于多种生态和应用场景。
统一命名空间管理:针对存储在腾讯云COS、云HDFS等多种业务数据,提供不同的读写缓存策略和生命周期管理能力。
Table元数据感知:对于大数据场景下的数据Table,提供GooseFS Catalog用于感知元数据Table,提供Table级别的Cache预热。
1.2 GooseFS与GooseFSx的区别
数据加速器包含两个子产品:GooseFS和GooseFSx。GooseFS旨在提供一站式的缓存解决方案,在利用数据本地性和高速缓存、统一存储访问语义等方面具有天然优势。GooseFSx则侧重于轻量级挂载场景,支持将对象存储COS桶挂载到本地文件系统,兼容POSIX文件操作。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
2. 准备工作:账号与权限
在使用腾讯云数据加速器GooseFS服务前,需要先完成以下准备工作:
注册腾讯云账号:如果还没有腾讯云账号,需要先完成注册。
完成实名认证:账号注册完成后,使用该账号登录腾讯云控制台,开始实名认证。
开通GooseFS服务:在登录控制台使用GooseFS前,需要联系腾讯云开通GooseFS服务。
GooseFS授权:开通GooseFS服务后需要预设角色并授予数据加速器GooseFS相关权限。如果没有授权权限,需要将授权链接复制给主账号或有授权权限的子账号进行角色授权。
创建COS存储桶:使用GooseFS创建命名空间需要挂载COS存储桶,请在对象存储控制台创建COS存储桶。
准备计算节点:如果使用管控面托管或Master托管模式,需要自行准备Master或Worker节点,请在云服务器控制台创建云服务器。
3. 部署方式详解
GooseFS提供了多种部署方式,用户可以根据实际业务场景灵活选择。
3.1 控制台快速创建(推荐)
对于大多数用户来说,通过控制台快速创建是最便捷的方式。
登录数据加速器GooseFS控制台,在左侧导航栏中选择GooseFS > 实例列表,进入GooseFS集群列表页面。
单击新建,进入GooseFS创建流程。填写集群信息,需要配置如下参数项:
- 集群名称:集群唯一标记,账号下全局唯一
- 集群描述:用于表述集群的属性、用途等信息
- 集群类别:分为腾讯公有云集群和IDC云集群
- 地域:集群所在地域,一般跟计算业务所在集群的地域一致
- 可用区:集群所在的可用区,一般跟计算集群同可用区
- 所属VPC:集群所在的VPC,一般跟计算集群同VPC,尽量避免跨VPC部署
- 所属子网:集群所在的子网
- 集群标签:集群标签信息
GooseFS部署模式包括全托管、Master托管、管控面托管三种模式:
- 全托管模式:用户无需自行购买Master节点和Worker节点,所有节点均由腾讯云托管。腾讯云团队负责集群的整体可用性和稳定性。
- Master托管模式:用户在GooseFS平台购买Master实例;Worker节点需要由用户自己购买CVM实例作为节点。
- 管控面托管模式:用户自行准备Master和Worker节点。
3.2 独立部署安装
对于需要自定义配置或离线部署的场景,可以选择独立部署方式。
前提条件:在COS服务上创建一个存储桶作为远端存储。安装SSH,确保能通过SSH连接到localhost并远程登录。在CVM服务上购买一台实例,并确保磁盘已经挂载到实例上。
下载并配置GooseFS:
# 新建本地目录并下载安装包
$ cd /usr/local
$ mkdir service
$ cd service
$ wget https://downloads.tencentgoosefs.cn/goosefs/1.4.5/release/goosefs-1.4.5-bin.tar.gz
# 解压安装包
$ tar -zxvf goosefs-1.4.5-bin.tar.gz
$ cd goosefs-1.4.5
解压后得到goosefs-1.4.5目录,即GooseFS的主目录。下文以${GOOSEFS_HOME}代指该目录的绝对路径。
在${GOOSEFS_HOME}/conf目录下创建配置文件:
# 使用AI场景模板
$ cp conf/goosefs-site.properties.ai_template conf/goosefs-site.properties
$ vim conf/goosefs-site.properties
# 或使用大数据场景模板
$ cp conf/goosefs-site.properties.bigdata_template conf/goosefs-site.properties
$ vim conf/goosefs-site.properties
AI场景模板中的关键配置项如下:
# Master配置
goosefs.master.rpc.addresses=<master1>:9200,<master2>:9200,<master3>:9200
goosefs.master.embedded.journal.addresses=<master1>:9202,<master2>:9202,<master3>:9202
goosefs.master.journal.folder=<path>
goosefs.master.metastore.dir=<path>
# Worker配置
goosefs.worker.tieredstore.level0.dirs.path=<path>,<path>,<path>
goosefs.worker.tieredstore.level0.dirs.quota=<capacity>,<capacity>,<capacity>
# Client配置
goosefs.user.file.delete.unchecked=true
goosefs.user.file.passive.cache.enabled=false
3.3 容器服务TKE中部署
腾讯云容器服务TKE支持通过创建PersistentVolume和PersistentVolumeClaim,并为工作负载挂载数据卷的方式使用GooseFS。
安装数据加速器扩展组件:登录容器服务控制台,选择左侧导航栏中的集群。在集群管理页面,单击目标集群ID进入集群详情页。选择左侧导航中的组件管理,在组件管理页面中单击新建。勾选GooseFS组件,单击完成。
创建支持GooseFS-CSI静态配置的PV:在目标集群详情页面,选择左侧导航中的存储,在PersistentVolume页面单击新建。来源设置选择静态创建,Provisioner选择数据加速GooseFS,读写权限选择多机读写。GooseFS集群按需选择可用集群,GooseFS命名空间填写已在集群中创建的命名空间。
4. 命名空间:连接GooseFS与COS的桥梁
GooseFS通过命名空间(Namespace)组织和管理缓存数据。命名空间是GooseFS集群访问数据的统一访问接口,可以挂载多种底层存储系统,包括对象存储COS、云HDFS等。
创建命名空间的操作与Linux文件系统中挂载文件卷类似。用户可以通过命名空间管理功能创建、更新、删除命名空间,为GooseFS集群关联COS存储桶并设置缓存读写策略。
4.1 控制台创建命名空间
选择需要创建命名空间的GooseFS集群,进入集群详情页面,在侧边栏中单击命名空间,进入命名空间子页面。
单击新增命名空间,填写如下字段:
- 存储桶来源:可选择本账号或其他账号的存储桶
- COS存储桶:选择需要挂载的存储桶
- 空间名称:命名空间的名称
- 挂载范围:可选择整个存储桶或指定目录前缀
- UFS URI:用于访问和操作UFS文件系统中文件的地址
- 读策略:当前只支持CACHE
- 写策略:当前支持CACHE_THROUGH和THROUGH
UFS属性用于设置访问底层存储的配置信息:
fs.cosn.bucket.region=ap-beijing
fs.cosn.flush.enabled=true
fs.cosn.upload.part.size=8MB
fs.cosn.userinfo.secretId=您的SecretId
fs.cosn.userinfo.secretKey=您的SecretKey
SecretId和SecretKey合称为云API密钥,是用户访问腾讯云API进行身份验证时需要用到的安全凭证。
4.2 命令行创建命名空间
用户也可以通过GooseFS命令行工具创建命名空间:
# 创建命名空间,将COS存储桶挂载到GooseFS
$ goosefs ns create <namespace_name> cosn://<bucket-name>-<appid>/<path> \
--secret-id <your-secret-id> \
--secret-key <your-secret-key> \
--region <region>
# 示例
$ goosefs ns create my_data cosn://my-bucket-1234567890/data/ \
--secret-id AKIDxxxxxxxxxxxxxxxx \
--secret-key xxxxxxxxxxxxxxxx \
--region ap-beijing
5. 统一命名空间访问
创建命名空间后,可以通过GooseFS提供的统一命名空间访问数据。GooseFS支持通过`gfs://`这一统一的schema访问不同底层存储系统中的数据。
例如,将COS存储桶`bucket-1`的`BU_A`目录和`bucket-2`分别挂载到GooseFS的不同命名空间后,可以通过统一的`gfs://`路径访问这些数据。
# 通过统一命名空间访问数据
$ goosefs fs ls gfs://my_data/
$ goosefs fs cat gfs://my_data/file.txt
$ goosefs fs cp gfs://my_data/source.txt gfs://my_data/dest.txt
GooseFS还提供了一种客户端路径映射方式,让已经使用CosN工具访问COS的用户可以在不修改现有Hive表定义的前提下,继续使用CosN scheme访问GooseFS。该特性方便用户在不修改已有表定义的情况下,对GooseFS的功能和性能进行对比测试。
6. GooseFS-FUSE:POSIX语义访问
GooseFS-FUSE可以将GooseFS分布式文件系统挂载到Unix机器的本地文件系统上。通过这一特性,一些标准命令行工具(如ls、cat、echo)可以直接访问GooseFS分布式文件系统中的数据。
6.1 挂载操作
# 启动FUSE挂载,将GooseFS路径/people挂载到本地/mnt/people目录
$ ${GOOSEFS_HOME}/integration/fuse/bin/goosefs-fuse mount /mnt/people gfs:///people
# 该命令会启动一个后台Java进程,用于将对应的GooseFS路径挂载到指定路径
6.2 卸载操作
# 卸载FUSE挂载点
$ ${GOOSEFS_HOME}/integration/fuse/bin/goosefs-fuse umount /mnt/people
启用元数据加速功能后,可以提升集群对元数据的操作性能,例如List、Rename等操作,并且支持原生的Append、Truncate操作,可广泛应用于大数据、高性能计算、机器学习、AI等场景。
7. 数据预热:distributedLoad指令
GooseFS为用户提供了一个就近计算端的缓存文件系统。当文件存储在远端存储系统时(例如对象存储),用户可以通过distributedLoad指令将需要使用的文件数据和元数据加载到GooseFS集群中,起到减少访问延迟、加速计算作业的效果。
7.1 指令格式
distributedLoad [-A] [--replication <num>] [--active-jobs <num>] [--expire-time] <path>
参数说明:
- -A:是否启用原子性的distributed load能力
- --active-jobs:可以同时启用的数据加载任务数量,默认上限值为3000
- --expire-time:设置清除用于数据加载的临时目录的过期时间,默认为24小时
- --replication:每个加载任务加载的Block数据副本数,默认为1
7.2 执行流程
distributedLoad指令的完整执行流程涉及GooseFS Client、JobMaster、JobWorker、Worker四个模块:
- GooseFS Client发起任务
- GooseFS JobMaster将每个文件转换为Job,并按照Block的集合拆分为不同的Task
- GooseFS JobMaster将不同的Task分配给JobWorker,由不同的JobWorker发起Load操作
- GooseFS JobWorker并发执行Tasks,每个Task向Worker执行请求读操作,并发起写操作
7.3 使用示例
# 将指定路径的数据加载到GooseFS缓存中
$ goosefs fs distributedLoad /path/to/data
# 指定副本数和并发任务数
$ goosefs fs distributedLoad --replication 2 --active-jobs 100 /path/to/data
# 启用原子性加载
$ goosefs fs distributedLoad -A /path/to/data
8. 缓存配置与管理
GooseFS的缓存配置可以在`goosefs-site.properties`文件中进行设置。
8.1 缓存层级
GooseFS提供单层存储和多层存储两种缓存层级。单层存储只使用一种存储介质,多层存储使用多种存储介质,可以根据业务负载情况来决定使用何种存储介质,以提供匹配的I/O性能。GooseFS默认配置为单层存储。在多层存储的场景下,缓存淘汰会带来较多的性能开销,因此推荐使用单层存储。
根据I/O性能的高低,一般可以选用MEM(内存)、SSD(固态存储)和HDD(硬盘存储)作为存储介质。
通过修改配置文件中的`levels`参数可以修改缓存层级:
# 单层存储
goosefs.worker.tieredstore.levels=1
# 三层存储
goosefs.worker.tieredstore.levels=3
通过修改`alias`参数可以修改缓存层对应的存储介质:
goosefs.worker.tieredstore.level{x}.alias=MEM
8.2 单层存储配置示例
单层存储模式下,常用的系统配置项如下:
goosefs.worker.tieredstore.levels=1
goosefs.worker.tieredstore.level0.alias=HDD
goosefs.worker.ramdisk.size=16GB
goosefs.worker.memory.size=100GB
goosefs.worker.tieredstore.level0.dirs.path=/data/GooseFSWorker,/data1/GooseFSWorker,/data2/GooseFSWorker,/data3/GooseFSWorker,/data4/GooseFSWorker
goosefs.worker.tieredstore.level0.dirs.mediumtype=MEM,MEM,MEM,SSD,SSD
goosefs.worker.tieredstore.level0.dirs.quota=16GB,16GB,16GB,100GB,100GB
配置项说明:
- ramdisk.size:指定worker节点占用内存的大小,ramdisk的容量必须比memory小
- memory.size:指定GooseFS系统总内存,实际物理存储空间必须比该数值大
- dirs.path:指定目录,由GooseFS为指定目录分配存储介质
- dirs.mediumtype:指定每个目录对应的存储介质类型,顺序需与dirs.path一一匹配
8.3 缓存淘汰策略
GooseFS的缓存淘汰策略主要区分为LRU(Least Recently Used)和LRFU(Least Recently Frequently Used)两种。用户可以根据业务访问模式选择合适的淘汰策略。
8.4 PageStore新特性
从GooseFS-1.7.0以上的版本开始支持PageStore缓存新特性。相较于传统的BlockStore缓存,PageStore可以极大地优化离散IO访问模型的缓存空间利用率以及冷读效率。PageStore的核心配置参数如下:
# 指定Worker上的存储类型,可选FILE和PAGE
goosefs.worker.block.store.type=PAGE
# 指定每个Page的大小,默认1MB
goosefs.worker.page.store.page.size=1MB
9. 高可用架构部署
在大数据场景中,通常采用集群模式部署,并且采用高可用架构以满足业务连续性的要求。
9.1 高可用架构原理
高可用架构指多个Master节点的主备多活架构。多个Master节点中只有一个会作为主节点对外提供服务,其他的备节点通过同步共享日志来保持与主节点相同的文件系统状态。当主节点故障宕机后,会从当前的备节点中自动选择一个接替主节点继续对外提供服务,消除系统的单点故障。
目前GooseFS支持基于Raft日志和Zookeeper两种方式来实现主备节点状态的强一致性。在容器场景下,推荐基于Raft日志模式部署高可用架构。
9.2 Raft高可用配置示例
在顺序读场景下,可以参考如下推荐配置:
# Raft集群地址
goosefs.master.embedded.journal.addresses=<master1>:9202,<master2>:9202,<master3>:9202
# 元数据存储配置
goosefs.master.metastore=ROCKS
goosefs.master.metastore.block=HEAP
goosefs.master.metastore.inode.cache.max.size=10000000
goosefs.master.metastore.dir=/meta-1/metastore
# 根目录挂载路径
goosefs.master.mount.table.root.ufs=/meta-1/underFSStorage
# Raft日志存放路径
goosefs.master.journal.folder=/meta-1/journal
# 选举超时时间
goosefs.master.embedded.journal.election.timeout=20s
# 关闭启动时的Block完整性检查(大数据量场景强烈建议关闭)
goosefs.master.startup.block.integrity.check.enabled=false
# Checkpoint触发时机
goosefs.master.journal.checkpoint.period.entries=20000000
# Worker配置
goosefs.worker.tieredstore.levels=1
goosefs.worker.tieredstore.level0.alias=HDD
goosefs.worker.tieredstore.level0.dirs.quota=7TB,7TB
goosefs.worker.tieredstore.level0.dirs.path=/data-1,/data-2
# Worker重启超时时间
goosefs.worker.registry.get.timeout.ms=3600s
# 写策略
goosefs.user.block.write.location.policy.class=com.qcloud.cos.goosefs.client.block.policy.RoundRobinPolicy
10. 性能调优实践
GooseFS缓存集群提供的吞吐规模取决于集群和对象存储之间的吞吐情况,依赖于Cosn的性能。
10.1 Cosn配置调优
在大数据场景下,文件平均大小比较大时,推荐如下配置:
# Block大小,推荐128MB
fs.cosn.block.size=128MB
# 上传线程池,推荐设置为CPU核数的2-3倍
fs.cosn.upload_thread_pool=16
# 预读Block大小
fs.cosn.read.ahead.block.size=4MB
# 预读队列大小
fs.cosn.read.ahead.queue.size=8
10.2 Distributedload调优
distributedLoad的瓶颈点分析:
- GooseFS Client按照file粒度发起任务的并发
- GooseFS JobMaster组织并分发任务的速度
- GooseFS JobWorker执行任务的并发度
- GooseFS Worker线程执行读操作与写操作的并发度
- Cosn处理Read Request的速度
主要调优方向集中在JobWorker、Worker和Cosn模块:
JobWorker模块参数:
# 建立读写流时的client pool大小,过小会阻塞获取client
goosefs.user.block.worker.client.pool.max=2048
# 同时允许执行的task数目
goosefs.job.worker.max.active.task.num=100
# 处理task的线程数目
goosefs.job.worker.threadpool.size=50
Worker模块参数:
# Worker网络读缓冲区大小
goosefs.worker.network.reader.buffer.size=64KB
# Worker用于read的最大线程数目
goosefs.worker.network.block.reader.threads.max=64
11. 最佳实践与注意事项
11.1 部署建议
- 集群地域、可用区、VPC尽量与计算集群保持一致,避免跨VPC部署带来的网络延迟
- 推荐使用单层存储配置,避免多层存储下缓存淘汰带来的性能开销
- 生产环境建议使用高可用架构,基于Raft部署3个Master节点
11.2 缓存策略建议
- 根据数据访问模式选择合适的缓存淘汰策略(LRU或LRFU)
- 对于频繁访问的热数据,使用distributedLoad进行预热
- 合理配置Worker节点的缓存容量,充分利用计算节点的闲置本地盘资源
11.3 性能优化建议
- 根据业务负载调整Cosn的配置参数,特别是`fs.cosn.block.size`和`fs.cosn.upload_thread_pool`
- 大数据量场景下关闭`goosefs.master.startup.block.integrity.check.enabled`以加速启动
- 使用PageStore替代BlockStore以优化离散IO场景的缓存空间利用率
11.4 常见场景应用
GooseFS适用于海量数据分析、机器学习、人工智能、基因计算、自动驾驶等业务场景。在数据清洗和训练过程中,GooseFS通过将数据智能分布至内存、计算节点本地盘或全闪存缓存等不同层级中,提供亚毫秒级访问时延、百万级IOPS和Tbps级别吞吐量。
在某音乐大客户的实践中,GooseFS提升了PrestoSQL查询性能46%,减少了200Gbps的带宽峰值,同时通过预热和智能缓存策略优化了资源利用率,实现了降本增效。
12. 常见问题解答
问题1:GooseFS和直接使用COS相比,性能提升有多大?
相比直接读写COS上的数据,GooseFS能够为上层计算应用带来十倍以上的性能提升。这主要得益于GooseFS的分布式缓存架构和数据本地化能力。
问题2:GooseFS支持哪些底层存储系统?
GooseFS目前支持的底层存储系统包括COS、云HDFS、本地HDFS等。用户可以通过命名空间将不同的存储系统挂载到GooseFS中,实现统一访问。
问题3:如何实现GooseFS的高可用部署?
GooseFS支持基于Raft日志和Zookeeper两种方式实现高可用。推荐在容器场景下使用Raft模式,部署3个Master节点,通过Raft协议进行Leader选举和日志同步。
问题4:什么是PageStore?与BlockStore有什么区别?
PageStore是GooseFS-1.7.0及以上版本支持的新缓存特性。相较于传统的BlockStore缓存,PageStore可以极大地优化离散IO访问模型的缓存空间利用率以及冷读效率。PageStore以固定大小的Page为单位管理缓存,而BlockStore以Block为单位。
问题5:如何进行数据预热?
用户可以通过distributedLoad指令将远端存储中的数据提前加载到GooseFS缓存中。该指令支持指定副本数、并发任务数等参数,可以灵活控制预热过程。
问题6:GooseFS的读写策略有哪些?
GooseFS的读策略当前只支持CACHE。写策略支持CACHE_THROUGH和THROUGH两种模式。CACHE_THROUGH模式会将数据同时写入缓存和底层存储,THROUGH模式则只写入底层存储。




