有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

简介

数据加速器 GooseFS 提供了多种部署方式,支持 自建部署,在 TKE 上部署 以及在 EMR 上部署 等。在大数据场景中,通常使用集群模式部署,并且采用高可用架构以满足业务连续性的要求,本文重点介绍基于 Zookeeper 和基于 Raft 的高可用部署配置。

高可用架构指多个 Master 节点的主备多活架构。多个 Master 节点中只有一个会作为主(Leader)节点对外提供服务,其他的备(Standby)节点通过同步共享日志(Journal)来保持与主节点相同的文件系统状态。当主节点故障宕机后,会从当前的备节点中自动选择一个接替主节点继续对外提供服务,这样就消除了系统的单点故障,实现了整体高可用架构。目前 GooseFS 支持基于 Raft 日志和 Zookeeper 两种方式来实现主备节点状态的强一致性。

基于 Zookeeper 的高可用架构部署配置

配置 Zookeeper 服务搭建 GooseFS 的高可用架构需要满足如下条件:
已建立 Zookeeper 集群。GooseFS Master 使用 Zookeeper 进行 Leader 选取,GooseFS 的客户端和 Worker 节点则通过 Zookeeper 查询主 Master 节点。
已准备好高可用强一致的共享存储系统,并且保证所有 GooseFS 的 Master 节点均可以访问到。主 Master 节点会将日志写入到该存储系统上,备(Standby)节点则会不断地从共享存储系统上读取日志,并且重放来保持与主节点的状态一致性。一般情况,该共享存储系统,推荐设置为 HDFS 或 COS。例如,hdfs://10.0.0.1:9000/goosefs/journal 或 cosn://bucket-1250000000/journal。

当您已经完成前置条件后,您可以参考如下推荐配置,并将该配置项复制粘贴到 goosefs-site.properties 文件中,完成您的高可用架构配置:
# GooseFS Master HA 部署配置
goosefs.zookeeper.enabled=true
goosefs.zookeeper.address=<zk_quorum_1>:<zk_client_port>,<zk_quorum_2>:<zk_client_port>,<zk_quorum_3>:<zk_client_port>
goosefs.underfs.hdfs.configuration=${HADOOOP_HOME}/etc/hadoop/core-site.xml:${HADOOP_HOME}/hadoop/etc/hadoop/hdfs-site.xml
goosefs.master.journal.type=UFS
goosefs.master.journal.folder=hdfs://HDFSXXXX/goosefs

# Master 元数据存储方式,推荐使用 Heap + RocksDB 方式,可以支撑上亿规模的元数据
goosefs.master.metastore=ROCKS
goosefs.master.metastore.block=ROCKS
goosefs.master.metastore.block.locations=ROCKS
# GooseFS 的元数据存储目录建议选择高 IOPS 存储介质的目录
goosefs.master.metastore.dir=/data/goosefs/metastore
#元数据交换方式,默认是 RANDOM,如果有明显最近热数据访问的,可设置为考虑 LRU;
# goosefs.master.metastore.cache.type=LRU
# 关闭启动时候校验孤儿 block 的流程,可以降低选主时间
goosefs.master.startup.block.integrity.check.enabled=false
# 同时可以根据实际情况关闭周期性地校验孤儿 block 的逻辑
# goosefs.master.periodic.block.integrity.check.interval=-1
# 如果不使用 TTL 功能,也可以考虑关闭周期性的文件过期检查
goosefs.master.ttl.checker.interval.ms=-1
# 可以考虑关闭数据副本检查,减小 Master 的开销
goosefs.master.replication.check.interval=-1

# Worker 相关的配置
goosefs.worker.tieredstore.levels=1
goosefs.worker.tieredstore.level0.alias=SSD
goosefs.worker.tieredstore.level0.dirs.path=/data1/goosefsWorker,/data2/goosefsWorker
# 以下 Quota 值根据实际情况设置
# goosefs.worker.tieredstore.level0.dirs.quota=2000G,2000G
goosefs.worker.block.heartbeat.interval.ms=10sec
goosefs.worker.tieredstore.free.ahead.bytes=134217728
goosefs.user.block.worker.client.pool.max=512

# 安全认证和用户模拟相关
goosefs.security.authorization.permission.enabled=true
goosefs.security.authentication.type=SIMPLE
# goosefs.security.login.username=hadoop
# goosefs.master.security.impersonation.hadoop.users=*
# goosefs.security.login.impersonation.username=_HDFS_USER_

# Client 相关的配置
goosefs.user.client.transparent_acceleration.scope=GFS_UFS
goosefs.user.client.transparent_acceleration.enabled=true
goosefs.user.file.readtype.default=CACHE
goosefs.user.file.writetype.default=CACHE_THROUGH

goosefs.user.metrics.collection.enabled=true

基于 Raft 的高可用架构部署配置

基于 Raft 嵌入式日志的部署方案依赖于 copycat 的 Leader 选举机制。因此,Raft 的高可用部署架构不可与 Zookeeper 相互混用。如果您计划基于 Raft 嵌入式日志搭建高可用架构,您可以参考如下推荐配置,并将该配置项复制粘贴到 goosefs-site.properties 文件中,完成您的高可用架构配置:
# GooseFS Master Raft 部署配置
goosefs.master.rpc.addresses=<master1>:9200,<master2>:9200,<master3>:9200
goosefs.master.embedded.journal.addresses=<master1>:9202,<master2>:9202,<master3>:9202
#元数据 checkpoint 间隔,默认为2000000,实际速率可根据实际生产环境元数据生产速度设置
goosefs.master.journal.checkpoint.period.entries=xxxx
# GooseFS 的 Journal 数据存储位置
goosefs.master.journal.folder=/data/goosefs/journal

# Master 元数据存储方式,推荐使用 Heap + RocksDB 方式,可以支撑上亿规模的元数据
goosefs.master.metastore=ROCKS
goosefs.master.metastore.block=ROCKS
goosefs.master.metastore.block.locations=ROCKS
# GooseFS 的元数据存储目录建议选择高 IOPS 存储介质的目录
goosefs.master.metastore.dir=/data/goosefs/metastore
#元数据交换方式,默认是 RANDOM,如果有明显最近热数据访问的,可设置为考虑 LRU;
# goosefs.master.metastore.cache.type=LRU
# 关闭启动时候校验孤儿 block 的流程,可以降低选主时间
goosefs.master.startup.block.integrity.check.enabled=false
# 同时可以根据实际情况关闭周期性地校验孤儿 block 的逻辑
# goosefs.master.periodic.block.integrity.check.interval=-1
# 如果不使用 TTL 功能,也可以考虑关闭周期性的文件过期检查
goosefs.master.ttl.checker.interval.ms=-1
# 可以考虑关闭数据副本检查,减小 Master 的开销
goosefs.master.replication.check.interval=-1

# Worker 相关的配置
goosefs.worker.tieredstore.levels=1
goosefs.worker.tieredstore.level0.alias=SSD
goosefs.worker.tieredstore.level0.dirs.path=/data1/goosefsWorker,/data2/goosefsWorker
# 以下 Quota 值根据实际情况设置
# goosefs.worker.tieredstore.level0.dirs.quota=2000G,2000G
goosefs.worker.block.heartbeat.interval.ms=10sec
goosefs.worker.tieredstore.free.ahead.bytes=134217728
goosefs.user.block.worker.client.pool.max=512

# 安全认证和用户模拟相关
goosefs.security.authorization.permission.enabled=true
goosefs.security.authentication.type=SIMPLE
# goosefs.security.login.username=hadoop
# goosefs.master.security.impersonation.hadoop.users=*
# goosefs.security.login.impersonation.username=_HDFS_USER_

# Client 相关的配置
goosefs.user.client.transparent_acceleration.scope=GFS_UFS
goosefs.user.client.transparent_acceleration.enabled=true
goosefs.user.file.readtype.default=CACHE
goosefs.user.file.writetype.default=CACHE_THROUGH
goosefs.user.metrics.collection.enabled=true