为什么要引入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的特性介绍​

OpenStack云环境数据备份方案 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的总体架构图

OpenStack云环境数据备份方案 Freezer_数据备份_02

1) Freezer-web-ui 编排Job信息通过apiclient发送给Freezer-api。

2) Freezer-api 生成action 生成任务。

3) Freezer-scheduler 通过三种不同的周期任务方式调用Freezer-agent执行任务。

4) Freezer-agent 执行任务将数据存储在备份的Storage中。

Freezer 创建Job流程图

OpenStack云环境数据备份方案 Freezer_github_03

Freezer创建备份实例举例说明

任务需求:

1.   备份OpenStack 云环境中一个正在使用的云硬盘。

2.   进行周期的进行全量备份。

3.   每次备份完成后保留最后的三次全量备份,并删除以前的旧备份。

 

使用freezer-scheduler 进行备份

编辑备份所需要的任务json文件

OpenStack云环境数据备份方案 Freezer_数据_04

创建任务

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