www.cnblogs.com/ruiyqinrui

开源、架构、Linux C/C++/python AI BI 运维开发自动化运维。 春风桃李花 秋雨梧桐叶。“力尽不知热 但惜夏日长”。夏不惜,秋不获。@ruiY--秦瑞

python爬虫,C编程,嵌入式开发.hadoop大数据,桉树,onenebula云计算架构.linux运维及驱动开发.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

前言
为什么要集成ceph???
ceph官网:https://docs.ceph.com/en/latest/
关于ceph:https://blog.csdn.net/mingongge/article/details/100788388
参考连接:https://blog.csdn.net/jmilk/article/details/89503498
OpenStack 使用 Ceph 作为后端存储可以带来以下好处:

不需要购买昂贵的商业存储设备,降低 OpenStack 的部署成本
Ceph 同时提供了块存储、文件系统和对象存储,能够完全满足 OpenStack 的存储类型需求
RBD COW 特性支持快速的并发启动多个 OpenStack 实例
为 OpenStack 实例默认的提供持久化卷
为 OpenStack 卷提供快照、备份以及复制功能
为 Swift 和 S3 对象存储接口提供了兼容的 API 支持
在生产环境中,我们经常能够看见将 Nova、Cinder、Glance 与 Ceph RBD 进行对接。除此之外,还可以将 Swift、Manila 分别对接到 Ceph RGW 与 CephFS。Ceph 作为统一存储解决方案,有效降低了 OpenStack 云环境的复杂性与运维成本。

准备工作
1、新建一个虚拟机作为ceph的admin节点,配置如下
(1)双网卡
ens33:192.168.12.219
ens37:192.168.12.220
(2)4核处理器,4G内存,双硬盘60G x2
2、基础配置参考https://blog.csdn.net/qq_42666043/article/details/107668439前12步,其中第8步修改hosts文件,将openstack集群和ceph 集群都添加进去

vim /etc/hosts
#openstack集群
192.168.12.137 controller
192.168.12.133 compute
192.168.12.174 compute2
#ceph集群
192.168.12.219 ceph-admin

3、三个节点和ceph-admin节点配置时间同步
4、三个节点操作

yum install deltarpm -y
1
安装ceph软件
1、admin节点配置yum源,安装epel源,在ceph-admin,controller,compute上操作

cd /etc/yum.repos.d/
1
yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
1
2、配置ceph的yum源,在ceph-admin,controller,compute上操作

vim /etc/yum.repos.d/ceph.repo
1
写入如下配置

[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
清除缓存

yum makecache
1
3、在ceph-admin 上安装ceph-deploy管理工具 并且创建ceph工作目录

mkdir -p /etc/ceph && cd /etc/ceph/
yum -y install ceph-deploy
1
2
4、在ceph-admin上使用ceph-deploy给所有节点安装ceph

ceph-deploy install ceph-admin controller compute compute2
1
5、在ceph-admin节点进入ceph目录创建一个ceph集群

ceph-deploy new ceph-admin controller compute compute2
1
命令执行之后在ceph目录会生成相关的配置文件ceph.conf,ceph.mon.keyring

cat ceph.conf
1
[global]
fsid = 1cbc8bc2-c0a9-4442-b32f-49bd6d5179d2
mon_initial_members = ceph-admin, controller, compute, compute2
mon_host = 192.168.12.224,192.168.12.137,192.168.12.133,192.168.12.174
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
1
2
3
4
5
6
7
6、在ceph-admin节点上使用ceph-deploy创建mon

ceph-deploy mon create ceph-admin controller compute compute2
1
7、在ceph-admin节点收集密钥

ceph-deploy gatherkeys ceph-admin
1
这时在/etc/ceph下可看到如下文件

ceph.bootstrap-mds.keyring ceph.bootstrap-rgw.keyring ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring ceph.client.admin.keyring ceph.mon.keyring
ceph.bootstrap-osd.keyring ceph.conf rbdmap
1
2
3
8、在ceph-admin节点上使用ceph-deploy创建osd

ceph-deploy osd create ceph-admin:sdb controller:sdb compute:sdb compute2:sdb
1
9、在ceph-admin 节点分发配置文件

ceph-deploy admin ceph-admin controller compute compute2
1
10、给kerying添加权限 (每一个节点都要执行)

chmod +rx /etc/ceph/*
1
可能出现的错误一
ceph -s 查看集群健康状态,如果发现报错

ceph -s
1
cluster 1cbc8bc2-c0a9-4442-b32f-49bd6d5179d2
health HEALTH_WARN
clock skew detected on mon.compute2
16 pgs degraded
43 pgs stuck unclean
16 pgs undersized
1/4 in osds are down
Monitor clock skew detected
monmap e1: 4 mons at {ceph-admin=192.168.12.224:6789/0,compute=192.168.12.133:6789/0,compute2=192.168.12.174:6789/0,controller=192.168.12.137:6789/0}
election epoch 6, quorum 0,1,2,3 compute,controller,compute2,ceph-admin
osdmap e22: 4 osds: 3 up, 4 in; 43 remapped pgs
flags sortbitwise,require_jewel_osds
pgmap v45: 64 pgs, 1 pools, 0 bytes data, 0 objects
430 MB used, 299 GB / 299 GB avail
25 active+remapped
21 active+clean
16 active+undersized+degraded
2 active

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
排查思路
[root@admin ceph]# ceph osd tree

ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.29279 root default
-2 0.09270 host ceph-admin
0 0.09270 osd.0 up 1.00000 1.00000
-3 0.09270 host controller
1 0.09270 osd.1 up 1.00000 1.00000
-4 0.05370 host compute
2 0.05370 osd.2 down 0 1.00000
-5 0.05370 host compute2
3 0.05370 osd.3 up 1.00000 1.00000
1
2
3
4
5
6
7
8
9
10
发现osd.2是down状态
(1)将osd.2的状态设置为out

ceph osd out osd.2
1
(2)从集群中删除

ceph osd rm osd.2
1
(3)从CRUSH中删除

ceph osd crush rm osd.2
1
(4)删除osd.2的认证信息

ceph auth del osd.2
1
(5)在osd.2节点上操作,也就是compute上

fuser -mv /var/lib/ceph/osd/ceph-2
1
结果如下:

USER PID ACCESS COMMAND
/var/lib/ceph/osd/ceph-2:
root kernel mount /var/lib/ceph/osd/ceph-2
ceph 36657 F.... ceph-osd
1
2
3
4
kill -9 36657
1
umount /dev/sdb1
1
(6)重新初始化
登陆ceph-admin节点

cd /etc/ceph
1
初始化磁盘

ceph-deploy --overwrite-conf osd prepare compute:/dev/sdb1
1
激活所有的osd

ceph-deploy osd activate ceph-admin:/dev/sdb1 controller:/dev/sdb1 compute:/dev/sdb1 compute2:/dev/sdb1
1
查看osd树和健康状态

ceph osd tree
1
结果如下:

ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.29279 root default
-2 0.09270 host ceph-admin
0 0.09270 osd.0 up 1.00000 1.00000
-3 0.09270 host controller
1 0.09270 osd.1 up 1.00000 1.00000
-4 0.05370 host compute
2 0.05370 osd.2 up 1.00000 1.00000
-5 0.05370 host compute2
3 0.05370 osd.3 up 1.00000 1.00000
1
2
3
4
5
6
7
8
9
10
由于网络各种原因,以上可能不会一次成功,多试几次

ceph -s
1
显示health状态为ok了,如果还是error可以继续实验,留着之后排查,只是演示效果

错误二(可以与错误三一起修改)
我这里显示HEALTH_WARN

cluster 1cbc8bc2-c0a9-4442-b32f-49bd6d5179d2
health HEALTH_WARN
clock skew detected on mon.compute2
Monitor clock skew detected
monmap e1: 4 mons at {ceph-admin=192.168.12.224:6789/0,compute=192.168.12.133:6789/0,compute2=192.168.12.174:6789/0,controller=192.168.12.137:6789/0}
election epoch 66, quorum 0,1,2,3 compute,controller,compute2,ceph-admin
osdmap e90: 4 osds: 4 up, 4 in
flags sortbitwise,require_jewel_osds
pgmap v239: 64 pgs, 1 pools, 0 bytes data, 0 objects
5554 MB used, 294 GB / 299 GB avail
64 active+clean
1
2
3
4
5
6
7
8
9
10
11
可以通过命令查看具体的原因

ceph health detail
1
HEALTH_WARN clock skew detected on mon.compute2; Monitor clock skew detected
mon.compute2 addr 192.168.12.174:6789/0 clock skew 1.28346s > max 0.05s (latency 0.0026906s)
1
2
处理方法:

(1)先时间同步
其余节点和controller节点时间同步

ntpdate controller
1
(2)修改ceph配置中的时间偏差阈值,然后将ceph.conf推送到各个节点
ceph-admin节点操作

vim /ceph/ceph.conf
1
在global字段下添加:

mon clock drift allowed = 2
mon clock drift warn backoff = 30
1
2
向其他节点推送:

ceph-deploy --overwrite-conf config push controller compute
1
重启mon服务,命令如下:

systemctl restart ceph-mon.target
1
验证结果:

ceph -s
1
参考连接:https://blog.csdn.net/qq_19734597/article/details/104801412

错误三
还出现了一种错误:too many PGs per OSD (448 > max 300)

解决方法:
(1)在ceph-admin节点编辑ceph.conf配置文件

vim /etc/chrony.conf
1
添加一条语句:

mon_pg_warn_max_per_osd = 1000
1
保存退出
(2)将该配置文件推送到各个节点

ceph-deploy --overwrite-conf config push controller compute
1
(3)mon服务重启

systemctl restart ceph-mon.target
1
(4)用cep -s 命令查看

11、

ceph安装
(1)创建ceph池(在ceph-admin节点操作)
// 创建volumes池,对应Cinder服务

ceph osd pool create volumes 128
1
// 创建vms池,对应Nova服务

ceph osd pool create vms 128
1
// 创建images池,对应Glance服务

ceph osd pool create images 128
ceph osd lspools
1
2


(2)在运行glance-api节点(controller节点)上确定安装了python-rbd

rpm -qa | grep python-rbd
1


(3)运行cinder-volume (controller节点)和nova-compute(compute节点)节点上确保安装了ceph-common软件包

rpm -qa | grep ceph-common
1
ceph-common-10.2.11-0.el7.x86_64

(4)授权设置(ceph-admin节点上操作)
//创建client.cinder并设置权限

ceph auth get-or-create client.cinder mon 'allow r ' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms,allow rx pool=images'
1
//创建client.glance并设置权限

ceph auth get-or-create client.glance mon 'allow r ' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
1
(5)在ceph-admin节点上操作,将上述创建的密码分发到glance-api和cinder-volume节点上
将上述为clinet.glance client.cinder创建密码发送到运行glance-api和cinder-volume的节点(controller节点)上去
ceph-admin节点上操作

ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
1
controller节点操作

chown glance:glance /etc/ceph/ceph.client.glance.keyring
1
ceph-admin节点上操作

ceph auth get-or-create client.cinder | ssh controller tee /etc/ceph/ceph.client.cinder.keyring
1
controller节点操作

chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
1
(6)在ceph-admin节点上操作,将cinder.client发送到compute节点
运行nova-compute节点(compute节点)的服务需要使用cinder.client 的秘钥,将其秘钥传动到compute 节点上去
在ceph-admin节点操作

ceph auth get-or-create client.cinder | ssh compute tee /etc/ceph/ceph.client.cinder.keyring
1
Nov-compuet 节点需要将clinet.cinder秘钥存储到libvirt中 ,当基于ceph 后端的cinder 卷被分配到虚拟机的时候 需要访问秘钥需要做一下操作
ceph-admin 节点操作

ceph auth get-key client.cinder|ssh compute tee client.cinder.key
1
(7)在compute节点操作如下
在运行nova-compute节点(compute)上将临时秘钥文件添加到libvirt 中 然后删除
如下步骤在compute节点上操作

uuidgen
1


cat > secret.xml<<EOF
<secret ephemeral='no' private='no'>
<uuid>a8b6024c-5c7b-4107-b0ff-596db95794c8</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
EOF
1
2
3
4
5
6
7
8
virsh secret-define --file secret.xml
1


生成秘钥 a8b6024c-5c7b-4107-b0ff-596db95794c8

virsh secret-set-value --secret a8b6024c-5c7b-4107-b0ff-596db95794c8 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
1
12、

glance与ceph对接
在controller节点操作,修改glance-api.conf这个配置文件

vim /etc/glance/glance-api.conf
1
stores = rbd #改成rbd,原来是stores = file,http
rbd_store_pool = images #这行的前面注释去掉
rbd_store_user = glance #这行原来有注释,去掉注释,把原来的none,改成glance这个用户
rbd_store_ceph_conf = /etc/ceph/ceph.conf #这行前面有注释,把注释去掉
rbd_store_chunk_size = 8 #这行前面注释去掉
default_store = rbd #原来是file,改成rbd
1
2
3
4
5
6
上面修改好之后,重启glance服务

systemctl restart openstack-glance-api.service
systemctl restart openstack-glance-registry.service
1
2
查看日志:/var/log/glance/api.log 没有报错就开始进行下面步骤

cat /var/log/glance/api.log
1
在openstack的dashboard上传镜像
上传前:


在admin节点查看是否有镜像

rbd ls images
1
显示如下

13、

cinder与ceph对接
cinder:为云主机增加数据盘
openstack中创建云主机的时候可以创建一个卷,把这个卷挂到云主机上,如果云主机出现故障被删除,那么在找一个云主机,把这个卷挂到新的云主机上,数据还是会存在的,不丢失

ceph与nfs对接
(1)创建一个pv,vg(controller节点操作)

vgdisplay
1
显示如下


vgremove cinder-volumes
1
pvcreate /dev/sdc
1
vgcreate cinder-volumes /dev/sdc
1
(2)在controller节点重启cinder-volume这个服务

systemctl list-unit-files | grep cinder
1
显示如下
openstack-cinder-api.service enabled
openstack-cinder-backup.service disabled
openstack-cinder-scheduler.service enabled
openstack-cinder-volume.service enabled

systemctl restart openstack-cinder-volume
1
cd /var/log/cinder
1
cat volume.log
1
没有错说明可以创建cinder卷了

(3)在dashboard的界面创建卷

项目------>卷------>创建卷
卷名称:test01
卷类型:iscsi
大小:10G

cinder与ceph对接
在controller节点修改cinder配置文件

cd /etc/cinder
1
vim cinder.conf
1
修改内容如下

glance_api_version = 2 #之前是注释的,把注释打开,值由1变成2
enabled_backends = ceph,lvm
在文件最后一行加上如下内容
[ceph]
glance_api_version = 2
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
rbd_user = cinder
rbd_secret_uuid = a8b6024c-5c7b-4107-b0ff-596db95794c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
上面修改好了重启服务

systemctl restart openstack-cinder-volume
1
source /root/keystone_admin
1
cinder type-create ceph
1


cinder type-key ceph set volume_backend_name=ceph
1
cinder create --volume-type ceph --name ceph-volume1 2
1
在dashboard界面可以看到创建了一个卷ceph-volume1,大小是2G

或者通过命令行查看

cinder list
1

14、

Nova和ceph对接
在计算节点操作(compute节点)
修改配置文件cat /etc/nova/nova.conf 在最后一行加上如下配置

vim /etc/nova/nova.conf
1
[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = a8b6024c-5c7b-4107-b0ff-596db95794c8
disk_cachemodes="network=writeback"
inject_password=false
inject_key=false
inject_partition=-2
hw_disk_discard=unmap
1
2
3
4
5
6
7
8
9
10
11
上述修改好之后重新启动nova的配置文件

systemctl restart openstack-nova-compute
1
nova与ceph对接是需要使用raw 格式镜像,再上传之前到原qcow2格式镜像所在的目录下进行转化,转化步骤如下


qemu-img convert -f qcow2 -O raw [qcow2格式镜像名] [raw格式镜像名]
1
或者直接在在dashboad界面创建一个镜像
镜像名称centos-raw
文件—>浏览cento7-raw
镜像格式:原始

测试
1、上传一个raw格式的镜像到云上
这里选择通过命令行上传(controller节点操作)

openstack image create "centos7-raw" --file /home/image/centos7-raw --disk-format raw --container-format bare --public
1
结果如下:

2、有两种在Ceph上启动实例的方式:

《1》以镜像为基础创建可启动的卷,然后启动实例时选择boot-from-volume,选择此卷;

《2》直接使用镜像创建实例,这种用法是Havana版本后才支持的。

这里出现了几个问题:放到下面了

补充一些错误排查
1、rbd删除镜像时出错:2020-12-07 17:43:22.299535 7fad77fff700 0 cephx: verify_reply couldn’t decrypt with error: error decoding block for decryption
如图所示:

问题分析:是几个节点之间出现了比较大的时间偏差,重新做时间同步
解决方法:每个节点都执行ntpdate controller

ntpdate controller
1
2、创建好的云主机状态是active,但是点击控制台,出错如下:Booting from hard disk
Boot failed. not a bootable disk


错误分析:是镜像的问题
解决方法:重新下载正确的镜像进行上传,这里做实验我选的cirros,结果OK

3、当openstack与ceph完后对接之后,通过命令行上传镜像的速度之慢,令人咋舌!但是通过dashboard上传的镜像由于带宽不稳定总是容易发生错误。
大概有点懂了,查看了一下文件大小,发现原格式文件非常大:

在网上找到一种解决方案,仅供参考,参考链接是https://www.cnblogs.com/liawne/p/9322221.html
OpenStack使用Ceph存储,Ceph到底做了什么? - 知乎
openstack with ceph – PHPor 的Blog

具体步骤(实验有效!):
进入镜像目录文件夹

cd /home/image
1
(1)首先要更改一下glance-api文件,否则无法设置glance镜像的location

vim /etc/glance/glance-api.conf
1
show_multiple_locations = True //将前面的注释符去掉,默认是false,改为true,直接显示地址可能会有安全问题,建议更改源码,进行地址的加密和解密
1
(2)上传一个空镜像

glance image-create
1
(3)它会返回一个image 信息表,这样我们就得到了image_id:233b9a78-3226-49aa-a098-a4c9be39d3ed


(4)将真正的镜像信息import进来,将创建快照,和快照依赖

rbd -p images import centos7-raw --image=${image_id} --new-format --order 24
1
rbd -p images snap create ${image_id}@snap
1
rbd -p images snap protect ${image_id}@snap
1
(5)设置glance镜像其它属性,包括disk_format, container_format属性,否则下一步不能执行

glance image-update --name="centos7-raw" --disk-format=raw --container-format=bare ${image_id}
1


(6)设置glance镜像location url:

通过以下命令先获取FS_ID

`ceph -s | grep cluster | awk '{print $2}'`
1
设置url

glance location-add --url rbd://${FS_ID]/images/${image_id}/snap ${image_id}
1

(7)验证


4、删除rbd中的该镜像信息,先解除快照,删快照,再删除镜像信息

rbd -p images snap unprotect 镜像ID@snap
1
rbd -p images snap rm 镜像ID@snap
1
rbd -p images rm 镜像ID
1
快照、备份与恢复
快照分为全量快照(可以理解为完全复制)和增量快照(首先会做一次全量快照,之后每次快照只备份差量部分,最后会形成一条类似于VMware中的快照链),openstack采用的快照模式就是全量快照,每次复制出一个完全镜像出来,存在glance组件中配置的镜像存储位置,这个快照(镜像)在dashboard上是可见的(对用户来说是非透明的)。但是由于全量复制速度非常慢,所以不建议采取这种快照方式。而ceph作为后端存储系统,不仅支持全量备份,还支持COW(写入时复制)的增量备份,比较实用。一下内容主要是调研使用ceph的rbd命令来对存储设备进行基于快照的增量备份与恢复。
1
(1)基于虚机的快照、备份与恢复

1、新建一台虚拟机,假设该虚拟机的UUID为cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk

2、为该虚拟机创建快照

rbd -p vms snap create cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1
1
建立快照保护

rbd -p vms snap protect cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1
1
3、基于该快照clone一个新的image,创建时指定新的image存储位置,我放到vms资源池了

rbd -p vms clone cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1 vms/centos7-raw-clone1
1

这时候新image即上图的centos7-raw-clone1与cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1为父子关系,当然,cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1与cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk也为父子关系,通过如下指令可以查看:

rbd -p vms children cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1
1


rbd -p vms info vms/centos7-raw-clone1 |grep parent
1

所以要删除要话,首先要确保没孩子节点,否则要先找到最下面的孩子节点,逐层删除!
如果是快照的话,先解除保护!

4、将clone的新image独立出来,执行flatten操作,此过程类似于全量快照,速度很慢

rbd -p vms flatten centos7-raw-clone1
1


此时再次查看其parrent-children关系,此时cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1就不存在孩子节点了,centos7-raw-clone1完全独立了


NOTE:ceph也支持完全拷贝,语法如下:

rbd -p vms cp cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1 centos7-raw-copy1
1
完全拷贝相当于复制,速度很慢,而且copy不会拷贝原来的镜像信息

5、Ceph支持将一个RBD image导出(export),导出整个镜像到本地系统的一个文件中:

rbd -p vms export cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1 centos7-raw-1
1
同时,ceph还支持差量导出(export-diff),指定从某个快照点开始导出,如下语句导出从快照点snap-1到快照点snap-2的数据:

rbd -p vms export-diff cfb1b7f0-243c-4e26-912f-e9f19cf378f2_disk@snap-1 --from-snap snap-1 --snap snap-2 centos7-raw-diff.raw
1
当然与之相反的操作为import以及import-diff。通过export/import支持image的全量备份,而export-diff/import-diff实现了image的差量备份。

6、恢复

(1)导入增量的快照

rbd import centos7-raw-1 backups/centos7-raw-1
1
这里注意,如果是基于快照链进行导入,要按顺序回溯导入,即snap3到snap2,snap2再到snap1

(2)先创建一个虚拟机,然后将它的根磁盘替换为我们恢复过数据的根磁盘,然后接着是替换硬盘,这样我们便从备份文件中恢复到一个新的虚拟机了

基于卷的快照、备份与恢复
(建议基于卷做备份)

步骤上基本和基于虚机的快照,恢复与备份的操作一致!,只需要注意两点:
1、快照与备份
(1)不用执行clone和flatten操作外
(2)ceph官方文档建议建议将备份恢复到空卷中(不指定volume),不建议恢复到已有的volume中。
所以在导入之前需新建一个空卷

rbd create --size 2048 ${pool-name}/${volume-name}
1
2、恢复
(1)如果该磁盘还存在,则直接用rbd snap rollback回滚就可以了,比如要回滚到time1这个时间点:

rbd snap rollback vms/<instance_id>_disk@time1
1
(2)该磁盘已经被删掉了,要恢复该磁盘,做该备份导入,回滚
(3)将虚拟机的块设备替换成我们自己的块设备

posted on 2022-12-09 14:42  秦瑞It行程实录  阅读(291)  评论(0编辑  收藏  举报
www.cnblogs.com/ruiyqinrui