ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Mooncake Store 的 OSS 对象存储卸载(Offload)部署指南:架构、配置与故障排查

Mooncake Store 的 OSS 对象存储卸载(Offload)部署指南:架构、配置与故障排查 人工智能大模型模型推理服务后端【免费下载链接】MooncakeMooncake is the serving platform for Kimi, a leading LLM service provided by Moonshot AI.项目地址https://gitcode.com/gh_mirrors/mo/Mooncake点击查看免费下载导读本文介绍 Mooncake 项目中如何通过FileStorage既有卸载路径将对象数据以 key-based 形式卸载Offload到 OSS/S3 等对象存储服务。你将掌握 OSS 卸载的部署拓扑、完整环境变量配置表、master 与 real client 的启动方式以及初始化失败、鉴权报错、副本不可读等常见故障的排查思路。文中同时结合 oss_adapter_config.cpp 等源码实现说明每个配置项的解析逻辑与取值边界帮助你在真实集群中正确落地。概览OSS 卸载是什么对象存储服务如阿里云 OSS、AWS S3提供基于 key 的存储语义。Mooncake Store 通过ObjectStorageAdapter在现有FileStorage卸载路径中接入对象存储与本地 SSD、NVMe KV 后端一致master 记录 real client 所拥有的LOCAL_DISK副本读取方仍然通过该 owner 访问数据负载。对象存储在这里不是一种独立的一等副本类型而是LOCAL_DISK副本背后的一种存储载体。需要特别强调的是本文示例使用的是 OSS 适配器。其他对象存储服务需要与之兼容的适配器实现仅更换 endpoint 并不能获得 S3 支持——OSS 适配器的签名协议是 OSS 特有的S3 必须使用专门的适配器。更底层的设计细节读写路径、物理 key 映射、批量执行与失败语义可参考 OSS Backend Design。前置条件在部署 OSS 卸载之前需要准备一个已存在的 OSS bucket且其 endpoint 可以从每个卸载 owner 所在节点访问。不需要挂载 OSS 文件系统。在所选命名空间内具备 PUT、GET、HEAD、LIST、DELETE 权限的凭证支持 STS 临时凭证。每个卸载 owner 使用独立的对象 key 前缀。一个已存在的、绝对路径、可写、非符号链接的目录用于MOONCAKE_OFFLOAD_FILE_STORAGE_PATH——这是通用FileStorage初始化所必需的。需要说明该目录不会为 OSS 启用本地 SSD 缓存。libcurl 与 OpenSSL 的开发库及头文件。构建支持当环境中存在 libcurl 与 OpenSSL 时构建会自动启用 OSS 适配器无需 OSS SDK也不需要额外的 OSS 专用构建开关。构建与安装 Mooncake 的完整步骤请参考 构建指南。批量 I/O 使用curl_multi_wait因此不要求libcurl 7.66.0 以上版本。上传缓冲区调优是可选能力当 libcurl 头文件版本早于 7.62.0 时将使用库默认值见下文配置章节。部署拓扑拓扑中只有一个关键结论值得记住只有卸载 owner 需要 OSS 凭证。master 与请求方客户端都不会直接读写 OSS 对象——读取方通过 owner 上的batch_get_offload_objectRPC 与 Transfer Engine 获取数据。从源码看请求链路是请求方客户端查询 master 获得LOCAL_DISKowner 与对象大小 → 向 owner 发起batch_get_offload_object→ owner 的FileStorage调用BatchLoad填充 staging buffer → OSS 适配器并发执行GetBatch→ 字节经 Transfer Engine 传回请求方。该 RPC 协程把阻塞工作投递到既有 blocking poolworker 等待 HTTP 批量完成后返回不引入专用 OSS worker 池见 oss-backend.md 的 Read Path 章节。配置在每个卸载 owner 的环境中设置后端与 OSS 相关变量export MOONCAKE_OFFLOAD_STORAGE_BACKEND_DESCRIPTORdistributed_storage_backend export MOONCAKE_OFFLOAD_FILE_STORAGE_PATH/data/file_storage export MOONCAKE_DISTRIBUTED_FS_TYPEoss export MOONCAKE_DISTRIBUTED_ROOT_DIR/mooncake/my-cluster/owner-1 export MOONCAKE_OSS_ENDPOINThttps://oss-cn-hangzhou.aliyuncs.com export MOONCAKE_OSS_BUCKETmy-mooncake-bucket export MOONCAKE_OSS_REGIONcn-hangzhou # MOONCAKE_OSS_ACCESS_KEY_ID 与 MOONCAKE_OSS_ACCESS_KEY_SECRET # 请通过你的凭证管理机制提供不要写死在脚本中。请将示例中的 endpoint、bucket、region 与 owner 前缀替换为你自己的部署值。注意每个FileStorage实例只选择一个后端OSS 不会与本地文件或 NVMe KV 后端在同一实例内并存。后端与命名空间环境变量OSS 取值说明MOONCAKE_OFFLOAD_STORAGE_BACKEND_DESCRIPTORdistributed_storage_backend选择承载 OSS 适配器的后端。MOONCAKE_OFFLOAD_FILE_STORAGE_PATH默认/data/file_storage通用初始化所需的本地目录对象负载实际写入 OSS。MOONCAKE_DISTRIBUTED_FS_TYPEoss选择对象存储模式而非文件系统适配器。MOONCAKE_DISTRIBUTED_ROOT_DIRowner 专属前缀使用绝对风格路径适配器会去除首尾斜杠。这不是挂载点。OSS 卸载不需要Master 侧的 DFS 配置也不需要禁用单独配置的 DFS tier。但在卸载 owner 环境中MOONCAKE_DFS_FS_ADAPTER与MOONCAKE_DFS_ROOT_DIR会覆盖对应的MOONCAKE_DISTRIBUTED_*值两者共享同一配置解析器因此使用上述示例时请保持这些 override 不设置。Endpoint 与凭证环境变量默认值说明MOONCAKE_OSS_ENDPOINT必填包含http://或https://的 endpoint。别名OSS_ENDPOINT。MOONCAKE_OSS_BUCKET必填已存在的 bucket。别名OSS_BUCKET。MOONCAKE_OSS_REGION必填OSS 签名区域。别名OSS_REGION。MOONCAKE_OSS_ACCESS_KEY_ID非匿名时必填AccessKey ID。别名OSS_ACCESS_KEY_ID。MOONCAKE_OSS_ACCESS_KEY_SECRET非匿名时必填AccessKey Secret。别名OSS_ACCESS_KEY_SECRET。MOONCAKE_OSS_SECURITY_TOKEN空可选的 STS token。别名OSS_SESSION_TOKEN。MOONCAKE_OSS_PATH_STYLEfalse使用endpoint/bucket/key路径寻址而非虚拟主机风格 bucket 寻址。MOONCAKE_OSS_ANONYMOUSfalse禁用签名仅用于测试 endpoint 或配置了公共访问的场景。关于配置解析源码 oss_adapter_config.cpp 给出了几个值得注意的实现事实主名优先于别名ReadPrimaryOrAlias的逻辑是主变量存在即使显式为空字符串就使用主变量值否则回退到别名。对应的 oss_adapter_config_test.cpp 中EmptyPrimaryOverridesCompatibilityAlias用例验证了显式空主名会覆盖别名这一行为。配置在初始化时读取修改环境变量不会重新配置已运行的适配器也不会刷新其凭证测试InitReadsCurrentEnvironmentEachTime表明每次Init()都重新读取当前环境但运行期不会热更新。字符串归一化endpoint 会去除尾部/while (!config.endpoint.empty() config.endpoint.back() /)security token 会trim空白字符。必填校验顺序endpoint/bucket/region 三者缺失最先报错非匿名模式下 access key 缺失返回INVALID_PARAMS。无效布尔值如MOONCAKE_OSS_PATH_STYLEinvalid会在告警后按默认值false处理见测试InvalidBoolValuesWarnAndUseFalse。后端并发与健康检查环境变量默认值说明MOONCAKE_OSS_MAX_CONNECTIONS64每个批次内最大准入请求数与每 host 连接总数上限最小值为1。不是进程级限制。MOONCAKE_OSS_RECEIVE_BUFFER_SIZE10485761 MiB批量请求的 libcurl 接收缓冲区建议值钳制在 16 KiB–10 MiB单请求 GET 保持库默认。MOONCAKE_OSS_UPLOAD_BUFFER_SIZE10485761 MiBPutV/PutBatch的上传缓冲区建议值钳制在 16 KiB–2 MiB仅在 libcurl 头文件 ≥ 7.62.0 时生效否则用库默认。MOONCAKE_DISTRIBUTED_HEALTH_CHECKfalse初始化时写入并回读一个探针对象随后尽力删除。数值调优参数使用十进制整数。无效或越界整数回退到默认值然后再应用上述钳制边界——这一点在测试TuningValuesKeepExistingBounds中得到验证max_connections下限为 1、receive_buffer_size上限 10 MiB、upload_buffer_size上限 2 MiB且越界/非法输入会打印 using default ... 告警后回落。缓冲区大小只是 libcurl 的建议值不是 TCP socket 缓冲区大小也不保证吞吐。通用卸载心跳默认 10 秒通过MOONCAKE_OFFLOAD_HEARTBEAT_INTERVAL_SECONDS配置。其他通用客户端设置见 SSD Offload。启动 Mooncake以启用卸载的方式启动 mastermooncake_master --rpc_port50051 --enable_offloadtrue应用上述后端配置后创建必需的本地目录并启动一个 real client。以下示例使用本地 master 与 TCP 传输mkdir -p /data/file_storage export MOONCAKE_MASTER127.0.0.1:50051 export MOONCAKE_LOCAL_HOSTNAME127.0.0.1 export MOONCAKE_PROTOCOLtcp export MOONCAKE_TE_META_DATA_SERVERP2PHANDSHAKE export MOONCAKE_OFFLOAD_ENABLEDtrue python -m mooncake.mooncake_store_service多节点部署请使用可路由地址。该 launcher 示例假设MOONCAKE_CONFIG_PATH未设置否则服务配置文件优先。嵌入式 real-client 模式使用相同的后端与 OSS 变量在调用MooncakeDistributedStore.setup()时传入enable_ssd_offloadTrue与ssd_offload_path同时保留常规的连接与内存参数。嵌入式与独立 real-client 两种部署模式的区别详见 SSD Offload guide。源码视角批量执行与失败语义从 oss_adapter.h 与设计文档可以提炼出 OSS 适配器的运行时行为这对排障很有帮助物理 key 映射physical_key owner_prefix / URIEncode(storage_key)对象体为拼接的 payload 分片前缀为空时省略分隔符。LIST 会把匹配的对象 key 解码回逻辑存储 key供ScanMeta注册元数据。没有分片/偏移分配、没有对象级 UUID 描述符、没有根 manifest、也没有适配器级校验和信封。批量执行每次GetBatch/PutBatch创建一个临时CURLM和每个请求一个 easy handle同时准入最多MOONCAKE_OSS_MAX_CONNECTIONS个请求随完成逐批准入。等待准入的请求留在CURLM之外避免在 libcurl 连接队列中消耗传输超时。连接在批次内复用、跨批次不复用不同调用线程可并发执行独立批次限制按批次生效。完成顺序可能与输入顺序不同但返回的结果向量保持输入顺序与数量。并发与所有权适配器 API 是同步的返回前完成批量处理与清理每个批次独占自己的请求上下文与 libcurl 句柄无共享CURLM或全局锁。下载缓冲区、上传 iovec 数组与上传负载必须存活到调用返回使用中不得修改。失败的读可能已部分改写目标缓冲区不得将其当作有效数据消费。失败语义摘自 oss-backend.md 的 Failure Semantics 表GET 遇到缺失对象返回FILE_NOT_FOUND范围 GET 需要 HTTP 206 与请求长度PUT 非成功状态码视为写失败不会把该对象报告为成功卸载超时的 PUT 无法证明 OSS 是否已存储数据一个对象失败时保留逐对象结果成功的上传不会自动删除——批量不是事务。故障排查适配器无法初始化依次检查构建依赖libcurl、OpenSSL 开发库与头文件、必填的 endpoint/region/凭证设置、本地目录是否存在且可写、是否存在残留的MOONCAKE_DFS_*override它们会覆盖MOONCAKE_DISTRIBUTED_*配置。可选的健康检查会实际访问 OSS但它只验证 OSS 访问通路不覆盖完整的 Store 读路径。请求报鉴权或权限错误核对 endpoint、签名 region、bucket 权限以及 STS token 的有效期。适配器不会自动刷新凭证——token 过期后需要重启或重新初始化加载新凭证。对象已在 OSS 中但无法通过 Store 读取bucket 里有一个对象不等于可读的 Store 副本。master 必须拥有该 key 的元数据且存在可达的 owner。务必保持前缀 owner 专属共享同一个 bucket 并不会让不同 owner 变得可互换owner 前缀防止互相覆盖对象。SSD 容量指标与 OSS 实际用量不一致MOONCAKE_OFFLOAD_TOTAL_SIZE_LIMIT_BYTES提供的是一个配置的容量值默认 2 TiB而非查询 OSS bucket 得到的容量。master 的用量统计追踪的是已注册的LOCAL_DISK副本。这里 OSS 没有后端配额强制也没有自动对象 GC——删除 master 元数据不会触发 OSS DELETE因此这些指标既不是物理 bucket 用量也不是云成本限额。当前实现同样不支持multipart 上传、自动并行范围切分与自动凭证刷新见 oss-backend.md 的 Current Limitations。赞分享人工智能大模型模型推理服务后端【免费下载链接】MooncakeMooncake is the serving platform for Kimi, a leading LLM service provided by Moonshot AI.项目地址https://gitcode.com/gh_mirrors/mo/Mooncake点击查看免费下载相关推荐Mooncake Store OSS 对象存储后端深度解析LOCAL_DISK 卸载路径、OSS V4 签名与 libcurl 并发批次实现Mooncake Store OSS 对象存储后端深度解析LOCAL_DISK 卸载路径、OSS V4 签名与 libcurl 并发批次实现 导读 本篇文章以人工智能大模型模型推理服务后端Mooncake Store SSD 存储部署指南本地 SSD Offload、NVMe KV 后端与 NVMe-oF 共享存储池Mooncake Store SSD 存储部署指南本地 SSD Offload、NVMe KV 后端与 NVMe oF 共享存储池 本文以 Mooncake人工智能大模型模型推理服务后端Thanos Store Gateway 组件完全指南对象存储上的 Store API 网关架构、配置与调优Thanos Store Gateway 组件完全指南对象存储上的 Store API 网关架构、配置与调优 Thanos Store Gateway即 t可观测性云原生时序数据库运维上一篇3步搞定京东抢购自动化告别手速焦虑的终极方案下一篇Orleans Journaling 的 Redis 存储提供程序从配置到原理的完整实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表