1、简介
RADOS Block Device(RBD) 是 Ceph 集群提供的一种高性能、分布式、可扩展的虚拟块设备服务。它基于 Ceph 的底层对象存储系统 RADOS 实现,将对象存储池中的对象组合成一个连续的逻辑块设备,并通过 librbd 库或内核模块映射到客户端使用。
RBD 在使用方式上与普通硬盘无异,可以进行格式化、分区、挂载等操作,同时继承了 Ceph 的核心优势——高可用性、高可靠性、线性扩展。
在云计算、容器、虚拟化、数据库等场景中,RBD 扮演着后端存储的角色,可以为虚拟机提供系统盘、为数据库提供数据盘,甚至作为 Kubernetes 持久化卷(PV)存储应用数据。
2、特点
- 高可靠性与数据安全
- 基于 Ceph 的副本机制(默认 3 副本)或纠删码策略,保证数据在多副本、跨节点存储,即使某个 OSD 或节点宕机也能无缝恢复。
- 数据分布自动化,避免单点故障。
- 弹性扩容与在线伸缩
- 支持在线调整容量,扩容过程无需卸载设备,不影响正在运行的业务。
- 从几十 GB 到数百 TB 都可灵活调整,满足业务动态增长的需求。
- 快照与克隆
- 提供零拷贝快照,创建速度快,几乎不占用额外空间。
- 支持基于快照的克隆,能快速创建多个副本(如云平台批量生成虚拟机镜像)。
- 性能可水平扩展
- 读写请求由多个 OSD 节点并行处理,随着集群规模增加,性能线性提升。
- 客户端可通过内核 RBD 驱动或用户态 librbd API 调用,高效访问数据。
- 多客户端挂载与共享
- 单个 RBD 可被多个客户端挂载(配合 CephFS 或集群文件系统),适用于共享数据场景。
- 在虚拟化环境中可直接作为虚拟机磁盘使用,无需中间存储层。
- 无缝集成生态
- 与 OpenStack Cinder、Kubernetes CSI、Proxmox、QEMU/KVM 等兼容。
- 可替代传统 SAN、NAS 作为后端块存储方案。
3、使用场景
- 云平台块存储
- 在 OpenStack、CloudStack 等云平台中,RBD 常作为虚拟机的系统盘和数据盘后端存储。
- 提供快照功能支持云平台镜像管理,快速创建/恢复虚拟机。
- 数据库存储后端
- 可用于 MySQL、PostgreSQL、MongoDB、ElasticSearch 等对 IOPS 和可靠性要求高的数据库系统。
- 动态扩容适合业务数据快速增长的场景。
- 虚拟化环境磁盘
- 在 KVM/QEMU/Proxmox 中,RBD 可直接作为虚拟机磁盘映射,无需中间挂载,提高性能。
- 结合快照功能,可快速回滚虚拟机状态。
- Kubernetes 持久化存储(PV)
- 通过 Ceph CSI 插件,RBD 可直接为 Kubernetes 提供动态 PV,适配 StatefulSet、数据库、缓存等有状态应用。
- 大数据与分析平台
- 可为 Hadoop、Spark、Flink 等计算平台提供分布式块存储,满足高吞吐和弹性需求。
- 高性能计算(HPC)与 AI 训练
- 可作为训练数据集存储盘,为 GPU 集群提供高速数据访问。
- 快照与克隆可快速创建多份相同训练数据环境。
4、创建rbd池
确认是否有 rbd
池
~ ❯ ceph osd pool ls .mgr
cephfs.cephfs.meta
cephfs.cephfs.data
如果列表里没有
rbd
,就需要先创建。
创建 rbd 池
ceph osd pool create rbd 128
128 是 PG 数量,可以根据集群规模调整。小型测试集群可以用
8
或32
,生产环境需根据 OSD 数量和pgcalc
计算。
初始化 rbd 池
rbd pool init rbd
这一步是为了给池里创建 RBD 元数据对象,不初始化的话创建镜像会失败。
再次创建 RBD 镜像
rbd create myrbd --size 102400 --pool rbd
如果想换个池:
rbd create myrbd --size 102400 --pool mypool
验证
~ ❯ rbd ls rbd
myrbd
~ ❯ ceph osd pool ls
.mgr
cephfs.cephfs.meta
cephfs.cephfs.data
rbd
5、客户端挂载
~ ❯ sudo apt install ceph-common
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ceph-common is already the newest version (17.2.7-0ubuntu0.22.04.2).
0 upgraded, 0 newly installed, 0 to remove and 71 not upgraded.
~ ❯ sudo rbd map myrbd --pool rbd --id admin --keyring /etc/ceph/ceph.client.admin.keyring
~ ❯ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.9M 1 loop /snap/core20/2105
loop1 7:1 0 87M 1 loop /snap/lxd/27037
loop2 7:2 0 40.4M 1 loop /snap/snapd/20671
loop3 7:3 0 49.3M 1 loop /snap/snapd/24792
loop4 7:4 0 63.8M 1 loop /snap/core20/2599
loop5 7:5 0 89.4M 1 loop /snap/lxd/31333
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0124.9G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0124.9G 0 lvm /
sdb 8:16 0 200G 0 disk
sdc 8:32 0 200G 0 disk
sdd 8:48 0 200G 0 disk
sr0 11:0 1 1024M 0 rom
rbd0 252:0 0 100G 0 disk
~ ❯ sudo mkfs.ext4 /dev/rbd0
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 26214400 4k blocks and 6553600 inodes
Filesystem UUID: ab6df4c8-f8a2-4119-859c-07ef0cf38c8e
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information: done
~ ❯ sudomkdir-p /mnt/ceph-rbd
~ ❯ sudo mount /dev/rbd0 /mnt/ceph-rbd
~ ❯ df -Th
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 794M 1.1M 793M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 123G 9.5G 107G 9% /
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 ext4 2.0G 253M 1.6G 14% /boot
/dev/sda1 vfat 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs tmpfs 794M 4.0K 794M 1% /run/user/1000
ceph-fuse fuse.ceph-fuse 100G 2.3G 98G 3% /mnt/myshare
/dev/rbd0 ext4 98G 24K 93G 1% /mnt/ceph-rbd
6、扩容
你现在 /dev/rbd0
是 Ceph RBD 映射出来的块设备,扩容流程分 两步:
- 扩 RBD 镜像本身(Ceph 集群侧)
- 扩文件系统(客户端侧,让它用上新空间)
扩容 RBD 镜像
在 Ceph 集群任意有 ceph
/rbd
命令的节点执行(也可以在客户端执行,如果配置了 ceph.conf
和 key):
bash复制编辑# 查看当前 RBD 信息
rbd info myrbd --pool rbd
# 扩容到 200G(单位 MB)
rbd resize myrbd --size 204800 --pool rbd
# 或者在原有大小基础上扩 50G
rbd resize myrbd --size +51200 --pool rbd
扩容完成后再确认
rbd info myrbd --pool rbd
扩容客户端文件系统
RBD 扩容后,客户端看到的 /dev/rbd0
也会变大,但是文件系统还不知道要用这部分空间,需要做扩展。
#ext4 文件系统
sudo resize2fs /dev/rbd0
#xfs 文件系统
sudo xfs_growfs /mnt/ceph-rbd
xfs 必须在挂载状态下扩容。
验证
~ ❯ df -h /mnt/ceph-rbd
Filesystem Size Used Avail Use% Mounted on
/dev/rbd0 197G 24K 188G 1% /mnt/ceph-rbd
⚠️ 注意事项
- 扩容是 在线可执行 的,数据不会丢失,但最好提前做快照备份。
- 如果是多客户端挂载(集群文件系统),要保证所有节点同步刷新文件系统大小。
✨ 只写原创,不接广告,不接广告,不接广告。
在这里,你将看到全新的技术分享、运维经验、以及最新的行业动态。我们坚信,原创内容才是最有价值的资源,所以所有文章都是独立创作,与你们一起成长。
声明:来自IT运维大爆炸,仅代表创作者观点。链接:https://eyangzhen.com/2235.html