
存储分布式文件系统对象存储云原生【免费下载链接】cubefscloud-native distributed storage项目地址https://gitcode.com/gh_mirrors/cu/cubefs点击查看免费下载导读本文以 CubeFS 纠删码存储子系统BlobStore中 Proxy 模块的配置文档为主体系统讲解其作为Clustermgr 减压阀的三大职责——消息转发、卷的分配与续租代理、卷/磁盘信息缓存完整覆盖关键配置项、全部配置项语义与可运行的示例配置并结合仓库源码blobstore/proxy/剖析各配置参数背后的实现机制与默认值帮助部署与调优人员快速落地一个生产可用的 Proxy 节点。Proxy 模块定位为 Clustermgr 分担压力的中间层在 CubeFS BlobStore 的架构中Proxy是位于 Access 与 Clustermgr 之间的代理模块主要承担三类职责消息转发将 Blob 删除消息、Shard 修复消息投递到 Kafka 对应主题驱动后台异步任务如垃圾回收、数据修复卷的分配与续租代理代替 Access 向 Clustermgr 批量申请卷Volume、批量续租卷避免每个读写请求都直接打向 Clustermgr缓存从 v3.3.0 版本开始支持对卷Volume和磁盘Disk信息的本地缓存进一步削减对 Clustermgr 的查询压力。从源码看Proxy 服务在启动时会向 Clustermgr 注册自身服务节点随后基于心跳维持服务发现关系见 blobstore/proxy/service.go。其模块入口位于 blobstore/cmd/proxy/main.go启动时通过config.Init(f, , proxy.conf)加载配置文件blobstore/proxy/service.go。配置总体结构公有配置 私有配置Proxy 的配置文件由两部分组成公有配置服务端口bind_addr、运行日志log、审计日志auditlog、鉴权auth等所有模块共有的配置项其完整字段说明见 基础服务配置原文档链接./base.md等价转换为仓库根目录相对路径私有配置本文重点讲解的 Proxy 独有配置项涵盖心跳、卷分配、续租、消息队列、缓存等。配置文件整体以 JSON 格式组织启动参数-f指定配置文件路径。关键配置项速查以下配置项是让 Proxy 正常工作的必填项来源于官方配置文档配置项说明必需公有配置如服务端口、运行日志以及审计日志等参考基础服务配置章节是host当前 host 信息用于上报 clustermgr 作服务发现使用例如http://服务ip:bind_port是cluster_id集群编号是idc所在机房编号是retain_interval_s续租间隔周期配合 cm 卷过期时间设定是init_volume_num初始启动向 clustermgr 申请卷的数量根据集群大小设定是default_alloc_vols_num每次向 clustermgr 申请卷的个数根据集群大小设定是mqkafka 生产者配置是diskv_base_path卷和磁盘信息缓存的持久化路径是其中host、cluster_id、idc三个字段会组成clustermgr.ServiceNode注册到 Clustermgr 作服务发现blobstore/proxy/service.go因此它们的取值必须与集群实际规划一致。全部配置项详解官方文档给出了带注释的完整配置骨架以下逐项展开说明并补充源码中的默认值与取值范围。{ heartbeat_interval_s: 向 Clustermgr 心跳的间隔周期心跳时间为 heartbeatTicks * tickInterval默认值 3 秒, heartbeat_ticks: 配合 heartbeat_interval_s 使用默认值 30, expires_ticks: 服务过期 ticks默认值 60, diskv_base_path: 缓存信息本地持久化路径, diskv_temp_dir: diskv 临时目录, volume_capacity: 内存卷信息容量默认为 1 M, volume_expiration_seconds: 内存卷信息过期时间默认为 0表示不过期, disk_capacity: 内存磁盘信息容量默认为 1 M, disk_expiration_seconds: 内存磁盘信息过期时间默认为 0表示不过期, volume_route_sync_interval_seconds: 卷路由同步间隔默认值 60 秒, clustermgr: { hosts: clustermgr 的主机列表[ http://ip:port,http://ip1:port], rpc: 参见 rpc LbClient 配置介绍 }, bid_alloc_nums: 每次 access 向 proxy 申请的最大 bid 个数, host: 当前 host 信息用于上报 clustermgr 作服务发现使用例如 http://服务ip:bind_port, cluster_id: 集群编号, idc: 所在机房编号, retain_interval_s: 续租间隔周期配合 cm 卷过期时间设定, init_volume_num: 初始启动向 clustermgr 申请卷的数量根据集群大小设定, default_alloc_vols_num: 每次向 clustermgr 申请卷的个数access 的分配请求可以触发, retain_volume_batch_num: 批量续租根据集群的大小设定每次向 clustermgr 续租的卷数量可缓解单次续租压力默认 400, retain_batch_interval_s: 批次续租的时间间隔, metric_report_interval_s: proxy 上报运行状态给普罗米修斯的时间周期, mq: { blob_delete_topic: 删除消息主题名, shard_repair_topic: 修复消息主题名, shard_repair_priority_topic: 高优修复的消息会投递至该主题一般是某个 bid 在多个 chunk 有缺失的情况, version: kafka 的版本号默认为 2.1.0, msg_sender: { kafka: 参见 kafka 生产者使用配置介绍 } } }心跳与注册相关heartbeat_interval_s、heartbeat_ticks、expires_ticks三个参数共同决定 Proxy 与 Clustermgr 之间的心跳与服务过期判定。源码中的默认值定义于 blobstore/proxy/service.goheartbeat_interval_s默认3秒heartbeat_ticks默认30配合前者的实际心跳周期 heartbeatTicks * tickIntervalexpires_ticks默认60超过该 ticks 数未收到心跳则 Clustermgr 判定服务过期。此外checkAndFix()中还会对clustermgr客户端超时与mq.msg_sender超时做下限兜底默认 1000ms未显式配置时会自动补齐blobstore/proxy/service.go。卷分配相关allocatorinit_volume_num、default_alloc_vols_num、retain_volume_batch_num、retain_batch_interval_s、retain_interval_s、metric_report_interval_s属于卷分配器allocator的配置对应源码中的VolConfig结构blobstore/proxy/allocator/volumemgr.go默认值定义于同一文件常量区blobstore/proxy/allocator/volumemgr.godefault_alloc_vols_num默认4指每次向 Clustermgr 申请卷的个数Access 的分配请求不足时会触发补充申请retain_interval_s默认40秒卷续租主循环周期retain_volume_batch_num默认400单次批量续租的卷数量用于摊薄 Clustermgr 的续租压力retain_batch_interval_s默认1秒批次续租之间的间隔metric_report_interval_s默认60秒向 Prometheus 上报运行状态的时间周期。需要注意init_volume_num在源码中的语义启动时每个纠删码模式codeMode会以default_alloc_vols_num为基准发起初始申请初始化申请到的卷中超过default_alloc_vols_num的部分会被放入备用backup卷池见allocVolumeLoop中isInit index DefaultAllocVolsNum的分支blobstore/proxy/allocator/volumemgr.go因此调大init_volume_num相当于预取更多备用卷以应对突发流量。卷分配器内部为每个 codeMode 维护 current/backup 双卷池并运行两个后台任务retainTask定期续租与清理满卷blobstore/proxy/allocator/retain_volume_task.go和metricReportTask。续租失败的卷会被立即废弃并从本地卷池剔除handleRetainResultblobstore/proxy/allocator/retain_volume_task.go。bid_alloc_nums对应BlobConfigblobstore/proxy/allocator/bidmgr.go控制 Proxy 每次向 Clustermgr 申请 bidBlob ID段的个数源码默认下限为10000defaultBidAllocNums配置值小于该值时会被自动抬升blobstore/proxy/allocator/bidmgr.go。BidMgr 同样采用 current/backup 双段机制保证 bid 段耗尽时仍能持续供号。缓存相关cacherv3.3.0diskv_base_path、diskv_temp_dir、volume_capacity、volume_expiration_seconds、disk_capacity、disk_expiration_seconds、volume_route_sync_interval_seconds对应缓存模块的ConfigCacheblobstore/proxy/cacher/cacher.go。缓存采用两级结构L1 内存 LRU L2 磁盘 diskv未命中时再回源 Clustermgr数据流示意见 blobstore/proxy/cacher/cacher.godiskv_base_path卷/磁盘缓存落盘的基路径必填diskv_temp_dir为其临时目录volume_capacity/disk_capacity内存缓存的容量上限默认1 201M 条目级别volume_expiration_seconds/disk_expiration_seconds内存缓存过期时间默认0表示不过期volume_route_sync_interval_s_seconds卷路由版本同步间隔源码默认20秒文档标注默认 60 秒实际以代码为准启动时若本地无卷路由版本号会先强制全量同步一次blobstore/proxy/cacher/cacher.go。为分散回源压力缓存过期时间还引入了随机扰动interleaveExpirationblobstore/proxy/cacher/cacher.go避免大量 key 同时过期导致对 Clustermgr 的瞬时冲击。消息队列mqmq段控制 Kafka 生产者配置对应MQConfig结构blobstore/proxy/service.goblob_delete_topic删除消息主题由BlobDeleteMgr消费驱动blobstore/proxy/mq/blob_delete.goshard_repair_topic普通修复消息主题由ShardRepairMgr消费驱动blobstore/proxy/mq/shard_repair.goshard_repair_priority_topic高优修复主题用于某个 bid 在多个 chunk 上同时缺失的紧急修复场景versionKafka 版本号默认2.1.0启动时会通过sarama.ParseKafkaVersion校验非法版本直接报错blobstore/proxy/service.gomsg_senderKafka 生产者配置如broker_list完整字段参考 Kafka 生产者使用配置介绍。checkAndFix还会校验三个主题名不能为空且彼此不能相同blobstore/proxy/service.go否则启动失败并返回ErrIllegalTopic。示例配置一个可直接运行的最小 Proxy仓库自带的示例配置见 blobstore/cmd/proxy/proxy.conf官方文档示例与其高度一致端口、topic、日志略有差异两者可对照参考。以下为文档中的完整示例{ bind_addr: :9600, host: http://127.0.0.1:9600, idc: z0, cluster_id: 1, default_alloc_vols_num : 2, init_volume_num: 4, diskv_base_path: ./run/cache, clustermgr: { hosts: [ http://127.0.0.1:9998, http://127.0.0.1:9999, http://127.0.0.1:10000 ] }, mq: { blob_delete_topic: blob_delete, shard_repair_topic: shard_repair, shard_repair_priority_topic: shard_repair_prior, version: 0.10.2.0, msg_sender: { broker_list: [127.0.0.1:9092] } }, log: { level: info, filename: ./run/logs/proxy.log } }对该示例的关键点说明bind_addr为监听地址host必须与其一致并带上协议前缀供 Clustermgr 服务发现clustermgr.hosts建议配置全部 Clustermgr 节点配合 rpc LbClient 实现负载均衡与故障转移idc、cluster_id需与 Clustermgr 侧规划保持一致version需与部署的 Kafka 实际版本匹配示例中为0.10.2.0若开启审计日志可参考 blobstore/cmd/proxy/proxy.conf 中的auditlog段追加auditlog: {logdir: ./run/auditlog/proxy}三个 Kafka 主题需要提前在 Kafka 集群中创建好否则消息投递会失败。启动方式与路由能力一览Proxy 以模块方式注册进 BlobStore 通用启动框架cmd.RegisterGracefulModuleblobstore/proxy/service.go通过-f参数指定配置文件启动./proxy -f proxy.conf启动后 Proxy 对外提供如下 HTTP 路由见NewHandlerblobstore/proxy/service.go可作为部署后的连通性自检依据方法路径作用POST/volume/alloc卷分配含 bid 分配GET/volume/list?code_mode列出当前 codeMode 的卷POST/volume/discard废弃失效卷POST/repairmsg发送修复消息到 KafkaPOST/deletemsg发送删除消息到 KafkaGET/cache/volume/{vid}读取卷缓存支持 flush/version 参数GET/cache/disk/{disk_id}读取磁盘缓存支持 flush 参数DELETE/cache/erase/{key}清除缓存key 为ALL时清空全部部署建议小结按集群规模调节卷池init_volume_num、default_alloc_vols_num决定初始与增量卷申请节奏小集群可沿用默认 4/2大集群适当调大以降低 Clustermgr 分配请求频率续租节奏与 Clustermgr 卷过期时间配合retain_interval_s必须小于 Clustermgr 侧的卷过期时间否则卷会在续租前被判定过期失效retain_volume_batch_num默认 400集群卷数量大时可适当调大并辅以retain_batch_interval_s错峰缓存参数按访问模式调优读多场景可调大volume_capacity/disk_capacity并延长volume_expiration_seconds/disk_expiration_secondsdiskv_base_path需落在持久化磁盘上Proxy 重启后可复用缓存消息主题务必预先创建blob_delete_topic、shard_repair_topic、shard_repair_priority_topic三个主题名不能为空、不能互相重复需与 Kafka 侧实际主题一致。以上配置项与默认值均有官方文档与仓库源码双重依据部署时建议以当前仓库版本blobstore/proxy/ 目录的实际实现为准进行核对。赞分享存储分布式文件系统对象存储云原生【免费下载链接】cubefscloud-native distributed storage项目地址https://gitcode.com/gh_mirrors/cu/cubefs点击查看免费下载相关推荐CubeFS BlobStore Access 模块配置详解接入网关的核心参数与实战调优CubeFS BlobStore Access 模块配置详解接入网关的核心参数与实战调优 导读 Access 是 CubeFS BlobStore纠删码存储存储分布式文件系统对象存储云原生Orchard Core Reverse Proxy 模块完全指南转发头配置、KnownProxies 安全策略与多租户实践Orchard Core Reverse Proxy 模块完全指南转发头配置、KnownProxies 安全策略与多租户实践 Orchard Core 的 OCMS后端Web框架Dagger TypeScript SDK 中 ContainerWithMountedCacheOpts 详解缓存卷挂载配置指南Dagger TypeScript SDK 中 ContainerWithMountedCacheOpts 详解缓存卷挂载配置指南 ContainerWithDevOpsCI/CD后端CLI云原生上一篇OpenShift(origin) × GlusterFS 分布式存储实战hostPath、glusterfs 插件、PV/PVC 与 Template 四种接入方式下一篇loadable-components与React Native集成移动端代码分割创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考