ARTICLE DETAIL

资讯详情

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

Ceph Kraken(v11.x)发布详解:BlueStore 新后端、AsyncMessenger 与 Jewel 升级路径

Ceph Kraken(v11.x)发布详解:BlueStore 新后端、AsyncMessenger 与 Jewel 升级路径 存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载本文以 Ceph 官方发布说明 doc/releases/kraken.rst 为主体结合当前仓库源码系统梳理 Kraken 系列v11.0.2 / v11.2.0 / v11.2.1的核心技术变更全新 BlueStore 存储后端、默认启用的 AsyncMessenger、新引入的 ceph-mgr 守护进程、EC 池覆盖写等实验特性并给出从 Jewel 升级到 Kraken 的完整前置条件、操作顺序与新配置项速查表帮助运维与开发人员安全评估、部署和升级该版本。Kraken 是 Ceph 的第 11 个稳定版本系列代号源自北欧传说中形似头足纲生物的传奇海怪。本文覆盖该系列的三个版本作为开发检查点发布的 v11.0.2、作为首个稳定版的 v11.2.0以及作为系列收尾补丁版的 v11.2.1。阅读本文后你将掌握 Kraken 相比 Jewel 的架构级变化、BlueStore 的启用与创建方法、升级前的 CRUSH/标志位检查以及一批影响运维行为的新配置参数。Kraken 系列版本总览Kraken 系列共包含三个公开发布版本各自定位如下版本定位核心内容v11.0.2开发检查点development checkpoint首次引入 ceph-mgr 守护进程BlueStore 大量改进RGW 引入 sync modules、multipart copy-part 与基于 ElasticSearch 的元数据检索技术预览v11.2.0首个稳定版stable稳定磁盘格式的 BlueStoreEC 覆盖写实验支持默认 AsyncMessengerOSD 故障快速检测ceph-mgr 基础架构落地v11.2.1系列补丁版bugfixKraken 系列最后一个版本跨所有组件的大规模缺陷修复Luminous 稳定后 Kraken 即宣告 EOLv11.2.0 稳定版会持续通过缺陷修复与 backport 得到维护直到下一个稳定版 Luminousv12.2.z在 2017 年春季发布。v11.2.1 是 Kraken 的第一个补丁版官方建议所有 v11.2.x 用户升级完整逐条变更记录见 doc/changelog/v11.2.1.txt仓库内保留的完整变更日志。v11.2.1 关键行为变化与安全操作误定向操作misdirected op默认不再返回 ENXIO在早期版本中若客户端把操作发送到了错误的 OSDOSD 会直接回复ENXIO设备不存在理由是“客户端或 OSD 显然存在 bug应该把错误尽可能明显地暴露出来”。但这一行为对上层应用不友好使用 librbd 的虚拟机原本只会收到EIO并转为只读现在则会看到 IO 阻塞/挂起。v11.2.1 起只有显式开启osd_enxio_on_misdirected_op配置项默认关闭时才回复ENXIO。从当前仓库源码可以印证 OSD 对误定向操作的统一处理路径位于 OSDService::handle_misdirected_op该函数先做各类断言与 EC PG 场景下的目标重算EC 场景下 PG 分裂可能导致误判此时直接丢弃、由客户端重发最终通过clog-warn()记录一条“misdirected op”告警日志而非直接返回错误。PrimaryLogPG在 PrimaryLogPG.cc 中识别误定向场景并回调到该处理函数。删除 OSD 前必须先将其从 CRUSH map 移除Jewel 引入的缺陷tracker #19119破坏了如下场景的映射行为一个仍存在于 CRUSH map 中的outOSD 被osd rm直接删除时可能引发“misdirected op”等错误。v11.2.1 修复了该缺陷但修复本身引入了同类风险——因为客户端与 OSD 的行为可能不一致。因此官方要求删除 OSD 时必须严格按以下顺序执行ceph osd crush rm osd.123 ceph osd rm osd.123即先crush rm将其从 CRUSH map 中移除再osd rm删除。快照裁剪snap trimmer的并发控制v11.2.1 显著改善了对快照裁剪任务的控制与节流osd max trimming pgs默认 2限制单个 OSD 上同时处于快照裁剪状态的 PG 数量。当前仓库中该配置项由 OSD.cc 动态接管变更时调用service.snap_reserver.set_max(...)调整快照预留资源支持在线调整而无需重启 OSD。osd snap trim sleep默认 0恢复该选项的安全使用非零时在每次向底层系统派发裁剪操作之间插入指定秒数的延迟。实现位于 OSD::get_osd_snap_trim_sleep并根据磁盘介质类型细分出osd_snap_trim_sleep_hdd、osd_snap_trim_sleep_ssd、osd_snap_trim_sleep_hybrid三个变体。v11.2.0 自 Jewel 以来的重大变更RADOS 层BlueStore 新后端磁盘格式已稳定并通过故障与压力测试但仍标记为实验性官方鼓励在非生产集群和非关键数据集上试用详见下文 BlueStore 专题。EC 池覆盖写实验性RADOS 对纠删码池的实验性覆盖写支持。由于磁盘格式与实现尚未定稿必须通过特殊池选项显式开启一旦开启该集群将被永久禁止升级到未来版本务必在测试集群上评估。默认启用 AsyncMessengerms type async替代传统 SimpleMessenger。最显著的区别是网络连接改用固定大小线程池而不是 SimpleMessenger 的“每 socket 两个线程”。OSD 故障快速检测部分 OSD 故障现在几乎可以立即被感知不再需要等待默认 20 秒的心跳超时heartbeat timeout到期。这避免了“主机仍在、ceph-osd 进程已退出”场景下 IO 长时间阻塞。新 ceph-mgr 守护进程默认与 monitor 共置基础设施已就位当前仓库的守护进程实现见 src/mgr可对接外部监控/管理系统。OSDMap 编码体积缩小OSD 在恢复或再平衡期间会暂停发起新的 scrub详见下文升级注意事项。RGW 层新增用于 ElasticSearch 元数据索引的新 zone 类型sync modules。支持 S3 multipart 对象的 copy-part API。支持对已有 bucket 进行 reshard注意reshard 期间要求该 bucket 的所有 IO尤其是写保持静默。支持对象级数据压缩。Civetweb 升级到 1.8。支持 Swift 静态网站 APIS3 静态网站支持此前已加入。新增 S3 bucket lifecycle API当前仅支持对象过期。LDAP 认证实现支持自定义搜索过滤器。RGW NFS 网关支持 NFSv3并创建了 librgw 的 Python 绑定。RBD 层RBD 镜像可存储在使用新实验性覆盖写支持的 EC RADOS 池中。镜像必须用新的 rbd CLI 选项--data-pool ec pool创建以指定存放数据对象的 EC 池直接在一个 EC 池上创建镜像不会成功因为镜像的底层元数据仅支持副本池rbd create --data-pool ec_pool image_name --size sizerbd-mirror 守护进程现在支持将动态镜像 feature 更新与镜像 metadata 键值对从主镜像复制到非主镜像。镜像快照数量可配置上限限制。rbd Python API 支持异步 IO 操作。CephFS 层libcephfs 函数定义变更以支持正确的 uid/gid 控制库版本号相应提升。standby replay MDS 在执行删除类工作负载时内存占用更低。Scrub 现在可修复 backtrace并将发现的问题填充到damage ls。cephfs-data-scan新增pg_files子命令可识别受损坏或丢失 RADOS PG 影响的文件。修复了“failing to respond to cache pressure”误报告警。BlueStore 专题直接管理裸设备的新存储后端BlueStore 是 Kraken 最受关注的新特性。与依赖 XFS 文件系统把对象存为文件的 FileStore 不同BlueStore 直接管理底层块设备实现了专为 Ceph OSD 工作负载设计的类文件系统磁盘结构。当前仓库中其实现位于 src/os/bluestore核心为BlueStore.cc配套 BlueFS 用于管理 RocksDB 元数据与 WAL。关键特性全量数据校验和写入磁盘的所有数据带校验和所有读取默认进行校验和验证。内联压缩可通过池属性按池启用或通过客户端 hint 按对象启用。高效日志journal与 FileStore 将所有数据写入日志设备不同BlueStore 只记录元数据以及某些场景下的小写入因此日志的体积与吞吐要求大幅降低。日志可与数据共置在同一设备也可放到更小的高性能设备如 SSD/NVMeBlueStore 日志默认仅 512 MB。BlueStore 磁盘格式预期会继续演进但 OSD 会在升级时提供迁移到新格式的支持。注意BlueStore 在 Kraken 中仍标记为“experimental”。官方建议用于概念验证与测试环境或可容忍数据丢失的场景。虽然在测试环境中表现稳定但代码较新、缺陷不可避免社区希望通过 Kraken 部署的反馈在下一个大版本 Luminous 中将其标记为稳定并设为默认。启用 BlueStore 需在 ceph.conf 中加入enable experimental unrecoverable data corrupting features bluestore创建 BlueStore OSD 时向 ceph-disk 或 ceph-deploy 传入--bluestore选项即可。从 Jewel 升级到 Kraken 的完整指南从 11.1.0 候选版升级BlueStore 在 11.1.0 之后发生了磁盘格式变更任何用 11.1.0 创建的 BlueStore OSD 都必须销毁并重建。从 Jewel 10.2.z 升级升级前置条件与顺序如下必须先升级到 Jewel 10.2.z所有集群必须先升级到 Jewel 10.2.z才能升级到 Kraken 11.2.z或之后的 Luminous 12.2.z。必须设置sortbitwise标志升级到 Kraken 前Jewel 集群必须已设置该标志。最新的 Jewel10.2.8在未设置时会发出健康告警因此通常已设置若未设置Kraken OSD 将拒绝启动并在日志中打印错误。升级顺序OSD、Monitor、MDS 可按任意顺序升级RGW 守护进程应最后升级。ceph-mgr 自动创建升级时新的 ceph-mgr 实例会自动与各 monitor 一同创建Jewel→Kraken 与 Jewel→Luminous 均如此Luminous 之后的升级则不一定。若不想让 ceph-mgr 与 ceph-mon 共置可自行创建新的 ceph-mgr 实例并销毁自动创建的实例。升级注意事项与新配置选项速查以下为升级到 Kraken 后需要注意的行为变化与新增配置项均来自原发布说明并可在 src/common/options/global.yaml.in 中核对部分参数定义配置项 / 命令默认值说明osd scrub during recoveryfalseOSD 在恢复进行期间不再启动新的 scrub如需恢复旧行为不让恢复活动影响 scrub 调度设为truemon_dns_srv_nameceph-mon构建 monmap 的 monitor 主机/地址列表可通过 DNS SRV 记录获取本项定义查询 DNS 时使用的服务名osd class load list全部内置类允许 OSD 加载的对象类名列表*表示所有类默认包含全部现有内置类以保持向后兼容osd class default list全部内置类客户端仅凭*、x、class-read、class-write能力即可调用的类名列表不在列表中的类需要具名能力如allow class foorgw rest getusage op compatfalse控制 S3 GetUsage API 是否输出用户统计的描述性 JSON。true时输出stats: { TotalBytes: 516, TotalBytesRounded: 1024, TotalEntries: 1 }false时保持旧式数组[ 516, 1024, 1 ]osd out .../osd in ...—现在会保留 OSD 权重将 OSD 标记 out 再 in 后权重与之前相同此前显式操作会被重置为 1.0只有 mon 自动标记时才保留ceph osd perf—列名由fs_commit_latency(ms)/fs_apply_latency(ms)改为commit_latency(ms)/apply_latency(ms)因这些指标并非 filestore 专属mon_allow_pool_deletefalseMonitor 默认不再允许删除池需显式设为true才允许删除作为防误删的额外保护。当前仓库中该选项定义于 global.yaml.in类型 bool、服务为 monmon keyvaluedb rocksdb—若此前手工指定了该选项需在 mon 数据目录手工添加kv_backend文件以保留设置echo rocksdb /var/lib/ceph/mon/ceph-hostname/kv_backend。新 monitor 默认使用 rocksdb但若该文件不存在既有 monitor 将使用 leveldbmon keyvaluedb现在只影响创建时的后端选择osd crush initial weight-1负值为新 OSD 指定 CRUSH 权重。此前 0默认表示按 OSD 存储容量自动加权现在 0 表示权重为 0负值新默认表示按容量自动加权。若配置文件中显式写了 0需改为负值如 -1以保持原行为osd crush location已废弃不再支持请改用crush location配置项osd_max_omap_entries_per_request131072Kraken 时librados omap get_keys/get_vals 服务端单次响应键数上限osd_max_omap_bytes_per_request4 MBKraken 时omap 单次响应总字节数上限防止粗心用户单次请求过量数据当前仓库默认值已演进见 global.yaml.in恢复优先级计算—已更新升级过程中可能出现不符合直觉的恢复优先级排序新旧 OSD 使用不同优先级区间升级完成后集群将使用一致的值其他需要注意的打包与生态变化debian 开发包lib*-dev不再包含静态库与 libtool 伪库.la 文件共享库.so照常打包。jerasure 与 shec 插件可在运行时检测 SIMD 指令不再需要为不同处理器显式配置。jerasure_generic、jerasure_sse3、jerasure_sse4、jerasure_neon、shec_generic、shec_sse3、shec_sse4、shec_neon均已废弃直接使用这些插件会在 mon 日志中看到告警请改用jerasure或shec。v11.2.1 各组件修复要点v11.2.1 包含跨所有 Ceph 组件的大量缺陷修复按主题整理如下完整逐条清单见 doc/changelog/v11.2.1.txt构建与打包build/opsUbuntu Xenial 上 ceph-base 缺少 psmisc 依赖debian 包缺少 logrotateSELinux 安装时并行 relabelspec 文件引用不存在的 ceph-create-keys systemd 单元导致 ceph-mon 无法经 preset 启用systemd 在 ceph-mon 启动失败后重启过快systemd 调整为先启动 MON 再启动 OSD。ceph-disk新增fix子命令的 Kraken backport不支持非ceph集群名的问题启动时启用目录型 OSDbluestore 下--setgroup组名错误、prepare组名错误分区创建与设备节点创建的竞态list在带 SELinux context 挂载选项时误报挂载错误。CephFS / MDS / client修复 ceph-fuse 快照测试崩溃、与 MDS 断连后不恢复、两客户端访问同一文件死锁、大规模 cap/inode 下 rejoin 时心跳超时、超大 xattr 导致 MDS 崩溃、非本地 quota 变更需 IO 才可见、readdir提速跳过无关 dn、rmfailed命令无输出、文件打开标志内部归一化、handle_client_caps段错误等。librbd / rbd / rbd-mirror / rbd-nbd允许在不打开父镜像的情况下打开镜像resize RPC 消息向后兼容is_exclusive_lock_ownerAPI 应 ping OSDbreak lock 时防止自我 blacklistrbd-mirror 补删快照读错误、漏检镜像重新同步、未修改镜像 failover/failback 导致 split-brain、克隆镜像镜像竞态rbd-nbd 增加信号处理器并校验内核映射EC 池不支持覆盖写时拒绝使用。mon / OSD / bluestore / msgr缓存分层基础池last_force_resend不被尊重大 quorum 下msg/async忙循环force_create_pg可能卡在 creatingosd crush move不生效osd crush set crushmap缺健全性检查客户端节流器可在线调整默认不发送 ENXIO见上文scrub 请求优先级提升、异步 scrub sleep 实现bluestore 的 statfs 不把 DB 分区计入可用空间、Allocator 整数截断、onode 深解码PG 统计发布、pg log split 索引重建等。RGW / multisite多站点大量修复large period 解码失败、data sync命令挂起、元数据同步崩溃、SLO 对象 EPERM、zonegroup 更新回退删除、短 zone id 未清理等Swift API 系列修复对象过期remove-x-delete、根级特性/crossdomain.xml、/info、/healthcheck、x-openstack-request-id 头、versioning 禁用等S3 相关X-Amz-Expires v4 认证、版本列表缺 VersionIdMarker、压缩对象范围下载内容错误、copy-part 后对象大小错误、lifecycle 线程处理已删除 bucket 等。测试与工具ceph-object-corpus 增加 kraken 对象radosgw-admin增加object stat命令到 usagerados/ceph-objectstore-tool等工具修复若干崩溃与返回值问题。v11.0.2 开发检查点要点v11.0.2 是 Kraken 的首个开发检查点标志着ceph-mgr 首次亮相提供额外监控能力及外部监控/管理系统接口的新守护进程当前仓库见 src/mgr也是后续版本中 dashboard、prometheus 等模块的基座。BlueStore 密集迭代大量关于 BlueFS异步 compaction、direct IO、WAL、bitmap/bit 分配器、2Q 缓存 trim、校验和、压缩、onode 内存占用与编码优化的改动对应 src/os/bluestore 下的BlueStore.cc、BlueFS.cc、Allocator.cc等文件。RGW 新能力sync modules、multipart copy-part、经 ElasticSearch 的元数据检索技术预览。该版本同时将 AsyncMessenger 设为默认消息后端并引入 EC 覆盖写的早期实现基础。源码印证路径速览以下仓库位置可帮助读者深入验证本文涉及的关键实现src/os/bluestoreBlueStore/BlueFS 后端实现。src/osd/OSD.cc#L1653-L1706handle_misdirected_op误定向操作处理ENXIO 行为的基础。src/osd/OSD.cc#L3659-L3668osd_snap_trim_sleep系列选项取值逻辑OSD.cc#L10089-L10188 为osd_max_trimming_pgs的在线调整入口。src/common/options/global.yaml.inmon_allow_pool_delete、osd_max_omap_entries_per_request、osd_max_omap_bytes_per_request等配置项的定义与默认值。src/mgrceph-mgr 守护进程源码。doc/changelog/v11.2.1.txtv11.2.1 完整逐条变更日志。结语Kraken 是 Ceph 迈向 Luminous 的关键过渡版本BlueStore 首次以稳定磁盘格式走向用户AsyncMessenger 成为默认消息框架ceph-mgr 架构正式落地EC 覆盖写则开启了纠删码池的新可能。对运维而言本文给出的升级顺序先 Jewel 10.2.z、确保sortbitwise、最后升级 RGW、OSD 删除顺序先crush rm再osd rm以及新配置项速查表是安全完成此次升级的实用清单对开发者而言上述源码路径则为深入理解这些行为变化提供了起点。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Joplin Web Clipper 完全指南安装、配置、排障与 API 集成Joplin Web Clipper 完全指南安装、配置、排障与 API 集成 Web Clipper 是 Joplin 官方提供的浏览器扩展用于从浏览器中存储分布式文件系统对象存储后端高可用Drupal 文件上传存储型 XSS 漏洞CVE-2019-6341复现与原理剖析Drupal 文件上传存储型 XSS 漏洞CVE 2019 6341复现与原理剖析 本篇指南以 Vulhub 漏洞环境仓库中的 drupal/CVE 201存储分布式文件系统对象存储后端高可用Task Estimate: [Task Name]Task Estimate: Task Name Generated: Date Task Description Restate the task clear存储分布式文件系统对象存储后端高可用上一篇SunEditor自定义插件开发从零开始构建你的专属功能下一篇终极bpftrace调试指南10个快速定位系统问题的实战技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表