赞
踩
No.1
引言
前几个章节分别讲了rgw,cephfs,nfs如何使用,本章节将开始讲解Ceph中最最重要的rbd使用方式,rbd使用方式是Ceph三种方式中最成熟的组件,多数用在配合OpenStack 中Cinder使用,作为其后端存储。
No.2
RBD使用方式
RBD使用方式有KRBD和Librbd两种方式,并且这两种方式都需要客户端支持,所以导致Windows系统无法使用RBD块设备,使用架构图如下:
No.3
KRBD使用
3.1
使用krbd映射rbd块设备
KRBD是Kernel RADOS Block Device的简称,是使用Linux Kernel中的RBD模块实现访问Ceph RBD存储。
默认CentOS Kernel没有加载RBD内核模块,使用的话需要先加载,本章节把admin节点作为Client节点,在admin节点上执行以下命令。
# lsmod |grep rbd
加载RBD内核模块,查看已经加载了RBD模块。
# modprobe rbd
# lsmod |grep rbd
rbd 83728 0
libceph 301687 2 rbd,ceph
查看rbd模板详细信息。
# modinfo rbd
filename: /lib/modules/3.10.0-862.el7.x86_64/kernel/drivers/block/rbd.ko.xz
license: GPL
description: RADOS Block Device (RBD) driver
author: Jeff Garzik
author: Yehuda Sadeh
author: Sage Weil
author: Alex Elder
retpoline: Y
rhelversion: 7.5
srcversion: 3486A669C909DC30C49A49C
depends: libceph
intree: Y
vermagic: 3.10.0-862.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: 3A:F3:CE:8A:74:69:6E:F1:BD:0F:37:E5:52:62:7B:71:09:E3:2B:96
sig_hashalgo: sha256
parm: single_major:Use a single major number for all rbd devices (default: false) (bool)
查看该模块所属于的软件包为kernel。
# rpm -qf /lib/modules/3.10.0-862.el7.x86_64/kernel/drivers/block/rbd.ko.xz
kernel-3.10.0-862.el7.x86_64
温馨
提醒
1
CentOS 6系列版本的内核没有集成RBD驱动,CentOS 7中的3.10内核中默认已经集成了RBD驱动。
创建RBD 池。
#ceph osd pool create rbd 16 16
pool 'rbd' created
查看池。
#rados lspools
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log
default.rgw.buckets.index
cephfs_metadata
cephfs_data
ganesha_data
iscsi-images
default.rgw.buckets.data
rbd
在rbd池中创建镜像文件,默认不加池名称就是使用rbd池。
#rbd create test_image --size 10240
# rbd list
test_image
查看镜像详细信息。
# rbd info test_image
rbd image 'test_image':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 86d347d3c314
block_name_prefix: rbd_data.86d347d3c314
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Fri Jul 17 21:54:05 2020
access_timestamp: Fri Jul 17 21:54:05 2020
modify_timestamp: Fri Jul 17 21:54:05 2020
映射并查看块设备信息。
# rbd map test_image
/dev/rbd0
# rbd showmapped
id pool namespace image snap device
0 rbd test_image - /dev/rbd0
取消块设映射。
# rbd unmap /dev/rbd0
# rbd showmapped
格式化rbd0。
#mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0 isize=512 agcount=16, agsize=163840 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=16 swidth=16 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=16 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
挂载rbd0。
#mount /dev/rbd0 /mnt
cd /mnt
# mkdir aa
#ls
aa
查看挂载点。
# df -hT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 967M 0 967M 0% /dev
tmpfs tmpfs 981M 4.0K 981M 1% /dev/shm
tmpfs tmpfs 981M 8.9M 972M 1% /run
tmpfs tmpfs 981M 0 981M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 2.0G 16G 12% /
/dev/sda1 xfs 1014M 176M 839M 18% /boot
tmpfs tmpfs 981M 24K 981M 1% /var/lib/ceph/osd/ceph-0
tmpfs tmpfs 981M 24K 981M 1% /var/lib/ceph/osd/ceph-1
tmpfs tmpfs 981M 24K 981M 1% /var/lib/ceph/osd/ceph-2
tmpfs tmpfs 197M 0 197M 0% /run/user/0
/dev/rbd0 xfs 10G 33M 10G 1% /mnt
3.2
开机映射rbd块设备
上一小节中提到使用rbd map可以映射成rbdx块设备,但这是手工映射,当系统重启后又需要重新手工映射,太麻烦,所以在ceph-common软件包中包括一个rbdmap的shell脚本,该脚本可对一个或多个RBD进行自动化rbd map和rbd unmap操作,该方式主要优点是由Init系统触发了在启动时自动映射和装载RBD映像(以及在关机时卸载和取消映射)
安装ceph-common。
#yum install ceph-common -y
该shell脚本的配置配置参数文件为默认为 /etc/ceph/rbdmap,该文档格式如下:
#poolname/imagename rbd_options
温馨
提醒
1
注意即使是rbd的默认池,此处的poolname不能省略。
所以如果想要开机挂载rbd块设备,可以配置如下:
#vi /etc/ceph/rbdmap
rbd/test_imageid=client,keyring=/etc/ceph/ceph.client.admin.keyring
参数不是必须的,此处也可以省略,可以直接写rbd/test_image。
设置rbdmap服务启动。
#systemctl enable rbdmap.service
# systemctl start rbdmap.service
检查是否生效。
#rbd showmapped
id pool namespace image snap device
0 rbd test_image - /dev/rbd0
#vi /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
UUID=f5edf46a-78bb-4fab-8177-5824a4a92420 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/rbd0 /mnt/ xfs noauto 0 0
温馨
提醒
1
/etc/fstab为RBD映像写入条目时,请指定“ noauto”(或“ nofail”)安装选项。这样可以防止Init系统尝试过在相关设备甚至还没有存在之前就映射设备,rbdmap.service通常是在启动顺序中很晚才触发的。
以上fstab配置中我们配置的设备名是/dev/rbd0,也可以配置成/dev/rbd/rbd/test_image 也是可以的,官方的文档中就写的是该设备名。
温馨
提醒
1
使用rbdmap挂载成功后,rbd映射操作会将映像映射到/ dev / rbdX设备,这时将触发udev规则以创建 指向实际映射设备的友好设备名称符号链接 。 /dev/rbd/pool_name/image_name。
#file /dev/rbd/rbd/test_image
/dev/rbd/rbd/test_image: symbolic link to `../../rbd0'
No.4
通过Librbd使用RBD块设备
上一章节讲解了使用krbd挂载rbd块设备,其实使用最多还是通过librbd使用rbd块设备。
比如OpenStack的存储中使用RBD是最多的,OpenStack就是通过QEMU/KVM连接到rbd块设备的,支持rbd驱动的QEMU/KVM会将对磁盘的请求转换为通过librbd访问Ceph中的rbd设备,访问的配置信息是配置在libvirt配置文件中。
在一台配置比较大的主机上安装KVM虚拟化套件,安装过程请参考网上其它文章。
完成完成后查看qemu-kvm是否支持rbd驱动。
#qemu-img --help |grep rbd
Supported formats: blkdebug blkreplay blkverify copy-on-read file ftp ftps gluster host_cdrom host_device http https iscsi iser luks nbd null-aio null-co nvme qcow2 quorum raw rbd ssh throttle vhdx vmdk vpc
使用libvirt创建一台虚拟机(可是以使用virt-manger或virt-install),并查看挂载的磁盘信息,看到使用了一个本地的磁盘文件。
# virsh list
Id Name State
----------------------------------------------------
1 centos7.0 running
#virsh domblklist 3
Target Source
------------------------------------------------
vda /var/lib/libvirt/images/centos7.0.qcow2
我们为这台虚拟机增加一个磁盘,并且这个磁盘使用的是ceph的rbd块设备。
由于ceph默认开启了cephx认证,所以QEMU/KVM得配置了密码才能访问rbd块设备,libvirt通过以下命令设置访问ceph密码。
新建一个文档,输入以个内容。
#cat > secret.xml <client.libvirt secret
EOF
将以上文档内容导入libvirt配置中生成一个secret条目。
#virsh secret-define --file secret-ceph.xml
查看生成的secret条目。
#virsh secret-list
UUID Usage
--------------------------------------------------------------------------------
a4517844-d207-4a3b-96ff-c95be532df10 ceph client.admin secret
查看条目内容。
#virsh secret-dumpxml a4517844-d207-4a3b-96ff-c95be532df10
a4517844-d207-4a3b-96ff-c95be532df10
client.admin secret
为这个条目设置密码,密码可以在ceph集群中新建或直接使用admin,本教程了为省事,直接使用的是admin的密码文件,生产环境中不建议直接使用admin密码。
#virsh secret-set-value a4517844-d207-4a3b-96ff-c95be532df10 --base64 AQBubQBfFO8IDxAA5OCm89gDwfu8rHVVLn18Ug==
查看设置是否生成。
#virsh secret-get-value ea76dd95-0bdd-4fd7-9534-c1203332e044
AQBubQBfFO8IDxAA5OCm89gDwfu8rHVVLn18Ug==
在libvirt配置文件中配置使用ceph rbdf块设备,并引用以上设置的访问密码。
在ceph中建新一个rbd块设备。
#rbd create libvirt_image --size 10240
查看rbd设备信息。
#rbd info libvirt_image
rbd image 'libvirt_image':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 36c128e7d0b17
block_name_prefix: rbd_data.36c128e7d0b17
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Sun Jul 19 12:59:15 2020
access_timestamp: Sun Jul 19 12:59:15 2020
modify_timestamp: Sun Jul 19 12:59:15 2020
编辑虚拟机xml配置文件。
#virsh edit 1
将以下配置添加到device下面的位置。
重启虚拟机。
#virsh reboot 1
查看是否配置完成,可以看到有vdb的块设备。
# virsh domblklist 1
Target Source
------------------------------------------------
vda /var/lib/libvirt/images/centos7.0.qcow2
vdb rbd/libvirt_image
也可以查看更详细的vdb块设备信息,需要开机执行以下命令。
#virsh qemu-monitor-command --hmp 1 'info block'
drive-virtio-disk0 (#block167): /var/lib/libvirt/images/centos7.0.qcow2 (qcow2)
Attached to: /machine/peripheral/virtio-disk0/virtio-backend
Cache mode: writeback
drive-virtio-disk1 (#block389): json:{"driver": "raw", "file": {"password-secret": "virtio-disk1-secret0", "pool": "rbd", "image": "libvirt_image", "driver": "rbd", "user": "admin", "=keyvalue-pairs": "[\"auth_supported\", \"cephx;none\", \"mon_host\", \"192.168.123.172:6789\"]"}} (raw)
Attached to: /machine/peripheral/virtio-disk1/virtio-backend
Cache mode: writeback
也可以通过界面查看。
进入系统查看vdb。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。