当前位置:   article > 正文

ceph 查看是否在恢复_05.Ceph使用系列之四RBD使用

a. krbd是kernel rados block device的简称,它是通过kernel中的rbd模块来实现访问

No.1

引言

前几个章节分别讲了rgw,cephfs,nfs如何使用,本章节将开始讲解Ceph中最最重要的rbd使用方式,rbd使用方式是Ceph三种方式中最成熟的组件,多数用在配合OpenStack 中Cinder使用,作为其后端存储。

No.2

RBD使用方式

RBD使用方式有KRBD和Librbd两种方式,并且这两种方式都需要客户端支持,所以导致Windows系统无法使用RBD块设备,使用架构图如下:

def4f3e1a152f865d36641b8be81e9b5.png

No.3

KRBD使用

3.1

使用krbd映射rbd块设备

KRBD是Kernel RADOS Block Device的简称,是使用Linux Kernel中的RBD模块实现访问Ceph RBD存储。

3e68aea689d6a1eb1f74478419eed54e.png

默认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块设备。

f81948e85cd6c47ad770030483b6de56.png

比如OpenStack的存储中使用RBD是最多的,OpenStack就是通过QEMU/KVM连接到rbd块设备的,支持rbd驱动的QEMU/KVM会将对磁盘的请求转换为通过librbd访问Ceph中的rbd设备,访问的配置信息是配置在libvirt配置文件中。

7adf04c89be01f07a434a7b7c08e830c.png

在一台配置比较大的主机上安装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

也可以通过界面查看。

be784e9e1a9d34ac41716a3d91e4fd01.png 4ca75bf8bc39a17044b82bde82657b08.png

进入系统查看vdb。

23c76bbfbddb53aad16e22ed84674b98.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/592814
推荐阅读
相关标签
  

闽ICP备14008679号