RBD 是什么
RBD(RADOS Block Device)把 Ceph 集群切成一块块虚拟磁盘,主机挂载后当成普通块设备使用,可格式化文件系统、当数据库盘或容器卷。块设备分布在多个 OSD 上,天生带多副本,因此快照、克隆和扩容都只在集群侧完成,不需要像传统 LUN 那样重新划分配置。
基本信息
| 适用平台 | Ceph 集群 + Linux 客户端 |
|---|---|
| 管理命令 | rbd create / ls / map / snap / clone |
| 依赖 | 需先建好存储池并启用 rbd 应用 |
| 权限要求 | 对目标池具备读写 caps 的 CephX 身份 |
典型使用场景
- 给虚拟机或物理机提供云盘,替代传统集中式存储 LUN
- 数据库盘:需要快照备份和一致性保护的业务卷
- 容器持久卷:动态供给块设备再挂进容器
- 快速交付环境:对做过初始化配置的镜像卷做克隆,秒级出一套新盘
创建与挂载
创建与挂载
ceph osd pool create data 128 128 # 建池并设置 PG 数
rbd pool init data # 池启用 rbd 应用
rbd create data/dbvol --size 200G # 创建 200G 块设备
rbd map data/dbvol # 映射到本机,输出设备名
rbd info data/dbvol # 查看大小、特性与所属池快照、克隆与保护
快照、克隆与保护
rbd snap create data/dbvol@snap1 # 打快照,秒级完成
rbd snap ls data/dbvol # 列出快照
rbd snap protect data/dbvol@snap1 # 保护后才能克隆
rbd clone data/dbvol@snap1 data/dbcopy # 克隆出可写副本
rbd snap purge data/dbvol # 清理全部快照(谨慎)输出逐列读法
| 字段 | 含义 | 异常表现 |
|---|---|---|
| size | 卷容量,写入不会自动扩张 | 与预期不符说明建立时给错大小 |
| features | 启用的卷特性,如分层与互斥锁 | 旧内核客户端挂载失败常因特性不支持 |
| snap_count | 快照数量,过多影响性能 | 长期不清快照会导致写入放大 |
快照是瞬时指针,不占双倍空间,但快照链过长时写入会退化为拷贝,长期保留大量快照既费空间也拖性能。
克隆出的卷在被挂载写数据后与父快照绑定更深,删除父快照前必须先处理子卷,否则会破坏子卷数据。
快照与克隆使用要点
- 应用侧先刷新缓存或暂停写入再打快照,一致性的口径由业务决定
- 快照名带时间戳与用途,事后追溯时不必靠猜
- 克隆依赖的父快照加保护标记,防止被清理流程误删
- 卷扩容后在操作系统内还要扩展文件系统,只扩集群侧不生效
- 跨环境迁移前核对目标内核与卷特性的兼容性
卷容量只能扩大不能缩小,规划时留出增长余量;确需变小只能新建卷并迁移数据。