ceph的osd

可以,而且这是 Ceph(Bluestore)在生产环境中完全支持、也相当常见的一种部署形态。

但要按 Ceph 的真实实现规则来理解 ,否则很容易在"一个盘能不能给很多 OSD 用"这个点上产生误解。下面我给你一个严格、工程视角的说明。


一、结论先行(最重要的三点)

  1. 可以

    • 1 块(或多块)盘专门做 WAL
    • 1 块(或多块)盘专门做 DB
    • 多块盘做数据盘(data OSD)
  2. 但不是"一个盘 = 一个 OSD"的绑定关系

    • DB/WAL 盘是共享资源
    • 数据盘是一盘一个 OSD
  3. DB/WAL 是以「LVM LV」的形式被多个 OSD 切分共享的


二、你描述的目标拓扑,用 Ceph 的语言怎么说?

你说的是这一类结构:

text 复制代码
/dev/nvme0n1   → WAL 盘(共享)
/dev/nvme1n1   → DB  盘(共享)
/dev/sdb
/dev/sdc
/dev/sdd       → 数据盘(一个盘一个 OSD)

这在 Ceph 里叫:

Shared DB / Shared WAL for multiple OSDs

👉 完全支持


三、Ceph 实际是如何实现"一个 WAL/DB 盘供多个 OSD 用"的?

关键点(一定要理解)

不是多个 OSD 共用一个 WAL/DB 目录,而是:

在 DB/WAL 盘上,按 OSD 数量切分出多个 LV


举一个真实的结构例子

假设:

  • /dev/nvme0n1:WAL 盘
  • /dev/nvme1n1:DB 盘
  • /dev/sdb /dev/sdc /dev/sdd:3 块 HDD 数据盘

最终你会看到类似这样:

text 复制代码
/dev/nvme1n1   (DB 盘)
 └─ VG ceph-db-vg
    ├─ LV osd-db-0
    ├─ LV osd-db-1
    └─ LV osd-db-2

/dev/nvme0n1   (WAL 盘)
 └─ VG ceph-wal-vg
    ├─ LV osd-wal-0
    ├─ LV osd-wal-1
    └─ LV osd-wal-2

/dev/sdb
 └─ VG ceph-data-0
    └─ LV osd-block-0

/dev/sdc
 └─ VG ceph-data-1
    └─ LV osd-block-1

/dev/sdd
 └─ VG ceph-data-2
    └─ LV osd-block-2

👉 每个 OSD 都有自己独立的:

  • block
  • block.db
  • block.wal

只是:

  • db / wal 在 共享 NVMe 上
  • data 在 各自 HDD 上

四、这是"推荐"还是"可用但不建议"?

结论非常明确:

这是官方推荐、生产常用的部署方式

尤其在以下场景中:

场景 评价
HDD 数据盘 + NVMe ⭐⭐⭐⭐⭐(强烈推荐)
HDD 数据盘 + SSD ⭐⭐⭐⭐
全 HDD ❌ 意义不大
全 NVMe ❌ 没必要拆

五、但是:有两个硬性工程约束你必须知道

⚠️ 约束 1:DB/WAL 盘容量必须足够

经验值(不是绝对):

项目 推荐
block.db 2%--4% × data 盘容量
block.wal 1--4 GB / OSD

举例:

  • 3 × 4TB HDD ≈ 12TB data
  • DB 至少需要 240--480GB
  • WAL 需要 ~10GB 就够

⚠️ 约束 2:WAL 盘的 IOPS 很关键

  • WAL 是同步写
  • 多个 OSD 共用一块 WAL 盘 → IOPS 会叠加
  • 如果 WAL 盘性能不足,反而会拖慢整个集群

👉 如果只有一块 NVMe:

  • 优先 DB
  • WAL 可以不单拆(放 DB 或 block 里)

六、如何"正确"声明这种结构?(关键)

❌ 不要用 ceph orch osd add

✅ 必须用 OSD Spec(YAML)

示例(一个 WAL 盘,一个 DB 盘,多个数据盘):

yaml 复制代码
service_type: osd
service_id: osd-hdd-nvme
placement:
  host_pattern: node1
spec:
  data_devices:
    paths:
      - /dev/sdb
      - /dev/sdc
      - /dev/sdd

  db_devices:
    paths:
      - /dev/nvme1n1

  wal_devices:
    paths:
      - /dev/nvme0n1

执行:

bash 复制代码
ceph orch apply -i osd.yaml

Ceph 会自动:

  • 在 data 盘上建 OSD
  • 在 db / wal 盘上按 OSD 数量切 LV

七、验证你是否"真的生效了"

创建后你应该看到:

bash 复制代码
ceph-volume lvm list

每个 OSD 都有:

text 复制代码
[block]
[block.db]
[block.wal]

并且:

bash 复制代码
lvs -a -o lv_name,vg_name,devices

能看到:

  • 多个 osd-db-* 指向同一块 NVMe
  • 多个 osd-wal-* 指向同一块 NVMe

八、一句话终极总结

可以:一个盘作为 WAL,一个盘作为 DB,多个盘作为数据盘;
DB/WAL 盘是共享的,通过 LVM 切分给多个 OSD;
这是 Bluestore + HDD + NVMe 场景下的标准、推荐部署方式。

如果你愿意,下一步我可以帮你:

  • 按你现有磁盘容量算 DB/WAL 应该切多大
  • 判断是否需要拆 WAL,还是只拆 DB 就够
  • 给你一份"最优但不过度复杂"的 OSD Spec

你只需要告诉我每块盘的容量和类型。

相关推荐
奔跑的web.13 小时前
TypeScript 装饰器入门核心用法
前端·javascript·vue.js·typescript
集成显卡13 小时前
Lucide Icons:一套现代、轻量且可定制的 SVG 图标库
前端·ui·图标库·lucide
pas13614 小时前
37-mini-vue 解析插值
前端·javascript·vue.js
开发者小天14 小时前
python中For Loop的用法
java·服务器·python
flushmeteor14 小时前
JDK源码-基础类-String
java·开发语言
毕设源码-钟学长14 小时前
【开题答辩全过程】以 基于ssm的空中停车场管理系统为例,包含答辩的问题和答案
java
不愿是过客14 小时前
java实战干货——长方法深递归
java
十里-14 小时前
vue.js 2前端开发的项目通过electron打包成exe
前端·vue.js·electron
雨季66615 小时前
构建 OpenHarmony 简易文字行数统计器:用字符串分割实现纯文本结构感知
开发语言·前端·javascript·flutter·ui·dart
小北方城市网15 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf