首页/系统与基础设施/存储速查/Ceph RBD 内核客户端与用户态客户端
分布式与对象存储70 条

Ceph RBD 内核客户端与用户态客户端

访问 Ceph RBD 分内核客户端与用户态客户端两条路径:krbd 走内核块层、延迟低但受内核版本限制,librbd 随应用升级、特性跟进快,适合虚拟机与容器场景;rbd-nbd 是两者的折中方案。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌​​​‌‌​‌‌​​‌​‌​‌‌‌​​​​​‌‌​‌​​​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​​‌​​‌‌​​‌​​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

两种客户端路径

访问 RBD 有两条路:内核客户端 krbd 由内核模块直接处理 IO,映射出 /dev/rbdX 设备,路径短、延迟低;用户态客户端 librbd 把请求从应用或虚拟机经库函数发出,特性跟进快、可随宿主程序升级。两者共用同一套集群数据,差别在 IO 走哪条栈。

基本信息

适用平台Linux 主机(krbd)、QEMU 虚拟机与容器 CSI(librbd)
内核客户端rbd map,需要 rbd 内核模块
用户态客户端librbd 库,配合 QEMU 或 rbd-nbd 使用
权限要求目标池的读写 caps,映射操作需 root

典型使用场景

  • 数据库物理机直连盘:优先内核客户端,减少一层上下文切换
  • 云平台虚拟机盘:QEMU 走 librbd,支持快照、克隆与在线迁移
  • 内核版本偏老:新卷特性不支持时改用 rbd-nbd 折中
  • 容器持久卷:CSI 驱动通过 librbd 动态供给,无需在节点装内核模块

内核客户端

内核客户端
modprobe rbd                    # 加载 rbd 内核模块
rbd map data/dbvol              # 映射,输出 /dev/rbd0
rbd device list                 # 查看已映射设备与池的对应关系
rbd unmap /dev/rbd0             # 卸载映射(先 umount)

用户态路径

用户态路径
rbd-nbd map data/dbvol                 # 内核 NBD + 用户态 librbd
rbd-nbd list-mapped                    # 查看已映射的 NBD 设备
qemu-system-x86_64 -drive file=rbd:data/dbvol:conf=/etc/ceph/ceph.conf  # 虚拟机直用 librbd

两种客户端对比

维度内核客户端 krbd用户态客户端 librbd
IO 路径内核块层直通,延迟更低多一次用户态拷贝,CPU 占用略高
特性支持受内核版本限制随 Ceph 版本更新,新特性可用
运维方式需加载模块、逐台维护内核随应用或容器一起升级,无需动内核
映射失败常见原因是卷启用了内核不支持的特性:可先用 rbd info 看 features,必要时在建卷时关掉不需要的特性,或改用 rbd-nbd。
同一块 RBD 卷不要同时用内核与用户态两种路径挂载到不同主机,没有文件系统层的互斥保护时极易写坏数据。

选型判断顺序

  • 先确认客户端内核版本是否支持卷上启用的全部特性
  • 再确认是否需要在不停机的前提下升级存储访问栈
  • 虚拟机场景优先使用虚拟化层自带的用户态客户端
  • 容器场景交给存储插件决定路径,避免手工映射与调度冲突
  • 两种路径混用时统一在一处登记映射关系,防止设备名与卷对应关系混乱
映射关系不写入开机挂载配置时,宿主机重启后卷不会自动回来,需要配合自动化脚本或系统服务单元。

易错点

  • 内核模块版本与集群特性不匹配,映射报错却被当成集群故障排查
  • 映射后直接 unmap 不先卸载文件系统,导致挂载点僵死或数据损坏
  • 用 rbd-nbd 却忘了对应进程退出,重启后映射关系与设备名对不上
  • 跨主机共享同一卷不做集群文件系统,多写并发破坏数据

数据来源与参考

  • Ceph 官方文档:RBD 与内核模块(krbd)
  • Ceph 官方文档:librbd 与 rbd-nbd

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/ceph-rbd-client-modes.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌​​​‌‌​‌‌​​‌​‌​‌‌‌​​​​​‌‌​‌​​​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​​‌​​‌‌​​‌​​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​