ARTICLE DETAIL

资讯详情

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

Ceph 的 `ceph-volume lvm new-db` 命令与 BlueFS 溢出回收实战指南

Ceph 的 `ceph-volume lvm new-db` 命令与 BlueFS 溢出回收实战指南 存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载new-db是 Ceph 部署工具链ceph-volume中用于为 OSD 附加独立 DB数据库逻辑卷的命令本文以 doc/ceph-volume/lvm/newdb.rst 为主线结合ceph-volume源码与ceph-bluestore-tool手册完整讲解该命令的用法、底层实现原理以及在实际集群中最常被用到它的场景——BlueFS 数据溢出spillover到慢速设备后的回收流程。读完本文你将掌握如何为已存在的 OSD 安全附加 DB 卷、如何读懂ceph health detail中的溢出告警以及如何通过「扩容 LV → 停止 OSD → bluefs-bdev-expand → bluefs-bdev-migrate → 重启 OSD」五步流程把元数据从慢盘迁回高速设备。new-db命令把逻辑卷挂为 OSD 的 DB 设备在 BlueStore 存储引擎中DB 设备block.db用于承载 RocksDB即 BlueFS 管理下的元数据通常由性能更好的 SSD/NVMe 承担。ceph-volume lvm new-db的作用是把一个已存在的 LVM 逻辑卷附加到指定 OSD 上作为其 DB 设备逻辑卷的命名格式为vg/lv卷组名/逻辑卷名若该 OSD 已经附加过 DB 设备命令会直接失败避免覆盖已有元数据布局该命令要求 OSD 处于停止状态源码中通过 systemd 单元检测强制执行这一前提。基本用法与参数为 OSD 1 附加vgname/new_db作为 DB 卷ceph-volume lvm new-db --osd-id 1 --osd-fsid 55BD4219-16A7-4037-BC20-0F158EFCC83D --target vgname/new_db命令参数定义于 src/ceph-volume/ceph_volume/devices/lvm/migrate.py 的make_parser参数必填说明--osd-id是目标 OSD 的 ID需为合法整数--osd-fsid是目标 OSD 的文件系统 UUID用于精确定位 OSD 及其关联设备--target是要附加的目标逻辑卷格式vg/lv--no-systemd否跳过 OSD systemd 单元运行状态检查--dmcrypt-format-opts否附加的cryptsetup luksFormat选项与 cryptsetup CLI 语法一致--dmcrypt-open-opts否附加的cryptsetup luksOpen选项在 src/ceph-volume/ceph_volume/devices/lvm/main.py 的 LVM 子命令mapper中new-db被注册为migrate.NewDB与new-walmigrate.NewWAL、migratemigrate.Migrate并列三者共享同一套NewVolume基类实现。命令背后的实现从 LVM 标签到bluefs-bdev-new-dbnew-db之所以能精确操作某个 OSD核心依赖 LVM 卷上的Ceph 元数据标签LVM tags。其执行链路可分为三步对应 migrate.py 中NewVolume.new_volume→make_new_volume定位 OSD 关联设备find_associated_devices()以ceph.osd_id、ceph.osd_fsid为过滤条件通过api.get_lvs()找出该 OSD 的 blockceph.typeblock、dbceph.typedb、walceph.typewal三类设备。若 block 设备本身是分区而非 LV还会借助blkid按ceph.db_uuid/ceph.wal_uuid等标签反查物理分区路径。前置校验目标vg/lv必须是真实存在的逻辑卷api.get_lv_by_fullname()否则报Target path vgname/new_db is not a Logical Volume目标卷不能被 Ceph 占用target_lv.used_by_ceph为真时报Target Logical Volume is already used by ceph若数据卷已启用 dmcrypt 加密会先读取 OSD 密钥并对目标卷执行prepare_dmcrypt此时传给底层工具的--dev-target变为/dev/mapper/lv_uuid。打标签并执行 BlueFS 附加VolumeTagTracker.update_tags_when_lv_create(db)会在目标卷上写入ceph.typedb、ceph.db_uuidlv_uuid、ceph.db_devicelv_path并在数据卷上同步ceph.db_uuid/ceph.db_device标签随后调用底层工具ceph-bluestore-tool --path osd_path --dev-target lv_path --command bluefs-bdev-new-db其中osd_path形如/var/lib/ceph/osd/cluster-osd_id由get_osd_path()生成。命令成功后会对block.db执行chown修正属主并打印New volume attached.。任何一步失败都会触发tag_tracker.undo()回滚标签保证一致性。bluefs-bdev-new-db在 doc/man/8/ceph-bluestore-tool.rst 中的语义是向 BlueFS 添加 DB 设备若 DB 设备已存在则失败——这正对应文档开头「Fails if OSD has already got attached DB」的约定。场景BlueFS 数据溢出Spillover与回收什么是 spillover在 BlueStore 中RocksDB 写入会优先落在高速的db设备上。当 DB 卷空间不足、无法容纳全部元数据时BlueFS 会把溢出的数据落到慢速设备即数据盘block上。集群健康检查会对此给出明确告警通过ceph health detail可见。典型告警形如osd.76 spilled over 128 KiB metadata from db device (56 GiB used of 60 GiB) to slow device含义解读OSD 76 的 DB 设备60 GiB 容量、已用 56 GiB装不下元数据溢出了 128 KiB 到慢速设备。溢出数据因位于慢盘会拖慢元数据访问进而影响整体 OSD 性能因此需要把溢出的元数据迁回快速设备。五步回收流程文档给出了一套经 ceph-users 邮件列表验证的完整操作流程原始出处为 Chris Dunlop 的帖子。以下步骤假设你已准备好一块足够大的快速存储SSD/NVMe并将其加入目标 OSD 所在的卷组。第 1 步扩容 DB 的逻辑卷先把快速设备上的空间并入现有 DB LV使 DB 卷拥有容纳全部元数据的容量lvextend -l size lv/db ssd_dev例如lvextend -l 100%FREE vgname/db /dev/nvme0n1。注意-l后既可接具体大小如20G也可接以 PE 数或百分比表示的空间。扩容后 BlueFS 并不会自动感知新空间需要后续命令配合。第 2 步停止 OSD元数据迁移必须在 OSD 离线时进行。使用 cephadm 停止目标 OSDcephadm unit --fsid cid --name osd.osd stopcid为集群 fsidosd为 OSD 编号如76。这一步同时会关闭加密 OSD 的 LUKS 映射确保设备可被底层工具安全操作。第 3 步运行bluefs-bdev-expand让 BlueFS 感知扩大的设备容量并利用新增空间cephadm shell --fsid cid --name osd.osd -- ceph-bluestore-tool bluefs-bdev-expand --path /var/lib/ceph/osd/ceph-osd依据 ceph-bluestore-tool.rst 的说明该命令会检查 BlueFS 块设备尺寸并启用扩容后的空间注意它不会立即搬移已溢出的文件——只有新建文件会优先落到有足够空间的快速设备已溢出到慢速设备的存量文件会随着 RocksDB 压缩compaction逐渐被清理并迁回快设备。这正是下一步需要bluefs-bdev-migrate的原因。第 4 步运行bluefs-bdev-migrate主动把数据从慢速设备block迁移到 DB 设备block.dbcephadm shell --fsid cid --name osd.osd -- ceph-bluestore-tool bluefs-bdev-migrate --path /var/lib/ceph/osd/ceph-osd --devs-source /var/lib/ceph/osd/ceph-osd/block --dev-target /var/lib/ceph/osd/ceph-osd/block.db--devs-source指定源设备这里是数据盘block即溢出元数据的落点--dev-target指定目标设备这里是block.db。根据工具手册bluefs-bdev-migrate会把 BlueFS 数据从源设备移动到目标设备成功后将移除源设备主设备除外并同步更新目标卷的 size label使后续的bluefs-bdev-expand不再必要。迁移完成后无需再单独执行扩容操作。第 5 步重启 OSD迁移完成后重新拉起 OSD使集群恢复正常服务cephadm unit --fsid cid --name osd.osd start重启后可通过ceph health detail确认溢出告警是否消失若仍有残余溢出可重复第 15 步进一步扩容 DB 卷直至告警消除。注意ceph-bluestore-tool的bluefs-bdev-migrate存在替换规则——当源设备列表含 DB 卷时目标设备替换 DB含 WAL 卷时目标设备替换 WAL若源仅含慢速设备则该操作不被允许必须先通过new-db/new-wal显式分配设备见 doc/man/8/ceph-bluestore-tool.rst。因此上面第 4 步的用法源为block慢盘、目标为已存在的block.db符合「目标已是已附加设备」的合法场景。与相关命令的关系new-db属于ceph-volume lvm设备生命周期管理家族与以下命令协同使用new-waldoc/ceph-volume/lvm/newwal.rst同样格式为 OSD 附加 WAL 卷若 OSD 已附加 DB 卷同样失败实现上与new-db共用NewVolume基类仅create_type不同。migrate将 BlueFS 数据从一组源卷迁移到目标卷新 LV 或已附加 LV。当源列表仅有慢速设备时工具会明确提示「requires explicit allocation via new-db/new-wal command」即此时必须先由new-db分配新 DB 卷再执行迁移——两个命令在「给 OSD 增加/替换 DB 设备」场景下是衔接使用的。zap迁移成功、旧卷被替换后Migrate会对被移除的 LV 调用zap.Zap清理残留元数据。源码佐证与测试命令注册与类映射src/ceph-volume/ceph_volume/devices/lvm/main.pynew-db: migrate.NewDB。核心实现NewVolume/NewDB类及VolumeTagTracker标签管理src/ceph-volume/ceph_volume/devices/lvm/migrate.py。测试覆盖test_new_db系列用例验证了目标卷不存在、已被 Ceph 占用等失败路径以及成功场景下会以--command bluefs-bdev-new-db调用ceph-bluestore-toolsrc/ceph-volume/ceph_volume/tests/devices/lvm/test_migrate.py。底层工具语义bluefs-bdev-new-db/bluefs-bdev-expand/bluefs-bdev-migrate的完整行为说明见 doc/man/8/ceph-bluestore-tool.rst。总结ceph-volume lvm new-db通过「LVM 标签定位 OSD → 校验目标卷 → 打标签 → 调用ceph-bluestore-tool bluefs-bdev-new-db」的完整链路为运维提供了在 OSD 存续期间动态附加 DB 设备的标准入口而当ceph health detail报出 BlueFS spillover 告警时本文的五步流程扩容 LV → 停 OSD →bluefs-bdev-expand→bluefs-bdev-migrate→ 启 OSD则是在线回收慢速设备上溢出元数据的可靠手段。理解new-db、new-wal与migrate三者间的替换规则能帮助你在规划高速设备分配时避免误操作让 BlueStore 的元数据始终停留在它该待的快速设备上。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐VideoLingo 使用教程视频字幕翻译与 AI 配音全指南VideoLingo 使用教程视频字幕翻译与 AI 配音全指南 VideoLingo 是一款覆盖转录、断句、翻译、配音全流程的视频字幕翻译工具目标是生成 N存储分布式文件系统对象存储后端高可用Ceph 设备发现指南详解 ceph-volume lvm list 命令的使用、输出格式与实现原理Ceph 设备发现指南详解 ceph volume lvm list 命令的使用、输出格式与实现原理 ceph volume lvm list 是 Ceph存储分布式文件系统对象存储后端高可用Ceph 单命令创建 OSD 全指南ceph-volume lvm create 的 prepare activate 一体化流程与实战配置Ceph 单命令创建 OSD 全指南ceph volume lvm create 的 prepare activate 一体化流程与实战配置 ceph v存储分布式文件系统对象存储后端高可用上一篇Xcode硬件性能测试项目教程下一篇3个核心功能让你爱上Pot跨平台翻译与OCR工具全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表