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

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

相关推荐
helloworld也报错?1 分钟前
保存网页为PDF
前端·javascript·pdf
码丁_1172 分钟前
某it培训机构前端三阶段react及新增面试题
前端·react.js·前端框架
石小石Orz2 分钟前
自定义AI智能体扫描内存泄漏代码
前端·ai编程
_木棠3 分钟前
uniapp:H5端reLaunch跳转后,返回还有页面存在问题
前端·uni-app
LaLaLa_OvO5 分钟前
spring boot2.0 里的 javax.validation.Constraint 加入 service
java·数据库·spring boot
Solar20256 分钟前
构建高可靠性的机械设备企业数据采集系统:架构设计与实践指南
java·大数据·运维·服务器·架构
慧一居士9 分钟前
jdk1.8 及之后的新版本介绍,新特性示例总结
java
eybk11 分钟前
拖放pdf转化为txt文件多进程多线程合并分词版
java·python·pdf
D_FW17 分钟前
数据结构第四章:串
java·开发语言
Tao____17 分钟前
物联网平台二开
java·网络·物联网·mqtt·网络协议