为什么要引入Freezer
对于很多用户来说,OpenStack 环境中的数据备份一直存在着众多痛点,影响了OpenStack备份,具体包括如下几个方面:
1. NovaCinder 备份方式存在不统一性
OpenStack 数据备份过程中,我们的主要关注点在Nova 和Cinder中。
Nova备份方式,一贯做法是将该虚拟机进行快照处理。
Cinder的Volume备份目前主要有两种方式
1) 对Volume制作快照,形成Volume快照链备份数据
2) 对Volume使用Cinder-backup 的方式进行备份,针对不同的后端使用不同的备份Driver
如果我们在OpenStack的使用过程中,既要备份云主机又要备份云硬盘就需要在Nova 和Cinder上分别进行备份,无法使其由一种中间的方式来管理所有的备份
2. 备份数据不方便统一的管理
备份的数据存储比较独立,Nova Instance一般存放于Glance中,而Cinder Volume 一般存放备份数据,由不同的Driver存于不同的存储中
3. 无法进行有效的周期性备份
目前在OpenStack的云环境数据备份中,还无法对备份动作进行有效的周期性的自动化备份
4. 没有好的备份链管理
没有好的备份链管理,无法对备份数据进行整理
5. 对旧备份的删除不智能
对旧备份的删除能力,云硬盘的备份一般由手工判断等方式,进行清理,即不方便也不智能
综上所述,OpenStack环境数据备份中急需一套好的备份方案, 而Freezer在解决上述问题中也有比较好的表现,所以我们引入了Freezer
Freezer是什么?
Freezer是一套开源的备份软件,它能帮助你自动的进行数据备份和还原动作。
目前Freezer已正式引入OpenStack,从事数据备份,是OpenStack社区中一个官方项目,旨在为OpenStack提供数据备份环境的解决方案。Freezer从OpenStack Liberty 版本开始引入支持,以前的版本支持需要做微量的修改。
Freezer 可以做什么?
上面我们已经解释了Freezer已经是OpenStack的一套数据备份的解决方案,那Freezer具体可以做哪些工作呢?
目前Freezer有四种Job可供支持
BackupJob 数据备份
主要用于数据的备份任务。目前Freezer支持的数据备份有下面这些:
l FS:基于文件的数据备份
l Mysql: 对Mysql数据库进行有效的备份
l MongoDB: 对MongoDB数据库进行有效的备份
l SQL Server: 对Microsoft sql server数据库进行有效的备份
l OpenStack Novainstance(nova): 对OpenStack 云主机进行备份
l OpenStack Cinder volume(Cinderor Cindernative): 对OpenStack 云硬盘进行备份
说明: 目前Freezer 对云硬盘的备份主要有两种方式
1) Freezer自主的一套对云硬盘的备份机制(Cinder)
2) Freezer 编排Cinder Backup 的方式进行备份(Cindernative)
RestoreJob 数据还原
数据的还原任务
AdminJob 备份数据管理
对备份数据的管理,主要用户整理备份链以及旧备份的删除任务
ExecJob 命令以及脚本的执行
执行命令以及脚本
Freezer的特性介绍
对于Freezer可以做哪些,我们已经有了大概的认识,那么Freezer还有哪些额外的特性呢。
1. 多平台支持性
目前Freezer支持平台包括 Linux Based OS、 Windows、 Mac-OS、BSDBased OS 等多种平台
2. 备份数据的多存储支持
目前Freezer 备份数据可以支持的存储包括 对象存储Swift,本地挂载存储Local以及备份数据到远程的SSH server
3. 备份数据的一致性校验
Freezer对每次备份都会做数据一致性的校验
4. 备份数据的压缩以及加密
默认的压缩方式为zip,支持的压缩方式有 bzip、xz等
加密方式采用openssl的 AES-256-CFB方式
5. 备份数据可支持增量全量
备份数据可以备份数据的全量以及增量
6. 备份数据的上传带宽的限速
对备份的数据在上传到存储中时,为了不影响业务,还可以限制上传的带宽
7. 对备份链的整理
对备份的整理,方便管理员对备份数据进行有效的整理,删除旧备份,整理全量备份等。
对Freezer的能力已经有了大概的认识,那么Freezer的内部到底是如何进行工作的,下面主要说明Freezer的构成。
Freezer的组件介绍
Freezer主要有四个组件, Freezer-Agent、Freezer-Scheduler、Freezer-Web-Ui、 Freezer-Api。
l Freezer-Agent:
主要用于真正执行备份、还原等动作的组件。
l Freezer-Scheduler:
与Freezer-api进行交互以及编排Freezer-agent定期执行特定任务的组件。
l Freezer-Api:
提供Rest Api 服务,与数据库进行交互,存取Job的一些信息。
l Freezer-Web-Ui:
在Horizon中进行任务的编排,与Freezer-api进行交互发送Job的一些信息等。
Freezer的总体架构图
1) Freezer-web-ui 编排Job信息通过apiclient发送给Freezer-api。
2) Freezer-api 生成action 生成任务。
3) Freezer-scheduler 通过三种不同的周期任务方式调用Freezer-agent执行任务。
4) Freezer-agent 执行任务将数据存储在备份的Storage中。
Freezer 创建Job流程图
Freezer创建备份实例举例说明
任务需求:
1. 备份OpenStack 云环境中一个正在使用的云硬盘。
2. 进行周期的进行全量备份。
3. 每次备份完成后保留最后的三次全量备份,并删除以前的旧备份。
使用freezer-scheduler 进行备份
编辑备份所需要的任务json文件
创建任务
freezer-schedulerjob-create –file backup-cinder.json
说明:
freezer-action:
action:backup 表示备份job
cindernative-vol-id:表示使用的cindervolume的uuid
action: admin 表示使用admin job
fullbackup-rotation:3 表示保留三次备份
job-schedule:
schedule_interval:1 weeks 表示每隔一周执行该job 一次
schedule_start_date:表示第一次开始执行的时间
Freezer的不足之处
1. Freezer 社区开发人员目前过少
2. 数据备份尚未对Ceph支持
3. 目前还无法对OpenStack进行整体的备份
4. 对计算节点的服务进行监控,保护业务的不间断性
Freezer 未来的发展趋势
1. OpenStack租户级别备份
https://blueprints.launchpad.net/freezer/+spec/tenant-backup
2. Ceph的支持
https://blueprints.launchpad.net/freezer/+spec/ceph-support
3. Freezer-DROpenStack ComputeNode HA
https://github.com/openstack/freezer-dr.git
4. Python-freezerclientclient 从freezer中独立
https://github.com/openstack/python-freezerclient.git
Freezer的更多知识
1. Repository
https://github.com/openstack/freezer
https://github.com/openstack/freezer-api
https://github.com/openstack/freezer-web-ui
2. Wiki
https://wiki.openstack.org/wiki/Freezer
3. Lanchpad
https://launchpad.net/freezer
4. IRC
#openstack-freezer