Trove 快照用于支持DbaaS 备份,复制等功能。在Trove API (guest_agent)上将支持本功能。本功能将能够支持快照,从而用来进行副本设置,主数据库克隆和备份,以及数据恢复。
目前有许多备份的设计,诸如带有master-data选项的mysqldump,Perconas' XtraBackup,Openstack的卷快照等。 每一种设计都有各自的优点和缺点。本设计提供了一种插件式的接口。随着功能的开发,他们能够互相协作而无需改动代码。
设计的目标插件式的接口该接口能够降低快照实现层复杂度,从而能够支持多快照机制,诸如 Xtrabackup, mysqldump, Openstack的卷支持等。该接口允许多种快照的实现,从而能够定义不同层次的服务。例如:      Xtrabackup 的高可用性      mysqldump 的更底层的服务 对备份信息的数据库支持例如名字,时间的备份,当前快照的状态信息,租户信息等。 使用ACL机制使用ACL机制来支持备份的安全性和备份路径。
快照的存储产生的备份将被上传到Swift 中去。Trove将向 Swift 提供一个鉴权令牌。 快照将以用户的swift账号的身份保存在一个容器(container)中。当创建一份快照时,必须具有一定的Swift角色。
ACL 设计ACL使用Openstack存储的ACL。 ACL允许我们对单个对象和容器(container)有更高的控制而不需要对容器(container)有全部的读写权限。在容器的底层权限被授予,在角色层被获取。 当用户使用他们所在的角色创建一个容器时,通过增加其他角色到这个容器上,其他用户能够被授予该权限。在我们的设计中,使用了以下的继承模型。下图中,每个租户将有一个 BackupManager 的角色 ,许多用户从属于该BackupManager角色。为了从虚拟机的数据库中恢复数据,每个用户有在swift中建立快照以及访问他们的的能力。在使用前,这些用户必须被具有管理员权限的用户预先授予BackupManager角色. 通过这种方式我们能够保证安全和租户之间的隔离。请注意: 用户在尝试备份和恢复数据前,必须授予BackupManager role一旦被授予BackupManager角色,一个用户能够使用他们自己的凭证创建自己的备份和恢复先前备份的数据。而且,这些凭证能够操作的备份列表只能够被这个用户从属的一个租户获取。
插件式接口为了支持各种不同的快照机制,一个插件式接口貌似是最合理的方法.在 ~/reddwarf/reddwarf/guestagent/plugins 目录下一个目录被创建,该目录将包含各式各样的快照实现(例如:xtrabackup, mysqldump, 卷快照等)

数据库 设计为了支持快照功能,在Trove 数据库中将创建一张数据库表,该表包含了以下信息:
TENANT_ID决定谁能够从Swift访问哪个快照,TENANT_ID, ROLE_ID, USER, 和 PASSWORD 将是一个基本的决定你是否能够从Swift访问一个容器的因数。
Name快照的名字,具有唯一性。
Size of the snapshot快照的整个大小,包含目录以及下面的文件。
Timestamp of the snapshot快照的时间戳,反映了快照与哪个时间点上的数据库吻合。
State of the snapshot快照的状态,在整个快照的流程中,该值被代理所更新以便反映快照的实时状态,可能的状态包括:      Started   API 和 代理接受到请求消息,开始流程      Running  代理在执行快照的流程中      Completed 快照流程已经结束, 容器已经在Swift中      Failed    一个错误已经发生,失败。
下图的数据库记录的例子DROP TABLE IF EXISTS snapshot;CREATE TABLE backups (       id             int(10)unsigned NOT NULL auto_increment,       name           varchar(128) NOT NULL DEFAULT '',       location       varchar(1024) NOT NULL DEFAULT '',       tenant_id      varchar(36) NOT NULL DEFAULT '00000000-0000-0000-000000000000',       bkup_type      varchar(32) NOT NULL DEFAULT '',       size           float unsigned not null DEFAULT 0.0,       deleted        tinyint(1) NOT NULL DEFAULT 0,       created_ts     timestamp NOT NULL DEFAULT "0000-00-00 00:00:00",       deleted_ts     timestamp NOT NULL DEFAULT "0000-00-00 00:00:00",       state          varchar(32) NOT NULL DEFAULT 'started',       last_updated   timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,       PRIMARY KEY (id),       UNIQUE KEY (name, tenant_id),       KEY idx_location(location),       KEY idx_bkup_type(bkup_type)) ENGINE=ENGINE_INNODB DEFAULT CHARSET=utf8;
Xtrabackup 的状态图使用Xtrabackup的备份请求图:

使用Xtrabackup的恢复请求图:

备份列表图:


API 规范Create Backup作为一个Trove用户,需要有能力创建存储于Swift账号的数据库实例的备份。有了该能力,就能够获取数据库实例的所有SQL数据备份POST /backups  创建一个新的实例备份。 参数name –可选 -instanceid – 实例IDdescription – 可选 –备份的描述  请求消息体结构:

{    "backup" : {        "name":"My Backup"        "instanceid":"4c6ad8e3-d857-46e2-aca4-dcbbfdab8526"        "description" : "Backups for my production database."    }}

应答消息结构:

{    "backup": {        "id" : "56b80958-cf34-4e9e-b5b0-b84fbe5e4ecc"        "name" : "My Snapshot",        "locationRef" : "https:/<service>/<api version>/<account>/<container>/<snapshot>",        "status" : "STARTED"     }}

List All Backups作为一个Trove用户,需要有能力查询所有针对所有实例的可用的备份列表,以便我们能够很轻易的定位我以前存储的所有实例的数据。

GET /backups List all backups for a given tenant id. 应答消息结构:

{    "backups": [        {            "id" : "56b80958-cf34-4e9e-b5b0-b84fbe5e4ecc"            "name" : "My Backup",            "description" : "Backups for my production database."            "locationRef" : "https:/<service>/<api version>/<account>/<container>/<backup>",            "instanceRef" : "https://service/v1.0/1234/instances/28d1b8f3-172a-4f6d-983d-36021508444a"            "created" : "2012-03-28T21:31:02Z"",            "updated" : "2012-03-28T21:34:25Z",            "status" : "COMPLETED",        },        {          "id" : "56b80958-cf34-4e9e-b5b0-b84fbe5e4eea"            "name" : "My other backup",            "description" : "Backups for my production database."            "locationRef" : "https:/<service>/<api version>/<account>/<container>/<backup>",            "instanceRef" : "https://service/v1.0/1234/instances/28d1b8f3-172a-4f6d-983d-36021508444a"            "created" : "2012-03-28T21:31:02Z"",            "updated" : "2012-03-28T21:34:25Z",            "deleted" : "2012-03-28T21:34:25Z",            "status" : "DELETED",        },         {          "id" : "45x453467-df99-4j5k-a4a5-v873455e4wwt"            "name" : "My other backup",            "description" : "Backups for my production database."            "locationRef" : "https:/<service>/<api version>/<account>/<container>/<backup>",            "instanceRef" : "https://service/v1.0/1234/instances/28d1b8f3-172a-4f6d-983d-36021508444a"            "created" : "2012-03-28T21:31:02Z"",            "updated" : "2012-03-28T21:34:25Z",            "status" : "FAILED",        }    ]}

List Backups for a Specified Instance作为一个Trove用户,需要有能力查询一个针对单个实例的可用的备份列表,以便我们能够很轻易的定位我以前存储的特定实例的数据。 GET /instance/instanceId/backups Return the list of backups for the instance 应答消息结构同获取所有的列表的应答消息结构 Delete Backup作为一个Trove用户,需要有能力删除一个或者多个备份列表,以便我们能够很轻易的从Swift账号删除我们不再需要的数据以节省时间很资金。DELETE /backups/{uid} Delete specified backup Create Instance from Backup作为一个Trove用户,需要有能力从一个快照中创建一个新的Trove实例,以便我们能够很快的从已经存在的数据库实例中创建一个新的拷贝。POST /instances Creates a new database instance. New AttributessnapshotRef -Response Codes: same as current callError Codes: same as current callDescription:
请求消息结构:

{    "instance": {    "flavorRef": "https://service//v1.0/1234/flavors/1",    "name": "my_db_inst",    "volume": {        "size": 2    }    "restorePoint" : {        "backupRef":  "https://service/v1.0/1234/snapshots/56b80958-cf34-4e9e-b5b0-b84fbe5e4ecc" | '56b80958-cf34-4e9e-b5b0-b84fbe5e4ecc'    }} 应答消息结构:{    "instance": {        "created": "2012-01-25T21:53:09Z",        "flavor": {        "id": "1",        "links": [         ...        ]    },    "hostname": "192.168.1.1",    "id": "dea5a2f7-3ec7-4496-adab-0abb5a42d635",    "links": [           ...    ],    "name": "my_db_inst",    "status": "BUILD",    "updated": "2012-01-25T21:53:10Z",    "volume": {        "size": 2    }}

Trove系列(四)—Trove的快照功能介绍的更多相关文章

  1. Trove系列(六)——Trove的安全组功能和Trove的卷数据快照功能介绍

    Trove的安全组功能功能描述用户目前没有办法在Trove guest 实例上配置安全组 和 安全组规则. 我们建议按照以下指导原则创建一个简单的安全组操作规则.本功能作为Trove 的附加功能实现( ...

  2. Vue + Webpack + Vue-loader 系列教程(1)功能介绍篇

    原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ Vue-loader 是什么? vue-loader 是一个加载器,能把如下格式的 Vue ...

  3. 系列四TortoiseSvn客户端软件

    原文:系列四TortoiseSvn客户端软件 TortoiseSvn介绍 TortoiseSvn 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录.文件保存在中 ...

  4. Bing Maps进阶系列四:路由功能服务(RouteService)

    Bing Maps进阶系列四:路由功能服务(RouteService) Bing Maps提供的路由功能服务(RouteService)可以实现多方位的计算地图上的路线指示,路径行程等功能,比如说实现 ...

  5. Charles系列一:Charles功能介绍、下载安装和界面简介

    一:Charles主要功能介绍 Charles是一个HTTP代理/HTTP监视器/反向代理,使开发和测试人员能够查看机器和Internet之间所有的HTTP和SSL/HTTPS流量,这包括请求,响应. ...

  6. S5PV210开发系列四_uCGUI的移植

    S5PV210开发系列四 uCGUI的移植 象棋小子          1048272975 GUI(图形用户界面)极大地方便了非专业用户的使用,用户无需记忆大量的命令,取而代之的是能够通过窗体.菜单 ...

  7. VSTO之旅系列(四):创建Word解决方案

    原文:VSTO之旅系列(四):创建Word解决方案 本专题概要 引言 Word对象模型 创建Word外接程序 小结 一.引言 在上一个专题中主要为大家介绍如何自定义我们的Excel 界面的,然而在这个 ...

  8. .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

  9. Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

随机推荐

  1. Artech的MVC4框架学习——第四章Model元数据的解析

    总结: 第一Model元数据是针对 数据类型的一种表述信息. 第二Model元数据作用:控制数据类型本身及其成员,通过相应的特性,在view中 为绑定的数据(Model)实现模版化的html呈现. 第 ...

  2. C语言位操作--奇偶校验算法

    信息是以比特流的方式传输的,类似01000001.在传输过程中,有可能会发生错误,比如,我们存储了01000001,但是取出来却是01000000,即低位由0变成了1.为了检测到这种错误,我们可以通过 ...

  3. redmine创建新闻,自动发邮件给项目组所有成员

    redmine创建新闻,自动发邮件给项目组所有成员: 1.添加用户至公共项目内 2.配置系统邮件推送配置 3.检查用户接受推送配置 3.使用管理员账户发布新闻(不能自己发送自己) 4.查看邮件接受邮件

  4. Unity3D笔记 愤怒的小鸟<一>场景切换

    新建3个场景,场景1 Start 十秒后自动切换到场景2 Splash,场景2在二秒后自动切换到场景3 Selection 一.场景一Start 二.场景2 Splash 三.场景3 Selectio ...

  5. Python多线程应用示例

    实现任务描述如下: 创建多个子线程,共同访问一个队列中的元素,并执行相应操作.要求要按照元素的执行要按照队列顺序,并且元素的执行不能有重复. 示例代码如下: #simple sample to sho ...

  6. dubbo入门之微服务客户端服务端配置

    正常一个服务不会只做客户端或者只做服务端,一般的微服务都是服务与服务相互调用,那么,应该怎么配置呢?接着之前的dubbo入门之helloWorld,我们再改改配置,即可实现正常的微服务架构.与之前相比 ...

  7. python开发环境搭建(windows+python2.7.5+django1.5.4)【原创】

    先插入一条广告,博主新开了一家淘宝店,经营自己纯手工做的发饰,新店开业,只为信誉!需要的亲们可以光顾一下!谢谢大家的支持!店名: 小鱼尼莫手工饰品店经营: 发饰.头花.发夹.耳环等(手工制作)网店: ...

  8. HDU 6278 - Just h-index - [莫队算法+树状数组+二分][2018JSCPC江苏省赛C题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6278 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  9. 【紫书】Rails UVA - 514 栈

    题意:判断出栈顺序是否合法 题解:两个指针,A指向入栈序列,B指向出栈. 的分三种情况:if     1.A==B :直接入栈加出栈即可A++,B++ else 2.和栈顶相同,直接出栈A==stac ...

  10. python3学习笔记(7)_listComprehensions-列表生成式

    #python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...