Ceph集群配置系列《四》Ceph块设备/RBD的使用


块是一个字节序列(例如,512字节的数据块)。 基于块的存储接口是使用旋转介质(如硬盘,CD,软盘甚至传统的9轨磁带)存储数据的最常用方法。 无处不在的块设备接口使虚拟块设备成为与Ceph等海量数据存储系统交互的理想选择。

Ceph 块设备也叫RBD块设备。

Ceph块设备是精简配置的,可调整大小的并存储在Ceph集群中多个OSD条带化的数据。 Ceph块设备利用RADOS功能,如快照,复制和一致性。 Ceph的RADOS块设备(RBD)使用内核模块或librbd库与OSD进行交互。

注意 内核模块可以使用Linux页缓存。 对于基于librbd的应用程序,Ceph支持RBD缓存

Ceph的块设备向内核模块或KVM(如QEMU)以及OpenStackCloudStack等基于云的计算系统(其依赖于libvirt和QEMU与Ceph块设备集成)提供高性能和无限的可伸缩性。可以使用相同的集群同时操作Ceph RADOS网关、CephFS文件系统和Ceph块设备。

要点:要使用Ceph块设备,必须有权访问正在运行的Ceph集群。

在使用Ceph块设备之前,请确保Ceph存储集群处于active + clean状态。

验证是否具有适当版本的Linux内核。 有关详细信息,请参阅OS建议

# lsb_release -a
# uname -r

命令

rbd命令可以创建,列出,修改和删除块设备映像。 还可用来克隆映像,创建快照,将映像回滚到快照,查看快照等。有关使用rbd命令的详细信息,请参阅RBD - 管理RADOS块设备(RBD)映像以获取详细信息。

创建块设备池

  1. 在Ceph节点上,使用ceph工具创建存储池(建议使用名称’rbd’)。

    ceph osd pool create rbd 128
    
  2. 在Ceph节点上,使用rbd工具初始化存储池以供RBD使用:

    rbd pool init <pool-name>
    

注意 当没有提供池名称时,rbd工具假定默认池名称为“rbd”。

创建块设备用户

除非指定,否则rbd命令将使用ID admin访问Ceph集群。 此ID允许对集群进行完全管理访问。 建议尽可能使用受限制的用户。

要创建Ceph用户,请使用ceph auth get-or-create,用户名,监视器权限和OSD权限:

# ceph auth get-or-create client.{ID} mon 'profile rbd' osd 'profile {profile name} [pool={pool-name}][, profile ...]' 

例如,要创建名为qemu的用户ID,该用户ID具有对池vms的读写访问权限和对池images的只读访问权限,请执行以下命令:

# ceph auth get-or-create client.qemu mon 'profile rbd' osd 'profile rbd pool=vms, profile rbd-read-only pool=images' 

ceph auth get-or-create命令的输出将是指定用户的密钥环,可以写入/etc/ceph/ceph.client.{ID}.keyring。

注意 通过提供–id {id}可选参数,可以在使用rbd命令时指定用户ID。

创建块设备

在将块设备添加到节点之前,必须先在Ceph存储集群中为其创建映像。 要创建块设备映像,请执行以下操作:

第一种:

# rbd create image_name --size image_size --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}] 
# rbd create foo_1 --size 4096 --image-feature layering -p rbd 

第二种:

# rbd create --size image_size {pool-name}/{image-name}
# rbd create --size 8192  test/docker_1

Tip:image_size的单位为MB;

如果在创建映像时未指定池,则它将存储在默认池rbd中。 例如,要在默认池rbd中创建存储名为foo的1GB映像,请执行以下命令:

# rbd create --size 1024 foo 

注意 必须先创建池,然后才能将其指定为源。

列出块设备映像

要列出rbd池中的块设备,请执行以下命令(即,rbd是默认池名称):

# rbd ls
docker_1
foo_1

要列出特定池中的块设备,请执行以下操作,但将{poolname}替换为池的名称:

# rbd ls {poolname} 

例如:

# rbd ls test

若要列出rbd池中延迟删除的块设备,请执行以下操作:

# rbd trash ls 

要列出特定池中延迟删除的块设备,请执行以下操作,但将{poolname}替换为池的名称:

# rbd trash ls {poolname} 

例如:

# rbd trash ls test

获取映像信息

要获取rbd池中特定映像信息,请执行以下操作,但将{image-name}替换为映像的名称:

# rbd info {image-name} 

例如:

# rbd info foo_1
rbd image 'foo_1':
	size 4 GiB in 1024 objects
	order 22 (4 MiB objects)
	id: 37a66b8b4567
	block_name_prefix: rbd_data.37a66b8b4567
	format: 2
	features: layering
	op_features: 
	flags: 
	create_timestamp: Sat Oct 12 16:57:36 2019

要获取特定池中的映像信息,请执行以下操作,但将{image-name}替换为映像名称,并将{pool-name}替换为池的名称:

# rbd info {pool-name}/{image-name} 

​ 例如:

# rbd info test/docker_1
rbd image 'docker_1':
	size 8 GiB in 2048 objects
	order 22 (4 MiB objects)
	id: 37a96b8b4567
	block_name_prefix: rbd_data.37a96b8b4567
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	op_features: 
	flags: 
	create_timestamp: Sat Oct 12 17:14:56 2019

调整块设备映像的大小

Ceph Block Device映像是自动精简配置的。 在开始向其保存数据之前,它们实际上不使用任何物理存储。 但是,它们具有使用–size选项设置的容量。 如果要增加(或减少)Ceph块设备映像的大小,请执行以下操作:

# rbd resize --size 4096 foo_1 (增加)
# rbd resize --size 1024 foo_1 --allow-shrink (减少)

删除块设备映像

要删除块设备,请执行以下操作,但将{image-name}替换为要删除的映像的名称:

# rbd rm {image-name} 

例如:

# rbd rm foo_1

要删除特定池中的块设备,请执行以下操作,但将{image-name}替换为要删除的映像的名称,并将{pool-name}替换为池的名称:

# rbd rm {pool-name}/{image-name} 

例如:

# rbd rm test/docker_1 

要延迟删除特定池中块设备,请执行以下操作,但将{image-name}替换为要移动的映像名称,并将{pool-name}替换为池的名称:

# rbd trash mv {pool-name}/{image-name} 

例如:

# rbd trash mv test/foo_1

要删除特定池中被延迟的块设备,请执行以下操作,但将{image-id}替换为要删除的映像的id,并将{pool-name}替换为池的名称:

# rbd trash rm {pool-name}/{image-id} 

例如:

# rbd trash rm test/2bf4474b0dc51 

注意:

  • 即使这个映像存在快照,或者由某一个克隆正在使用,都可以将镜像移入trash,但是不能从trash中删除。
  • 可以使用-expires-at设置延迟时间(默认为now),如果延迟时间尚未到期,则除非使用-force,否则无法删除它。

恢复块设备映像

要恢复rbd池中延迟删除的块设备,请执行以下操作,但将{image-id}替换为映像的id:

# rbd trash restore {image-id} 

例如:

# rbd trash restore 2bf4474b0dc51 

要恢复特定池中的延迟删除的块设备,执行以下操作,但是要用映像的id替换{image-id},并使用池的名称替换{pool-name}:

# rbd trash restore {pool-name}/{image-id} 

例如:

# rbd trash restore test/2bf4474b0dc51 

还可以使用–image在恢复映像时重命名映像。

例如:

# rbd trash restore test/2bf4474b0dc51 --image new-name

内核模块操作

获取映像列表

要挂载块设备映像,请先返回映像列表。

# rbd list 
docker_1
foo_1

映射块设备

使用rbd将映像映射到内核模块。 必须指定映像名称,池名称和用户名。 如果尚未加载,rbd将自动加载RBD内核模块。

# rbd device map {pool-name}/{image-name} --id {user-name} 

例如:

# rbd device map foo_1 --id admin 
/dev/rbd0

如果使用了cephx身份验证,则还必须指定密钥。 它可能来自密钥环或包含秘密的文件。

# rbd device map foo_1 --id admin --keyring /path/to/keyring 
# rbd device map docker_1 --id admin --keyfile /path/to/file 

显示已映射的块设备

要使用rbd命令显示映射到内核模块的块设备映像,请指定device list参数。

# rbd device list
id pool image snap device    
0  rbd  foo_1 -    /dev/rbd0

取消映射块设备

要使用rbd命令取消映射块设备映像,请指定device unmap参数和设备名称(即,按照惯例,与块设备映像名称相同)。

# rbd device unmap /dev/rbd/{poolname}/{imagename} 

例如:

# rbd device unmap /dev/rbd/rbd/foo

命令显示映射到内核模块的块设备映像,请指定device list参数。

# rbd device list
id pool image snap device    
0  rbd  foo_1 -    /dev/rbd0

取消映射块设备

要使用rbd命令取消映射块设备映像,请指定device unmap参数和设备名称(即,按照惯例,与块设备映像名称相同)。

# rbd device unmap /dev/rbd/{poolname}/{imagename} 

例如:

# rbd device unmap /dev/rbd/rbd/foo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值