Trove/scheduled-tasks
- 创建时间: 2013年8月13日
- 贡献者: Craig Vyvial (cp16net)
目录
在西雅图Kilo周期中对Trove的更新。
在西雅图Kilo周期中对Trove的更新。针对此规范和提议的实现提出了许多评论。这些评论和讨论记录在 https://etherpad.openstack.org/p/trove-kilo-sprint-scheduled-tasks,并给予dougshelley66一个行动项,即审查此规范并根据我们当前对提议范围的理解进行修改。
自动化/计划备份设计
概述
此蓝图的目标是在Trove中实现支持自动化/计划备份的功能。这将通过Trove API以及客户机代理来支持,以自动化的方式使用现有的 快照设计。自动备份应允许用户在某个时间点恢复或克隆到新实例。
在尝试自动化部署中实例的备份时,存在许多不同的问题,例如错开备份、维护时间窗口等。 在此自动化系统的设计中,应能够解决这些问题中的每一个。 这应导致一个可插拔或可配置的接口,允许部署者选择他们想要使用的策略类型,而无需更改代码。
用户应定义一个 维护时间窗口,即自动备份维护应发生的时间。 维护时间窗口可以概括为用户希望进行计划备份、更新或其他维护相关操作的时间窗口。
为了以可插拔的方式处理自动化备份的策略,需要一个Trove调度器,该调度器可以根据常规维护窗口确定备份必须发生的时间,并使用简单或复杂的逻辑。 调度器应向客户机代理发送消息以运行自动备份。
cp16net (讨论) 2013年8月15日 15:07 (UTC) 存在关于计划任务将从哪里运行的争论。从调度器发送到客户机,还是客户机自行处理运行。无论哪种方式,消息都将在总线上来回发送。
设计目标
以下是设计目标
- 可插拔接口,用于确定要支持的策略类型。(错开备份、维护时间窗口等)
- 管理备份的网络带宽和连接
- 数据库支持计划设置和备份列表
- 维护时间窗口,用于运行计划任务(如备份)
维护时间窗口
用户可以设置维护时间窗口,以确定他们希望何时发生软件包更新、备份数据、重启服务、系统维护或其他相关任务。 这应允许用户确定服务中断发生的时间,而不是由部署者确定时间。
用户应能够创建多个时间窗口,并使用不同的类型,以便在用户指定的时间进行特定类型的维护或任务。
新对象
API 规范
用户应能够为实例创建一个新的计划任务,并对计划任务进行基本的CRUD操作。
计划任务类型
计划类型需要可以从管理端配置,但对用户可见。
GET /scheduledtasktypes
响应
{
"scheduledtasktypes": [
{
"type" : "backup",
"description" : "backup description",
"enabled": True
},
{
"type" : "restart",
"description" : "restart description",
"enabled": False
},
{
"type" : "update",
"description" : "update description",
"enabled": True
}
]
}
cp16net (讨论) 2013年8月22日 20:54 (UTC) 可能需要在此处添加有关每个任务类型的额外字段。(可选)
启用标志可以由部署者控制,如果他们希望停止某些任务在维护期间发生。
创建计划任务
用户应能够在一个实例上创建一个新的计划任务。
POST /scheduledtasks
创建一个实例的新的计划任务。
参数
name - 可选 - 如果未指定名称,将自动填充一个
instance_id - 要运行任务的实例
enabled - True 如果任务已启用,False 如果未启用。
type - 计划类型的ID
frequency - 任务频率。(hourly|daily|weekly|monthly)
time_window - 任务可以发生的时间窗口
description - 可选 - 计划的描述
metadata - 可选 - 元数据的字典
cp16net (讨论) 2013年8月20日 21:49 (UTC) 其中一些数据仍需要完善。 频率可以移动到元数据块。 通知接收者可以是一个列表而不是单个电子邮件地址。
Jimbobhickville (讨论) 2013年12月19日 19:46 (UTC) 我不同意将频率移动到元数据,也不认为通知应该在那里。 描述任务的任何内容都应在主体中,元数据应仅适用于特定任务类型的内容。 与单个time_window字段相比,我们不应该使用两个字段,以便仍然可以使用日期数学吗?
Jimbobhickville (讨论) 2014年1月15日 19:42 (UTC) 在一些讨论之后,删除了通知参数,取而代之的是广播消息,外部程序(如ceilometer)可以监听并处理通知客户机。
请求
{
"scheduledtask" : {
"name":"My Auto Backup",
"enabled": "True|False",
"type":"1",
"frequency" : "hourly|daily|weekly|monthly",
"time_window":"2012-03-28T22:00Z/2012-03-28T23:00Z",
"description" : "Auto Backup for my production database."
"metadata" : {
"retentionPeriod" : "7|14|21|28",
}
}
}
响应
{
"scheduledtask": {
"id" : "56b80958-cf34-4e9e-b5b0-b84fbe5e4ecc"
"name":"My Auto Backup",
"enabled": "True|False",
"type":"1",
"frequency" : "hourly|daily|weekly|monthly",
"time_window":"2012-03-28T22:00Z/2012-03-28T23:00Z",
"description" : "Auto Backup for my production database.",
"metadata": {
"retentionPeriod" : "7|14|21|28",
}
}
}
更新计划任务
用户应能够更新实例上的现有计划任务。 例如:
PUT /scheduledtasks/{id}
更新现有的计划任务。
参数
name - 可选 - 如果未指定名称,将自动填充一个
enabled - 可选 - True 如果任务已启用,False 如果未启用。
frequency - 可选 - 任务频率。(hourly|daily|weekly|monthly)
time_window - 可选 - 任务可以发生的时间窗口
description - 可选 - 计划的描述
metadata - 可选 - 运行任务使用的元数据
请求
{
"scheduledtask" : {
"name":"My Auto Backup",
"enabled": "True|False",
"type":"1",
"frequency" : "hourly|daily|weekly|monthly",
"time_window":"2012-03-28T22:00Z/2012-03-28T23:00Z",
"description" : "Auto Backup for my production database.",
"metadata": {
"retentionPeriod" : "7|14|21|28",
}
}
}
响应
{
"scheduledtask": {
"id" : "56b80958-cf34-4e9e-b5b0-b84fbe5e4ecc"
"name":"My Auto Backup",
"enabled": "True|False",
"type":"1",
"frequency" : "hourly|daily|weekly|monthly",
"time_window":"2012-03-28T22:00Z/2012-03-28T23:00Z",
"description" : "Auto Backup for my production database."
"metadata": {
"retentionPeriod" : "7|14|21|28",
}
}
}
获取计划任务
用户应能够获取计划任务的详细信息。
GET /scheduledtasks/{id}
显示计划任务。
响应
{
"scheduledtask": {
"id" : "56b80958-cf34-4e9e-b5b0-b84fbe5e4ecc"
"name":"My Auto Backup",
"enabled": "True|False",
"type":"1",
"frequency" : "hourly|daily|weekly|monthly",
"time_window":"2012-03-28T22:00Z/2012-03-28T23:00Z",
"description" : "Auto Backup for my production database."
"metadata": {
"retentionPeriod" : "7|14|21|28",
}
}
}
获取计划任务列表
用户应能够列出实例上的所有计划任务。
GET /instance/{id}/scheduledtasks
显示实例的计划任务列表。
响应
{
"scheduledtasks": [
{
"id" : "11111111-cf34-4e9e-b5b0-b84fbe5e4ecc",
"name":"My Auto Backup",
"enabled": "True|False",
"type":"1",
"frequency" : "hourly|daily|weekly|monthly",
"time_window":"2012-03-28T22:00Z/2012-03-28T23:00Z",
"description" : "Auto Backup for my production database."
"metadata": {
"retentionPeriod" : "7|14|21|28",
}
},
{
"id" : "22222222-cf34-4e9e-b5b0-b84fbe5e4ecc",
"name":"My Update Period",
"enabled": "True|False",
"type":"3",
"frequency" : "hourly|daily|weekly|monthly",
"time_window":"2012-03-28T23:00Z/2012-03-28T24:00Z",
"description" : "Updates can be applied to my production database."
"metadata": {
"retentionPeriod" : "7|14|21|28",
}
}
]
}
删除计划任务
用户应能够删除计划任务。
DELETE /scheduledtasks/{id}
删除计划任务。
响应:202 Accepted
RPC 消息通信
这是调度器与客户机定义以运行任务并从客户机获取任务运行回复的协议。
备份
运行备份
这是将发送到客户机以执行备份作业的消息负载。
{
"backup": {
"id" : "11111111-cf34-4e9e-b5b0-b84fbe5e4ecc",
"auth_token": "0a9sdf809sdu09sjfaisduf098ublahblahblah",
"destination_url": "customerbackupdir",
"type": "xtrabackup|mysqldump|other"
}
}
备份时的客户机更新
{
"backup": {
"id" : "11111111-cf34-4e9e-b5b0-b84fbe5e4ecc",
"status": "(Success|Failure)",
"reason": "Some explaination of the failure or success",
"size_mb": 123,
"md5": "some-md5-check-sum"
}
}
更新
运行更新
这是将发送到客户机以执行备份作业的消息负载。
{
"update": {
"type": "packages"
}
}
更新时的客户机更新
{
"update": {
"status": "(Success|Failure)",
"reason": "Some explaination of the failure or success"
}
}
计划任务模式
将在Trove数据库中创建一个新的实体:scheduled_tasks。 此实体将存储用户提供的计划任务数据。
计划任务 (scheduled_tasks)
此表将包含id、name、description、tenant id、instance id、task type和任务所属的enabled。
| 姓名 | 数据类型 | 长度 | 可为空 | 详情 |
|---|---|---|---|---|
| id | VARCHAR | 36 | 假 | 主键,生成的UUID |
| name | VARCHAR | 255 | 假 | - |
| description | VARCHAR | 512 | 真 | - |
| tenant_id | VARCHAR | 36 | 假 | - |
| instance_id | VARCHAR | 36 | 假 | - |
| task_type | VARCHAR | 36 | 假 | - |
| 已启用 | BOOLEAN | 默认值 | 假 | - |
| deleted | BOOLEAN | 默认值 | 假 | - |
| created | DATETIME | 默认值 | 假 | - |
| updated | DATETIME | 默认值 | 假 | - |
| deleted_at | DATETIME | 默认值 | 假 | - |
反馈
API 规范 - 计划任务创建
- drewford: 时间窗口值显示为时间戳。 根据频率的选择,"time_window" 值的粒度是否会发生变化?