【分布式技术】分布式存储ceph之RBD块存储部署

发布时间:2024年01月18日

目录

创建 Ceph 块存储系统 RBD 接口

服务端操作

1、创建一个名为 rbd-demo 的专门用于 RBD 的存储池

2、将存储池转换为 RBD 模式

3、初始化存储池

4、创建镜像

5、在管理节点创建并授权一个用户可访问指定的 RBD 存储池

6、修改RBD镜像特性,CentOS7默认情况下只支持layering和striping特性,需要将其它的特性关闭

7、将用户的keyring文件和ceph.conf文件发送到客户端的/etc/ceph目录下

客户端操作

1、安装 ceph-common 软件包

2、执行客户端映射

3、查看映射

4、格式化并挂载

在线扩容

?快照回滚

快照分层与展平?

?镜像导入导出

#在客户端操作 取消映射

//在服务端导出镜像 模拟清空? 导入镜像

#在客户端重新映射并挂载


创建 Ceph 块存储系统 RBD 接口

服务端操作

1、创建一个名为 rbd-demo 的专门用于 RBD 的存储池

2、将存储池转换为 RBD 模式

3、初始化存储池

4、创建镜像

两种语法格式都可以
rbd create -p <存储池名称> --image <镜像名称> --size 10G

rbd create <存储池名称>/<镜像名称> --size 10G
[root@admin ~]# cd "/etc/ceph"
[root@admin ceph]# ceph osd pool create myrbd 128
pool 'myrbd' created

[root@admin ceph]# ceph osd pool application enable myrbd rbd
enabled application 'rbd' on pool 'myrbd'

[root@admin ceph]# rbd pool init -p myrbd

[root@admin ceph]# rbd create -p myrbd --image demon1.img --size 10G


[root@admin ceph]# rbd ls -l -p myrbd
NAME       SIZE   PARENT FMT PROT LOCK 
demon1.img 10 GiB          2 
          
[root@admin ceph]# rbd info myrbd/demon1.img

客户端使用 RBD 有两种方式:
●通过内核模块KRBD将镜像映射为系统本地块设备,通常设置文件一般为:/dev/rbd*
●另一种是通过librbd接口,通常KVM虚拟机使用这种接口。

本例主要是使用Linux客户端挂载RBD镜像为本地磁盘使用。开始之前需要在所需要客户端节点上面安装ceph-common软件包,因为客户端需要调用rbd命令将RBD镜像映射到本地当作一块普通硬盘使用。并还需要把ceph.conf配置文件和授权keyring文件复制到对应的节点。

5、在管理节点创建并授权一个用户可访问指定的 RBD 存储池

语法格式:
ceph auth get-or-create client.<用户名> osd "allow * pool=<存储池名>" mon "allow r" > /etc/ceph/<用户名>.keyring
[root@admin ceph]# ceph auth get-or-create client.test-rbd osd "allow * pool=myrbd" mon "allow r" > test-rbd.keyring

6、修改RBD镜像特性,CentOS7默认情况下只支持layering和striping特性,需要将其它的特性关闭

[root@admin ceph]# rbd feature disable myrbd/demon1.img object-map, fast-diff, deep-flatten
[root@admin ceph]# rbd info myrbd/demon1.img

7、将用户的keyring文件和ceph.conf文件发送到客户端的/etc/ceph目录下

[root@admin /etc/ceph]#scp test-rbd.keyring root@client:/etc/ceph/

客户端操作

1、安装 ceph-common 软件包

//linux客户端操作
#安装 ceph-common 软件包
yum install -y ceph-common

2、执行客户端映射

语法格式
rbd map <存储池名>/<镜像名称> --keyring /etc/ceph/<用户名>.keyring --user <用户名>

3、查看映射

rbd showmapped
rbd device list

4、格式化并挂载

语法格式:
mkfs.xfs /dev/rbd*  ##针对xfs文件系统
mount /dev/rbd* <本地挂载点>
[root@client ceph]#rbd map myrbd/demon1.img --keyring test-rbd.keyring --user test-rbd
/dev/rbd0
[root@client ceph]#rbd showmapped

[root@client ceph]#rbd device list

[root@client ceph]#mkfs.xfs /dev/rbd0

[root@client ceph]#mkdir -p /test/rbd
[root@client ceph]#mount /dev/rbd0 /test/rbd/
[root@client ceph]#df -hT

在线扩容

在管理节点调整镜像的大小
rbd resize <存储池名>/<镜像名称> --size 20G

在客户端刷新设备文件(扩容镜像后在线刷新)
xfs_growfs /dev/rbd0		#刷新xfs文件系统容量
resize2fs /dev/rbd0			#刷新ext4类型文件系统容量

?快照回滚

?

快照管理
对 rbd 镜像进行快照,可以保留镜像的状态历史,另外还可以利用快照的分层技术,通过将快照克隆为新的镜像使用。

//在客户端写入文件
echo 1111 > /data/bb/11.txt
echo 2222 > /data/bb/22.txt
echo 3333 > /data/bb/33.txt

//在管理节点对镜像创建快照
rbd snap create --pool rbd-demo --image rbd-demo1.img --snap demo1_snap1
rbd snap create <存储池名>/<镜像名称>@<快照名称>

可简写为:
rbd snap create rbd-demo/rbd-demo1.img@demo1_snap1

//列出指定镜像所有快照
rbd snap list rbd-demo/rbd-demo1.img
rbd snap list <存储池名>/<镜像名称>

#用json格式输出:
rbd snap list rbd-demo/rbd-demo1.img --format json --pretty-format

//回滚镜像到指定
在回滚快照之前,需要将镜像取消镜像的映射,然后再回滚。


#在客户端操作 取消映射
rm -rf /data/bb/*
umount /data/bb
rbd unmap rbd-demo/rbd-demo1.img
rbd unmap <存储池名>/<镜像名称>

#在管理节点操作
rbd snap rollback rbd-demo/rbd-demo1.img@demo1_snap1
rbd snap rollback <存储池名>/<镜像名称>@<快照名称>

#在客户端重新映射并挂载
rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount
mount /dev/rbd0 /data/bb
ls /data/bb				#发现数据还原回来了

//限制镜像可创建快照数
rbd snap limit set rbd-demo/rbd-demo1.img --limit 3

#解除限制:
rbd snap limit clear rbd-demo/rbd-demo1.img

//删除快照
#删除指定快照:
rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap1

#删除所有快照:
rbd snap purge rbd-demo/rbd-demo1.img

?

?

?

快照分层与展平?

快照分层支持用快照的克隆生成新镜像,这种镜像与直接创建的镜像几乎完全一样,支持镜像的所有操作。唯一不同的是克隆镜像引用了一个只读的上游快照,而且此快照必须要设置保护模式。

#快照克隆
1)将上游快照设置为保护模式:
[root@admin /etc/ceph]#rbd snap create myrbd/demon1.img@666.snap1

[root@admin /etc/ceph]#rbd snap protect myrbd/demon1.img@666.snap1

[root@admin /etc/ceph]#rbd snap list myrbd/demon1.img

2)克隆快照为新的镜像
[root@admin /etc/ceph]#rbd clone myrbd/demon1.img@666.snap1 --dest myrbd/demon666.img

rbd ls -p myrbd

3)命令查看克隆完成后快照的子镜像
rbd children myrbd/demon1.img@666.snap1
通常情况下通过快照克隆而得到的镜像会保留对父快照的引用,这时候不可以删除该父快照,否则会有影响。
rbd snap rm myrbd/demon1.img@666.snap1
#报错 snapshot '666.snap1' is protected from removal.

如果要删除快照但想保留其子镜像,必须先展平其子镜像,展平的时间取决于镜像的大小
1) 展平子镜像
[root@admin /etc/ceph]#rbd flatten myrbd/demon666.img


2)取消快照保护
[root@admin /etc/ceph]#rbd snap unprotect myrbd/demon1.img@666.snap1

3)删除快照
[root@admin /etc/ceph]#rbd snap rm  myrbd/demon1.img@666.snap1


rbd ls -l -p rbd-demo			#在删除掉快照后,查看子镜像依然存在
[root@admin /etc/ceph]#rbd snap create myrbd/demon1.img@666.snap1
[root@admin /etc/ceph]#rbd snap list myrbd/demon1.img

[root@admin /etc/ceph]#rbd snap protect myrbd/demon1.img@666.snap1
[root@admin /etc/ceph]#rbd snap list myrbd/demon1.img

[root@admin /etc/ceph]#rbd clone myrbd/demon1.img@666.snap1 --dest myrbd/demon666.img
         
[root@admin /etc/ceph]#rbd children myrbd/demon1.img@666.snap1
myrbd/demon666.img

[root@admin /etc/ceph]#rbd flatten myrbd/demon666.img

[root@admin /etc/ceph]#rbd ls -l -p myrbd
         
[root@admin /etc/ceph]#rbd snap list myrbd/demon1.img

[root@admin /etc/ceph]#rbd snap unprotect myrbd/demon1.img@666.snap1
[root@admin /etc/ceph]#rbd snap list myrbd/demon1.img

[root@admin /etc/ceph]#rbd snap list myrbd/demon1.img
[root@admin /etc/ceph]#rbd ls -l -p myrbd

?

?镜像导入导出

#在客户端操作 取消映射

[root@client ceph]#umount /test/rbd ##解挂

[root@client ceph]#rbd unmap myrbd/demon1.img  ##取消映射

//在服务端导出镜像 模拟清空? 导入镜像

//导出镜像
[root@admin /etc/ceph]#rbd export myrbd/demon666.img /opt/demon666.img.tar

rbd export <存储池名>/<镜像名称>  <自定义镜像导出文件名>

//导入镜像
#卸载客户端挂载,并取消映射


#清除镜像下的所有快照,并删除镜像
rbd snap purge myrbd/demon666.img
rbd rm <存储池名>/<镜像名称>

rbd ls -l -p myrbd

#导入镜像
rbd import /opt/demon666.img.tar  myrbd/demon666.img
rbd import <镜像之前导出的文件路径> <存储池名>/<镜像名称>  


rbd ls -l -p myrbd

#在客户端重新映射并挂载

rbd map <存储池>/<镜像> --keyring /etc/ceph/ceph.client.<用户>.keyring --user <用户>

文章来源:https://blog.csdn.net/liu_xueyin/article/details/135660726
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。