Openstack 之 备份组件Freezer

blob.png blob.png

 上面左边是我的个人微信,如需进一步沟通,请加微信。  右边是我的公众号“Openstack私有云”,如有兴趣,请关注。

    Openstack有一个组件Freezer专门负责备份,据说这个组件的核心开发是国内的九州云的开发人员。下面是2016年九州云对这个组件的介绍链接:

    http://www.99cloud.net/html/2016/jiuzhouyuanchuang_0818/213.html

    可以看到,这个组件覆盖了openstack相当部分的备份需求,包括虚拟机、卷、数据库等。上面的介绍是2016年的,不知道现在是否能支持ceph,下面通过动手实验来验证。首先找到官网对应freezer组件这一块的user guide :

    https://docs.openstack.org/freezer/queens/user/index.html

    安装部分就先跳过了,我通过kolla进行部署,直接在全局变量配置文件 /etc/kolla/globals.yml中将下面2个参数打开然后进行重新部署:

    enable_freezer: "yes"    
    enable_horizon_freezer: "{{ enable_freezer | bool }}"

    接下来继续看官网的文档,发现根据官网的操作根本行不通。后面发现这个网址:

    https://zhuanlan.zhihu.com/p/31597476

    根据这个文档完成了后面的操作。首先需要进行client的注册:

    进入 freezer api容器

    docker exec -it  freezer_api bash

    执行

    freezer-scheduler start

 报错,提示需要设置OS_AUTH_URL,编辑变量文件 :

    vi /etc/freezer-openrc.sh
    export OS_PROJECT_DOMAIN_NAME=default
    export OS_USER_DOMAIN_NAME=default
    export OS_PROJECT_NAME=admin
    export OS_TENANT_NAME=admin
    export OS_USERNAME=admin
    export OS_PASSWORD=admin
    export OS_AUTH_URL=http://192.168.1.120:5000/v3      //注,容器外部环境的端口值是35357
    export OS_INTERFACE=internal
    export OS_IDENTITY_API_VERSION=3

   以上内容保存退出,并生效这个环境变量文件:

    source /etc/freezer-openrc.sh

    再次执行

    freezer-scheduler start

    这个命令完成client的注册,如果需要多个节点都有freezer_api容器,相应节点都需要执行。

    这个时候再登录web管理界面,Disaster Restore ->Backup and Restore->Clients 里面就有相应的client记录了。


    接下来是对Nova进行备份,可以通过web界面进行备份,备份步骤如下:

    1、创建Action。登录web管理界面,Disaster Restore ->Backup and Restore->动作->Create Action ,填写相关的参数,其中,action选择backup,mode选择nova,storage选择swift(在我的环境中部署的是ceph rgw组件,具有对象存储功能),Container Name or Path 填写对象存储的Container名称比如Novabackup,填写Nova Instance ID ,Network ID可以不填,其中日志可以指定,如果不指定,日志默认在容器freezer_api中/root/.freezer/freezer.log 文件中,也可以在Advance中指定;

    2、创建Job。登录web管理界面,Disaster Restore ->Backup and Restore->Job->Create Job ,填写开始时间、结束时间,注意Clients需要选择,动作需要选择上面创建的动作,其中动作需要拖动,刚开始总是点击没有反应,后面才发现需要拖动;而且开始时间、结束时间感觉没有用,我填写了一个下午2点多开始,第二天下午2点结束的的时间,后面查看日志,发现是晚上10点20开始执行,执行时间2分多钟,感觉很诡异。

    3、创建sessions。登录web管理界面,Disaster Restore ->Backup and Restore->Sessions->Create Session ,Session的概念是可以将多个job放在一起,但真不知道有什么作用。创建session的时候和创建Job的时候一样,也有开始时间、间隔、结束时间,这里我没有填写。

    4、在Job中启动。web管理界面,Disaster Restore ->Backup and Restore->Job->选中job“动作”的下拉框,attach to session ,然后点start。

        

    在我的理解,启动job应该如果没有填写开始和结束时间,应该直接点击job start 就应该立刻开始进行action,但是实际上没有,感觉有些困惑。总之,通过web界面磕磕碰碰能够完成nova的backup操作,后面我通过web界面又建了restore的job,没有立即生效,所以决定restore还是通过命令freezer-agent完成。

    

    上面是通过web界面对nova的一个虚拟机进行备份,下面介绍通过命令freezer-agent完成nova虚拟机的备份和恢复:

    1、备份命令:

    freezer-agent --mode nova --nova-inst-id 4ad2e0fd-02ba-414e-acae-5f79e267ea96 --container Novabackup --backup-name bk_nova_1

    备份完成之后可以登录web界面查看对象存储,项目->对象存储->容器->选择上面备份的Novabackup,可以看到对象存储中备份的cirros虚拟机占用空间是1G,这个有点奇怪,原始虚拟机镜像大小是30多M,具体原因尚不知道。

    2、还原命令:

    freezer-agent --action restore --mode nova --nova-inst-id 4ad2e0fd-02ba-414e-acae-5f79e267ea96 --nova-restore-network b7e25abb-fac4-4658-be0e-f7751cfb9a88 --container Novabackup
    注意上面的命令网络参数--nova-restore-network 是必填项。

    通过同步查看日志,恢复的过程是先从对象存储中下载文件上传镜像,然后根据这个镜像创建虚拟机,创建完成后删除镜像。但是在我这个案例中,由于使用的是ceph存储,由于虚拟机创建是直接使用镜像作为父镜像,不能删除,可以找到相应的卷或者instance的卷对应的rbd,然后执行flatten操作,完成之后再将临时创建的镜像删除,具体操作记录如下:

    a、进入ceph_mon容器:

     docker exec -it ceph_mon bash

    b、找到ceph中虚拟机ID,可以通过web界面查看:

    rbd -p vms ls
    rbd -p vms info 5e60590e-f061-4f1c-9ea3-947232855328_disk

    c、对虚拟机的rbd镜像镜像flatten操作:

    rbd -p vms flatten 5e60590e-f061-4f1c-9ea3-947232855328_disk
(ceph-mon)[root@control02 /]# ceph osd pool ls
rbd
.rgw.root
default.rgw.control
default.rgw.data.root
default.rgw.gc
default.rgw.log
images
volumes
backups
vms
default.rgw.users.uid
default.rgw.buckets.index
default.rgw.buckets.data
(ceph-mon)[root@control02 /]# rbd -p vms ls
5e60590e-f061-4f1c-9ea3-947232855328_disk
ff6359fc-948d-4758-8b1b-d10f317e8b41_disk
(ceph-mon)[root@control02 /]# rbd -p vms info 5e60590e-f061-4f1c-9ea3-947232855328_disk
rbd image '5e60590e-f061-4f1c-9ea3-947232855328_disk':
size 1024 MB in 256 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.9d8324122da3
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags: 
parent: images/195b9889-a51d-4b5e-841f-8deda3f4eeab@snap
overlap: 1024 MB
(ceph-mon)[root@control02 /]# 
(ceph-mon)[root@control02 /]# 
(ceph-mon)[root@control02 /]# rbd -p vms flatten 5e60590e-f061-4f1c-9ea3-947232855328_disk
Image flatten: 100% complete...done.
(ceph-mon)[root@control02 /]#

    

    3、查看和管理备份

    

    freezer-agent --action info  可以查看已完成的备份


(freezer-api)[root@control01 ~]# freezer-agent --action info
{u'count': 33, u'bytes': 1073741824, u'name': u'Novabackup'}
{
    "container_name": "Novabackup",
    "objects_count": 33,
    "size": "1024MB"
}
{u'count': 33, u'bytes': 1073741824, u'name': u'freezer-nova'}
{
    "container_name": "freezer-nova",
    "objects_count": 33,
    "size": "1024MB"
}
{u'count': 0, u'bytes': 0, u'name': u'freezer_backups'}
{
    "container_name": "freezer_backups",
    "objects_count": 0,
    "size": "1MB"
}
(freezer-api)[root@control01 ~]#

        

猜你喜欢

转载自blog.51cto.com/yuweibing/2122111
今日推荐