Ceph存储接口-Ceph RBD块存储

  • A+
所属分类:Ceph

前面我们已经介绍了Ceph存储架构并通过Ceph-Deploy快速部署了一个三节点的Ceph集群。今天我们来详细的讲解一下Ceph的存储接口之一:RBD块存储。在开始介绍RBD块存储之前、我们先完成前面一小节没有完成的工作:部署Ceph原生Dashboard。

 

1、Ceph Dashboard

Ceph Dashboard官方文档:https://docs.ceph.com/docs/master/mgr/dashboard/

Ceph Dashboard 是基于Web的内置Ceph管理和监视应用程序,用于管理集群的各个方面和对象。它作为Ceph Manager守护程序模块实现。

Ceph Luminous随附的原始Ceph Dashboard 最初是一个简单的只读视图,可查看Ceph集群的各种运行时信息和性能数据。它使用了非常简单的架构来实现最初的目标。但是,对于添加更多基于Web的管理功能的需求不断增长,以使更喜欢使用WebUI而不是使用命令行的用户更易于管理Ceph。

新的 Ceph Dashboard 模块替代了以前的模块,并向Ceph Manager添加了一个内置的基于Web的监视和管理应用程序。这个新模块的体系结构和功能源自openATTIC Ceph管理和监视工具并受其启发。SUSE openATTIC背后的团队积极推动开发,并获得了Red Hat等公司和Ceph社区其他成员的大力支持。

仪表板模块的后端代码使用CherryPy框架和自定义REST API实现。WebUI实现基于Angular / TypeScript,将原始仪表板中的功能合并,并添加了最初为独立版本的openATTIC开发的新功能。Ceph Dashboard 模块被实现为一个Web应用程序,该Web应用程序使用托管的Web服务器来可视化有关Ceph群集的信息和统计信息 ceph-mgr 。

 

随着Ceph的发展壮大、现在原生的 Ceph Dashboard 提供的功能也越来越多:

  • 多用户和角色管理:仪表板支持具有不同权限(角色)的多个用户帐户。可以在命令行和通过WebUI修改用户帐户和角色。仪表板支持各种方法来增强密码安全性,例如,通过实施可配置的密码复杂性规则,强制用户在首次登录后或在可配置的时间段后更改其密码。有关详细信息,请参见 用户和角色管理
  • 单一登录(SSO):仪表板支持使用SAML 2.0协议通过外部身份提供商进行身份验证。有关详细信息,请参阅 启用单点登录(SSO)
  • SSL / TLS支持:Web浏览器和仪表板之间的所有HTTP通信都通过SSL进行保护。可以使用内置命令创建自签名证书,但是也可以导入由CA签名和颁发的自定义证书。有关详细信息,请参见SSL / TLS支持
  • 审核:仪表盘后端可以配置为在Ceph审核日志中记录所有PUT,POST和DELETE API请求。有关 如何启用此功能的说明,参阅审核API请求
  • 国际化(I18N):仪表板可以在运行时选择的不同语言中使用。
  • 当前,Ceph仪表板能够监视和管理Ceph集群的以下方面:
  • 总体群集运行状况:显示总体群集状态,性能和容量指标。
  • 嵌入式Grafana仪表板:Ceph仪表板能够将Grafana仪表板嵌入 许多位置,以显示Prometheus模块收集的其他信息和性能指标 。有关如何配置此功能的详细信息,请参见启用Grafana仪表板的嵌入
  • 群集日志:显示群集事件和审核日志文件的最新更新。日志条目可以按优先级,日期或关键字进行过滤。
  • 主机:显示与群集关联的所有主机,连接的磁盘,正在运行的服务以及安装的Ceph版本的列表。
  • 性能计数器:显示每个正在运行的服务的特定于服务的详细统计信息。
  • 监视器:列出所有MON,其法定状态,打开的会话。
  • 监视:启用Prometheus静默的创建,重新创建,编辑和到期,列出Prometheus的警报配置以及所有已配置和触发的警报。显示触发警报的通知。
  • 配置编辑器:显示所有可用的配置选项,其描述,类型和默认值,并编辑当前值。
  • :列出所有Ceph池及其详细信息(例如,应用程序,pg自动缩放,放置组,复制大小,EC配置文件,CRUSH规则集,配额等)
  • OSD:列出所有OSD,它们的状态和使用情况统计信息,以及详细信息,例如用于读/写操作的属性(OSD映射),元数据,性能计数器和使用情况直方图。标记OSD向上/向下/向外,清除和重新称重OSD,执行清理操作,修改各种与清理相关的配置选项,选择不同的配置文件以调整回填活动的级别。列出与OSD关联的所有磁盘。设置和更改OSD的设备类别,按设备类别显示和排序OSD。在新的磁盘/主机上部署新的OSD。
  • 设备管理:列出协调器已知的所有主机。列出所有磁盘及其连接到节点的属性。显示磁盘运行状况信息(运行状况预测和SMART数据)。闪烁机柜指示灯。
  • iSCSI:列出所有运行TCMU运行程序服务的主机,显示所有映像及其性能特征(读/写操作,流量)。创建,修改和删除iSCSI目标(通过ceph-iscsi)。在登录页面上显示iSCSI网关状态以及有关活动启动器的信息。有关如何配置此功能的说明,请参阅启用iSCSI管理
  • RBD:列出所有RBD图像及其属性(大小,对象,特征)。创建,复制,修改和删除RBD映像(包括快照)并管理RBD命名空间。在全局,每个池或每个映像级别定义各种I / O或带宽限制设置。创建,删除和回滚所选映像的快照,保护/取消保护这些快照以防修改。复制或克隆快照,展平克隆的图像。
  • RBD镜像:启用和配置RBD镜像到远程Ceph服务器。列出所有活动的同步守护程序及其状态,池和RBD映像,包括其同步状态。
  • CephFS:列出所有活动文件系统客户端和关联的池,包括其使用情况统计信息。退出活动的CephFS客户端。管理CephFS配额和快照。浏览CephFS目录结构。
  • 对象网关:列出所有活动对象网关及其性能计数器。显示和管理(添加/编辑/删除)对象网关用户及其详细信息(例如配额)以及用户的存储桶及其详细信息(例如放置目标,所有者,配额,版本控制,多因素身份验证)。有关配置说明,请参阅启用对象网关管理前端
  • NFS:通过NFS Ganesha管理CephFS文件系统和RGW S3存储桶的NFS导出。有关如何启用此功能的详细信息,请参见NFS-Ganesha管理
  • Ceph Manager模块:启用和禁用所有Ceph Manager模块,更改模块特定的配置设置。

 

1.1、安装 dashboard 模块

dashboard作为mgr的模块存在,这里我们需要安装一下模块的软件包。 包的名字叫做: ceph-mgr-dashboard,直接使用ceph的yum源安装就可以:

# 安装 dashboard 模块
yum install ceph-mgr-dashboard -y

注:所有mgr节点都需要安装,不然在启用dashboard模块的时候会报错。

Ceph存储接口-Ceph RBD块存储

 

1.2、启用 dashboard

现在我们就可以来启用 dashboard 模块了、在启用 dashboard 模块之前。我们可以使用 ceph mgr module ls 查看一下模块列表。这个列表跟安没安装ceph-mgr-dashboard没关系。 我们可以看到启用的模块里没有dashboard:

Ceph存储接口-Ceph RBD块存储

我们可以执行 ceph mgr module enable dashboard 命令来启用dashboard:

ceph mgr module enable dashboard

Ceph存储接口-Ceph RBD块存储

启用之后我们可以在ceph模块列表里面看到dashboard了、启用以后就会有监听端口了,默认是8443。

 

1.3、配置 dashboard

默认情况下,dashboard的所有HTTP连接均使用SSL / TLS保护。我们有三种方案解决访问的问题:使用ceph dashboard生成自签名证书; 指定提供的CA证书; 不使用https。

1、自签名证书

这里我们采用ceph内置的命令生成并安装自签名证书:

ceph dashboard create-self-signed-cert

注:大多数Web浏览器都会抱怨此类自签名证书,并要求在建立与仪表板的安全连接之前进行明确确认。

 

2、CA签名

为了正确保护部署并消除证书警告,应使用由证书颁发机构(CA)颁发的证书。例如,可以使用类似于以下命令的命令来生成密钥对:

openssl req -new -nodes -x509 \
-subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 \
-keyout dashboard.key -out dashboard.crt -extensions v3_ca

该文件应由CA签名。一旦完成,您可以通过运行以下命令为所有Ceph管理器实例启用它:

ceph dashboard set-ssl-certificate -i dashboard.crt
ceph dashboard set-ssl-certificate-key -i dashboard.key

如果出于某种原因要求每个管理器实例使用不同的证书,则可以按如下方式包含实例名称(其中$name,ceph-mgr实例名称,通常是主机名):

ceph dashboard set-ssl-certificate $name -i dashboard.crt
ceph dashboard set-ssl-certificate-key $name -i dashboard.key

 

3、取消https

也可以通过设置以下配置值来禁用SSL:

$ ceph config set mgr mgr/dashboard/ssl false

如果仪表板将在不支持上游服务器SSL的代理后面运行,或者在不需要或不需要SSL的其他情况下运行,则这可能很有用。

 

修改配置以后我们需要重启dashboard模块来生效配置:

ceph mgr module disable dashboard
ceph mgr module enable dashboard

 

然后我们通过 netstat -nltp 命令查看端口监听情况:

Ceph存储接口-Ceph RBD块存储

 

然后我们输入 https://192.168.18.134:8443 就可以看到dashboard管理界面了:

Ceph存储接口-Ceph RBD块存储

 

如果你不想使用默认的监听端口和地址、可以通过下面的命令进行修改:

# 配置模板
ceph config set mgr mgr/dashboard/server_addr $IP
ceph config set mgr mgr/dashboard/server_port $PORT
ceph config set mgr mgr/dashboard/ssl_server_port $PORT

# 配置示例
ceph config set mgr mgr/dashboard/server_addr 192.168.18.130
ceph config set mgr mgr/dashboard/server_port 80
ceph config set mgr mgr/dashboard/ssl_server_port 443

修改完成以后记得重启dashboard模块。

ceph mgr module disable dashboard
ceph mgr module enable dashboard

 

1.4、配置用户

为了能够登录,我们需要创建一个用户帐户并将其与至少一个角色相关联, dashboard提供了一组可以使用的预定义系统角色。如administrator表示管理员。 要创建具有管理员角色的用户,可以使用以下命令:

# 配置模板
ceph dashboard ac-user-create <username> <password> administrator

# 配置示例
ceph dashboard ac-user-create z0ukun 12345678 administrator

 

然后我们就可以使用上面创建的用户登录ceph dashboard了:

Ceph存储接口-Ceph RBD块存储

更多配置内容请大家移步官方文档自行查看。

 

2、RBD块存储

前面我们提到过、Ceph是一个统一(unified)存储,在单个集群上提供了三中存储接入能力:

  • RBD块存储:RADOS BLOCK DEVICE,即RADOS块设备,提供裸设备的能力,映射到操作系统是一块磁盘;
  • RGW对象存储:RADOS GateWay,即存储对象网关,提供无限存储接入能力,提供上传PUT下载GET接口;
  • CephFS文件存储:Ceph FileSystem,即Ceph文件系统,提供文件共享存储能力,映射到操作系统是一个目录。

通俗讲:RBD为云计算平台(通常指虚拟机)提供了云盘的能力或者说为操作系统提供持久化的存储能力。同时,对于云平台而言,用户最关心的功能是数据的安全性,保障数据不会丢失;镜像分发,快速发布虚拟机;保障数据的安全,支持快照等。而RBD块正好可以提供如单镜像最大16EB,瘦分配,快照,快速克隆,内核rbd支持,多云平台支持的,增量备份,灾难恢复等能力;接下来我们开始探索RBD块存储能力吧。

注:Ceph的的块设备提供了无限的可扩展性,以高性能的 内核模块,或者KVM系列QEMU和基于云计算系统,如OpenStack的的CloudStack依赖的libvirt和QEMU与Ceph的块设备集成。您可以使用同一群集同时运行Ceph RADOS网关, Ceph文件系统和Ceph块设备。

 

2.1、RBD块存储使用

要使用RBD块存储,首先需要有一个资源池,前面我们创建了一个名为 z0ukun 的资源池,有了资源池之后,我们就可以往资源池里面创建镜像,Ceph提供了一个rbd的客户端工具来实现RBD块存储的管理。

RBD块创建

我们先创建一个100G的RBD块存储,并将其存放在 z0ukun 资源池上:

# RBD创建示例1
rbd create -p z0ukun --image rbd-demo.img --size 100G

# RBD创建示例2
rbd create z0ukun/rbd-demo.img --size 100G

通过rbd create我们创建了一个100G大小的镜像,通过-p制定了资源池的名称,--image指定镜像的名称,--size指定大小,当然也可以使用另外一种方式,如rbd create z0ukun/rbd-demo.img --size 100G,两者表示的方式是一样。镜像创建完了之后,我们通过 rbd ls 和 rbd info 来查看镜像信息:

Ceph存储接口-Ceph RBD块存储

通过上面的 info 输出信息我们可以看到,当前100G的镜像,包含有25600个object,每个object是4M,order类型是22,即2的22次方,块存储的前缀是 rbd_data.12c6cfabdcb1 开头,features提供了5个特性:layering, exclusive-lock, object-map, fast-diff, deep-flatten,由于CentOS 7.x有些特性还不支持,因此需要将其先禁用(或者创建镜像时手动指定特性,如rbd create pool/foo --size 4096 --image-feature layering )。

禁用rbd块存储的 features,exclusive-lock, object-map, fast-diff, deep-flatten 特性之间有依赖,禁用需要有顺序:

rbd feature disable z0ukun/rbd-demo.img deep-flatten
rbd feature disable z0ukun/rbd-demo.img fast-diff
rbd feature disable z0ukun/rbd-demo.img object-map
rbd feature disable z0ukun/rbd-demo.img exclusive-lock

禁用rbd块的特性之后、我们通过ceph -s命令发现集群状态为WARN,错误提示为:application not enabled on 1 pool(s)。我们继续 ceph health detail 提示我们需要执行 ceph osd pool application enable z0ukun rgw 命令把z0ukun资源池设置为enable:

Ceph存储接口-Ceph RBD块存储

 

我们执行完 ceph osd pool application enable z0ukun rgw 命令后发现集群装填已经OK了:

Ceph存储接口-Ceph RBD块存储

通过前面的操作,我们可以看到,RBD块创建的速度很快。磁盘创建之后,如何使用呢?对于云上用户而言,你需要将云盘挂载到云主机上,此时我们环境并没有提供虚拟机,该如何使用呢?Linux内核中提供了rbd模块,通过该模块,可以直接将Ceph中的RBD块在内核中映射到操作系统使用,非常便利。

 

RBD块映射

(这里有一个小坑、内核版本不能太高)

现在我们将RBD块存储映射到系统中,此时cephnode-01充当客户端的角色,当然也可以用一台专门的机器来作为客户端,需要在机器上安装python-rbd软件包,如下将块设备映射到系统中:

rbd map z0ukun/rbd-demo.img

Ceph存储接口-Ceph RBD块存储

通过上面的输出结果可以看到,块存储 z0ukun/rbd-demo.img 通过rbd内核模块将其映射为系统的一个块设备/dev/rbd0,如何查看呢?我们可以通过 rbd device list 可以看到映射的情况:

Ceph存储接口-Ceph RBD块存储

我们可以看到机器已经识别到了一个块存储(就像本地一块云盘一样),因此可以对磁盘做常规的磁盘分区,格式化,挂载到系统中,对于云盘而言,我们不建议对磁盘做分区操作,而是建议直接格式化并使用,为何呢?这是为了方便日后的扩容,通常,对于云上的扩容,我们需要经历三个步骤:

1、云盘空间扩容;

2、磁盘分区扩容,如MBR磁盘分区,MBR磁盘分区是固定静态大小,扩容后,需要扩充磁盘分区空间;

3、文件系统扩容,如ext3/ext4文件系统使用resize2fs扩容,xfs使用xfs_growfs扩容。

但是第二步扩容磁盘分区的扩容不支持在线操作,因此需要将磁盘卸载才能做操作,对于线上业务而言,这样及其不方便,因此,直接对裸设备制作文件系统是最佳的选择,下面我们针对rbd0块设备制作文件系统并将其挂载到系统中使用:

# 格式化文件系统
mkfs.ext4 /dev/rbd0

Ceph存储接口-Ceph RBD块存储

 

# 文件系统挂载
mount /dev/rbd0 /mnt
df -h /mnt

Ceph存储接口-Ceph RBD块存储

我们可以看到、挂载后就像本地的磁盘一样使用,可以向磁盘中读写数据,和日常操作磁盘完全一样。

2.2、RBD块存储扩容

随着业务的使用,磁盘的空间会随着数据的增长而不断的增长,因此需要对磁盘扩容以满足业务的增长需求,对于云盘而言,其具有弹性扩展的能力,同样RBD块存储能够支持动态扩容,接下来我们演示RBD块存储的扩容:

# RBD扩容
rbd resize z0ukun/rbd-demo.img --size 120G

# 查看RBD状态
rbd info z0ukun/rbd-demo.img

Ceph存储接口-Ceph RBD块存储

 

我们可以看到,此时镜像文件已经扩容至120G,包含30720个objects。此时底层存储空间已经扩容,我们登录至客户端操作系统查看其空间大小,空间会自动被操作系统所识别到,如下通过 fdisk -l 校验磁盘空间的情况:

# 查看磁盘状态
fdisk -l /dev/rbd0

# 查看文件系统挂载状态
df -h /dev/rbd0

Ceph存储接口-Ceph RBD块存储

 

通过上面的输出可以看到操作系统的空间已经完成扩容至120G;但是此时文件系统依旧没有识别到,我们可以通过 df -h 查看校验。那么,如何让文件系统能识别到扩容的空间呢?这里需要分情况,如果针对磁盘做了分区,如MBR或GPT则需要先扩容分区表,然后再文件系统中扩容,由于前面是直接对磁盘制作文件系统,因此可以直接在文件系统层面做扩容,根据文件系统的不同,如果是ext3/ext4直接使用 resize2fs 扩容,如果是xfs则使用 xfs_growfs 扩容:

# 刷新磁盘状态
resize2f /dev/rbd0

# 查看文件系统挂载状态
df -h /dev/rbd0

Ceph存储接口-Ceph RBD块存储

可以看到磁盘文件系统空间已成功扩容至120G,通过上面整个RBD扩容空间的过程。现在我们已经清楚云平台块存储扩容的机制了,因为这些扩容实际是调用了底层的RBD块存储接口快速完成存储空间的扩容。

 

2.3、RBD快照

云平台针对块存储一般都有提供快照的功能,快照是块存储某个时间点的镜像状态文件,因此可以针对块存储做快照,将某个时间存储状态数据状态保留下来,当数据出现异常的时候可以做到快速恢复。

Ceph RBD块存储无法感知到块存储中建立的文件系统,因此创建快照前需要确保文件系统的一致性,如果文件系统此时出现异常,制作的快照也将不可用,因为RBD是在底层的块级别针对块存储制作的快照。快照除了对数据具有保护的功能之外,另外一个非常重要的功能就是copy-on-write,通过快照实现快速的克隆,克隆出来的镜像部分可以写入数据,从而实现镜像的快速部署和分发,这对于云中秒级部署将非常便利。下面我们先在之前挂载的块存储中写入部分数据:

cp /etc/fstab /mnt
cp /etc/passwd /mnt
ls /mnt

Ceph存储接口-Ceph RBD块存储

 

然后我们将RBD镜像制作成一个快照,快照的名称为 rbd-demo.img-snapshot ,此时快照中将会报保存块存储的数据;制作完成之后我们通过 rbd snap list z0ukun/rbd-demo.img 查看快照的创建情况:

# 创建快照
rbd snap create z0ukun/rbd-demo.img@rbd-demo.img-snapshot

# 查看快照状态
rbd snap list z0ukun/rbd-demo.img

Ceph存储接口-Ceph RBD块存储

从上图我们可以看到已创建快照的名称、空间大以及创建快照的时间。如果此时问加你系统中有文件被删除了,我们就可以通过快照来进行快速恢复(感兴趣的同学可自行测试一下,测试可以手动删除fstab文件,然后开始回滚恢复):

# 快照恢复
rbd snap rollback z0ukun/rbd-demo.img@rbd-demo.img-snapshot

如果我们执行了快照恢复操作、快照将会覆盖原有镜像的内容,根据数量的不同,执行恢复的时长也有所不同。这里需要注意的是:如果执行完毕之后,再次进入到 /mnt 目录发现文件 fstab 文件并未恢复,这是因为执行恢复之后,需要将磁盘重新挂载才能识别到,另外恢复的过程中可能会造成文件的损坏。

注:建议执行快照恢复时,先将文件系统卸载,然后再执行数据恢复动作。

 

快照如果不需要了、我们可以将快照删除,避免占用过多的存储空间:

# 快照删除
rbd snap remove z0ukun/rbd-demo.img@rbd-demo.img-snapshot

Ceph存储接口-Ceph RBD块存储

 

2.4、RBD快速克隆

如果你有使用过云平台的经验,你会发现创建一台云主机少则10多秒慢则1分钟即可实现台虚拟机的快速交付,对此,你是否会对其为何能在短时间内快速创建好虚拟机而产生疑问呢?这就是我们这个章节需要介绍的内容—Ceph RBD Copy-On-Write的特性,copy-on-write也简称COW特性,什么是copy-on-write呢,我们先来看下图:

Ceph存储接口-Ceph RBD块存储

1、镜像先将其制作一个快照,快照是静态内容,不可往快照中写内容,快照可称之为父镜像;

2、基于快照克隆clone一个新的镜像出来,克隆后的镜像和快照之间存在父子关系,可以写;

3、因此,Copy-On-Write即是在镜像创建出来的一个可写层,因此创建速度非常快,写部分在克隆子镜像中,读镜像部分在原来快照内

4、由于克隆后的镜像和父镜像存在依赖关系,即克隆后的镜像由两部分组成:快照+克隆写层,两部分内容共同组成镜像,如果快照不小心被删除怎么办?如果快照删除,克隆出来的子镜像将全部不克隆,因此需要将镜像保护(protect)起来,防治镜像被误删除,下图是创建COW的操作过程:

Ceph存储接口-Ceph RBD块存储

 

现在我们来演示一下COW的特性,首先我们把/etc目录拷贝到rbd镜像中:

cp -r /etc /mnt
ls /mnt

Ceph存储接口-Ceph RBD块存储

然后我们针对RBD块制作一个快照,COW镜像需要依赖于快照:

# 创建快照
rbd snap create z0ukun/rbd-demo.img@copy-on-write-snapshot

# 查看快照信息
rbd snap ls z0ukun/rbd-demo.img

Ceph存储接口-Ceph RBD块存储

 

为了防止快照被误删除,我们需要给镜像加一层保护层;添加 protect 保护层之后,删除后会提示报错,由于已经被保护了,因此无法删除:

# 快照保护
rbd snap protect z0ukun/rbd-demo.img@copy-on-write-snapshot

# 快照删除
rbd snap rm z0ukun/rbd-demo.img@copy-on-write-snapshot

Ceph存储接口-Ceph RBD块存储

 

快照+保护配置完成之后,我们就可以基于快照来做克隆clone的操作了:

# 快照克隆
rbd clone z0ukun/rbd-demo.img@copy-on-write-snapshot z0ukun/copy-on-write-demo.img --image-feature layering

# 查看快照状态
rbd info z0ukun/copy-on-write-demo.img

Ceph存储接口-Ceph RBD块存储

克隆出来的镜像和普通的镜像使用上没有任何区别,具有扩容,快照等特性的能力;最大的区别是克隆的镜像需要依赖于镜像,读部分的内容到快照中读取,写部分在COW层实现写入,我们可以通过 info 查看克隆的镜像,可以看到在 parent 指定了该镜像依赖的父镜像。

 

此时我们可以将镜像挂载起来,可以看到镜像中包含原始快照的数据内容。切记,不需要重新格式化,克隆后的镜像会包含原始镜像的文件系统和数据,可以看到克隆的镜像包含了原始数据的内容:

# 镜像映射
rbd map z0ukun/copy-on-write-demo.img

# 查看镜像状态
rbd device ls

# 镜像挂载
mount /dev/rbd1 /media
ls -l /media

Ceph存储接口-Ceph RBD块存储

通过克隆的方法,可以提前将镜像制作好,将所需要的软件包部署在镜像中,然后将镜像制作快照并添加protect保护标志位,之后就可以基于快照实现快速克隆的需求。

这里我们可以通过下面的命令快速克隆5个镜像模拟镜像快速创建的能力:

for i in {1..4}
do
  rbd clone z0ukun/rbd-demo.img@copy-on-write-snapshot z0ukun/fast-deploy-vm-${i}.img --image-feature layering
done

Ceph存储接口-Ceph RBD块存储

我们可以看到创建的速度非常快,几乎可以在秒级的速度完成镜像的创建过程。一个镜像可能会创建出很多个克隆的副本,如何查看快照克隆出来的副本情况呢?查看快照克隆出来的子镜像,可以通过children追踪到快照克隆出来的子镜像:

# 查看子镜像状态
rbd children z0ukun/rbd-demo.img@copy-on-write-snapshot

Ceph存储接口-Ceph RBD块存储

 

虽然克隆出来的镜像速度发布非常快,但是缺点也同样明显:如果镜像的快照损坏了,基于快照克隆出来的所有子镜像均不可用,如何解除子镜像和快照之间的关系呢?我们需要将其合并(flatten),如下我们将子镜像和快照进行合并:

# 镜像合并
rbd flatten z0ukun/copy-on-write-demo.img

Ceph存储接口-Ceph RBD块存储

 

合并完毕后,子镜像和父惊现过之间的依赖关系将取消,两者都是独立关系,可以通过info确认我们可以看到之前包含parent字段已经消失不见:

rbd info z0ukun/copy-on-write-demo.img

Ceph存储接口-Ceph RBD块存储

 

2.5、RBD回收站

云平台一般都提供一个回收站的功能:块存储删除之后,不会立即将其进行回收,而是将其存放到回收站中;根据存放的策略,比如存放7天;回收站存放期间,用户可以根据需要将其进行回收;如果不回收,回收策略到期后,将会自动回收。Ceph RBD同样也为我们提供了回收站 trash 的功能。

常规的rm删除操作接口,数据将会直接回收,回收后将无法找回,这也是默认常规的操作:

# 镜像删除
rbd rm z0ukun/fast-deploy-vm-1.img

# 查看回收站状态
rbd trash ls z0ukun

Ceph存储接口-Ceph RBD块存储

 

如果需要将其放入到回收站应该怎么操作呢?我们需要使用到rbd trash mv的功能,这个操作会将镜像临时放入到回收站中,放入回收站后可以设置一个有效期,此时镜像被移动到回收站,我们可以在回收站中查看到镜像:

# 把镜像移动到回收站
rbd trash move --expires-at 2020-04-25 z0ukun/fast-deploy-vm-2.img

# 查看回收站状态
rbd trash ls z0ukun

Ceph存储接口-Ceph RBD块存储

 

如果镜像还需要使用,我们可以将镜像进行回收,回收的时候指定新的镜像名称:

# 镜像回收
rbd trash restore z0ukun/3ba248d946734 --image restore-form-trash.img

# 查看镜像状态
rbd -p z0ukun list

Ceph存储接口-Ceph RBD块存储

通过回收站trash的功能,可以防止镜像被误删除,应用在公有云上可以防止用户为及时续费而机器被误删除,导致业务不可用,因此trash的功能尤为重要。好了、到这里关于Ceph分布式存储接口-RBD块存储的功能和操作都已经介绍完毕了,后面我们继续介绍Ceph分布式存储接口-RGW对象存储。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: