1 2 3 4 5 6 7
| 作者:李晓辉
联系方式:
1. 微信:Lxh_Chat
2. 邮箱:939958092@qq.com
|
RBD的块存储介绍
RADOS 块设备 (RBD) 功能可从红 帽 Ceph 存储集群提供块存储。RADOS 提供虚拟块设备,并以 RBD 镜像形式存储在红帽 Ceph 存储集群的池中,在创建了存储池后,需要使用 rbd pool init
命令进行初始化赋予它rbd的功能。
rbd_default_pool
参数指定用于存储 RBD 镜像的默认池的名称,默认是rbd
RBD 内核客户端介绍
内核 RBD 客户端 (krbd
) 将 RBD 镜像映射到 Linux 块设备,Ceph 客户端可以使用原生 Linux 内核模块 (krbd
) 挂载 RBD 镜像。这个模块使用 /dev/rbd0
之类的名称将 RBD 镜像映射到 Linux 块设备。

提供RDB块存储
创建存储池
首先需要创建一个池用于存放RDB镜像,然后将该池设置为RBD的应用程序类型
1 2 3
| [root@serverc ~]# ceph osd pool create rbdpool pool 'rbdpool' created [root@serverc ~]# rbd pool init rbdpool
|
查询池的大小以及可用信息,发现我们目前rbdpool有32个PG,最大为28GiB
1 2 3 4 5 6 7 8 9 10
| [root@serverc ~]# ceph df --- RAW STORAGE --- CLASS SIZE AVAIL USED RAW USED %RAW USED hdd 90 GiB 89 GiB 595 MiB 595 MiB 0.65 TOTAL 90 GiB 89 GiB 595 MiB 595 MiB 0.65
--- POOLS --- POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL ... rbdpool 8 32 19 B 1 12 KiB 0 28 GiB
|
安装ceph-common
需要安装ceph-common
来操作ceph
1
| [root@serverc ~]# yum install ceph-common -y
|
创建客户端账号
创建一个名为rbduse
的账号以供客户端来连接并使用此存储池,要注意需要把keyring和ceph.conf
发给客户端
1
| [root@serverc ~]# ceph auth get-or-create client.rbduse mon 'profile rbd' osd 'profile rbd' -o /etc/ceph/ceph.client.rbduse.keyring
|
分发配置文件和keyring
1 2 3 4
| [ceph: root@host1 /]# scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.rbduse.keyring root@clienta:/etc/ceph/ root@clienta's password: ceph.conf 100% 339 533.3KB/s 00:00 ceph.client.rbduse.keyring 100% 64 110.0KB/s 00:00
|
创建RBD镜像
在rbdpool中,创建一个名为test切大小为500M的镜像
1 2 3
| [root@serverc ~]# rbd create rbdpool/test --size=500M [root@serverc ~]# rbd list -p rbdpool test
|
查询RBD镜像参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [root@serverc ~]# rbd info rbdpool/test rbd image 'test': size 500 MiB in 125 objects order 22 (4 MiB objects) snapshot_count: 0 id: d95ce194def6 block_name_prefix: rbd_data.d95ce194def6 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten op_features: flags: create_timestamp: Wed Aug 7 03:20:13 2024 access_timestamp: Wed Aug 7 03:20:13 2024 modify_timestamp: Wed Aug 7 03:20:13 2024
|
挂载RBD到客户端使用
客户端也需要安装ceph-common
1
| [root@clienta ~]# yum install ceph-common -y
|
可以看到多了一个名为rbd0的500M的磁盘
1 2 3 4 5
| [root@clienta ~]# rbd map rbdpool/test /dev/rbd0 [root@clienta ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT rbd0 251:0 0 500M 0 disk
|
查看RBD映射情况
1 2 3
| [root@clienta ~]# rbd showmapped id pool namespace image snap device 0 rbdpool test - /dev/rbd0
|
格式化挂载RBD设备
1 2 3 4 5 6 7 8 9 10 11 12
| [root@clienta ~]# mkfs.xfs /dev/rbd0 meta-data=/dev/rbd0 isize=512 agcount=8, agsize=16000 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=128000, imaxpct=25 = sunit=16 swidth=16 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=1872, version=2 = sectsz=512 sunit=16 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 Discarding blocks...Done.
|
我们挂载到/mnt上
1 2 3
| [root@clienta ~]# mount /dev/rbd0 /mnt/ [root@clienta ~]# df -h | grep rbd0 /dev/rbd0 493M 29M 464M 6% /mnt
|
永久挂载
rbd的设备永久挂载一定要注意,这不是本地设备,需要ceph先操作把rbd0的设备映射成本地设备,然后才能本地挂载,不然你启动的时候挂载会卡住无法启动系统
先把rbd映射写好,并启动服务,如果不启用并启动服务,就需要每次系统启动后执行rbd map命令映射成本地设备,关机的时候执行rbd unmap
1 2 3 4
| [root@clienta ~]# vim /etc/ceph/rbdmap [root@clienta ~]# tail -n1 /etc/ceph/rbdmap rbdpool/test id=rbduse,keyring=/etc/ceph/ceph.client.rbduse.keyring [root@clienta ~]# systemctl enable rbdmap --now
|
写入fstab,并重启测试
请注意,这里fstab挂载请使用noauto
重启后,发现rbd0还是挂载的
1 2 3 4 5 6
| [root@client ~]# vim /etc/fstab [root@client ~]# tail -n1 /etc/fstab /dev/rbd0 /mnt xfs defaults,noauto 0 0 [root@client ~]# reboot [root@clienta ~]# df -h | grep mnt /dev/rbd0 493M 29M 464M 6% /mnt
|
写入数据
1 2 3 4
| [root@clienta ~]# dd if=/dev/zero of=/mnt/test.data bs=10M count=20 20+0 records in 20+0 records out 209715200 bytes (210 MB, 200 MiB) copied, 0.111759 s, 1.9 GB/s
|
查询rados数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| [root@clienta ~]# rbd info rbdpool/test rbd image 'test': size 500 MiB in 125 objects order 22 (4 MiB objects) snapshot_count: 0 id: d95ce194def6 block_name_prefix: rbd_data.d95ce194def6 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten op_features: flags: create_timestamp: Wed Aug 7 03:20:13 2024 access_timestamp: Wed Aug 7 03:20:13 2024 modify_timestamp: Wed Aug 7 03:20:13 2024 [root@clienta ~]# rados -p rbdpool ls rbd_data.d95ce194def6.000000000000005f rbd_data.d95ce194def6.0000000000000044 rbd_data.d95ce194def6.0000000000000064 rbd_data.d95ce194def6.0000000000000000 rbd_data.d95ce194def6.000000000000006e
|
查询RBD镜像实际使用量
1 2 3
| [root@clienta ~]# rbd disk-usage rbdpool/test NAME PROVISIONED USED test 500 MiB 472 MiB
|
RBD 镜像大小扩容
如果RBD随着后期的需求增长,不够大了怎么办,那就需要使RBD变大,目前我们只有500M,什么都放不下
1 2 3
| [root@clienta ~]# rbd disk-usage -p rbdpool NAME PROVISIONED USED test 500 MiB 472 MiB
|
扩大到10G
1 2 3 4 5 6 7 8 9 10 11 12
| [root@clienta ~]# rbd resize rbdpool/test --size 10G Resizing image: 100% complete...done. [root@clienta ~]# [root@clienta ~]# rbd disk-usage -p rbdpool NAME PROVISIONED USED test 10 GiB 472 MiB [root@clienta ~]# xfs_growfs /mnt/ ... data blocks changed from 128000 to 2621440
[root@clienta ~]# df -h | grep mnt /dev/rbd0 10G 306M 9.7G 3% /mnt
|
RADOS块设备镜像布局
RBD 镜像中的所有对象的名称以各个 RBD 镜像 RBD 块名称前缀字段中包含的值为开头,这可使用 rbd info
命令来显示。此前缀后是句点 (.),后跟对象编号。对象编号字段的值是 12 个字符的十六进制数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [root@clienta ~]# rbd info rbdpool/test rbd image 'test': size 10 GiB in 2560 objects order 22 (4 MiB objects) snapshot_count: 0 id: d95ce194def6 block_name_prefix: rbd_data.d95ce194def6 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten op_features: flags: create_timestamp: Wed Aug 7 03:20:13 2024 access_timestamp: Wed Aug 7 03:20:13 2024 modify_timestamp: Wed Aug 7 03:20:13 2024
|
RBD 镜像基于对象分条,并存储在 RADOS 对象存储中
