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

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

相关推荐
向上的车轮7 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
Dragon Wu7 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
跳动的梦想家h7 小时前
环境配置 + AI 提效双管齐下
java·vue.js·spring
坚持就完事了7 小时前
Java中的集合
java·开发语言
wjhx7 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
YCY^v^7 小时前
JeecgBoot 项目运行指南
java·学习
夏幻灵7 小时前
HTML5里最常用的十大标签
前端·html·html5
人间打气筒(Ada)7 小时前
jenkins基于Pipeline发布项目
java·pipeline·jenkins·流水线·ci·cd·cicd
爬山算法7 小时前
Hibernate(88)如何在负载测试中使用Hibernate?
java·后端·hibernate
Mr Xu_7 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js