监控资源状态¶
https://blueprints.launchpad.net/blazar/+spec/resource-monitoring
当前未跟踪已租用/预留资源的的状态。本规范提出一项新功能,用于监控已租用/预留资源的状态,并从故障条件下恢复租约。
问题描述¶
即使租约已成功创建,如果资源发生故障,租约所有者也无法使用已租用的资源。更糟糕的是,租约所有者甚至无法从租约对象中注意到这种故障条件,因为 Blazar 不跟踪已租用/预留资源的状态。
用例¶
租约所有者期望在租约状态良好时,已租用的资源可用。
具有资源操作权限的管理员,例如 /v1/hosts 的 CRUD 操作,期望 Blazar 能够通知他们池中资源的故障。
提议的变更¶
概述¶
Blazar 监控资源的状态,并修复受损的租约。
监控资源状态¶
让 blazar-manager 监控资源状态。对于每个资源插件,应至少支持以下两种类型的监控功能:
基于推送的监控
blazar-manager 监听其他组件发送的通知消息,例如 Nova 为主机/实例插件发送的消息。它会接收引用 Blazar 管理的资源的的消息,即资源记录存储在 Blazar 数据库中。每个资源插件提供发布者 ID 和要订阅的主题。
基于轮询的监控
blazar-manager 定期调用每个资源插件的状态检查方法。然后,资源插件检查资源状态,例如,主机/实例插件使用 Compute API 的 *List Hypervisors*。如果检测到任何故障,则会通知 blazar-manager。
blazar-manager 在加载资源插件后开始监控。每种资源插件的监控功能类型是可配置的。
更新资源状态¶
如果检测到任何故障,blazar-manager 会调用资源插件来处理它。资源插件将字段 *reservable* 更新为 *FALSE*,该字段位于故障资源的记录中。这里的记录是指存储在 Blazar 数据库的资源表中的记录,例如,主机/实例插件的 computehosts 表的记录。
即使 computehosts 表有一个名为 *status* 的字段,我们也不使用该字段,因为它会导致误解,即 *status* 字段复制了 Nova 中 hypervisor 的状态。相反,我们引入了一个新的布尔字段 *reservable*,它由 Nova 中 hypervisor 的状态和状态组合决定。只有当状态为 *up* 并且状态为 *enabled* 时,*reservable* 字段才变为 *TRUE*。也就是说,如果状态变为 *down* 或状态变为 *disabled*,则它将变为 *FALSE*。
修复受损的租约¶
引入以下布尔标志来表示资源条件。默认情况下,它们设置为 False
Lease
degraded
Reservation
missing_resources
resources_changed
在更新故障资源的 status(= *reservable* 字段)后,资源插件会发现因故障而受到影响的租约,并尝试修复这些租约。在修复过程中,资源插件会查找满足租约要求的可用资源。然后,它执行以下操作:
情况 1:租约尚未启动
情况 1-1:有足够的资源可用
用故障资源替换新的资源。虽然资源已更改,但将 *resources_changed* 标志保持为 False,因为如果尚未启动,则不会影响租约所有者的视角。
情况 1-2:没有可用的替代资源
将租约的 *degraded* 标志和预留的 *missing_resources* 标志设置为 True。
情况 2:租约已启动
情况 2-1:有足够的资源可用
将租约的 *degraded* 标志和预留的 *resources_changed* 标志设置为 True。
情况 2-2:没有可用的替代资源
将租约的 *degraded* 标志和预留的 *missing_resources* 标志设置为 True。
一旦 *degraded* 和 *missing_resources* 标志设置为 True,即使故障资源已恢复,它们也会保持 True。要将它们设置为 False,租约所有者必须发送更新租约请求,并且必须满足请求的容量。请注意,一旦 *resources_changed* 标志变为 True,它将永远不会变为 False。在这种情况下,*degraded* 标志也不会变为 False。
从架构的角度来看,资源相关表(如 computehosts、computehost_allocations、computehost_reservations 和 instance_reservations 表)由资源插件更新。通用表(如 leases 和 reservations 表)由管理器更新。
通知¶
如果租约、预留或资源的状态发生变化,blazar-mangaer 会发布通知。
备选方案¶
可以使用其他监控服务,例如 Monasca。但是,就组件间依赖性而言,这不是一个好的解决方案。应尽可能减少依赖性。
数据模型影响¶
leases 表:添加一个新的布尔字段 *degraded*。
reservations 表:添加新的布尔字段 *missing_resources* 和 *resource_changed*。
computehosts 表:添加一个新的布尔字段 *reservable*。
REST API 影响¶
通过上述数据模型更改,REST API 响应体中包含的一些字段将略有变化。
GET /v1/<lease-id> 响应的新字段
{ "lease": { "degraded": false, "reservations": [ { "missing_resources": false, "resources_changed": false, } ], } }
安全影响¶
无。
通知影响¶
blazar-manager 发送以下两个新通知:
租约状态更改:通知租约及其包含的预留的状态更改。
资源状态更改:通知 Blazar 管理的资源的 status 更改。即,通知 Blazar 数据库的资源表中 *reservable* 字段的更改。
其他最终用户影响¶
无。
性能影响¶
无。
其他部署者影响¶
与监控功能相关的新的配置选项,例如监控类型、发布者 ID 和要订阅的主题,将为每个资源插件添加。
开发者影响¶
所有资源插件(包括将来支持的新插件)都必须支持至少一种资源监控功能。
实现¶
负责人¶
主要负责人:hiro-kobayashi
工作项¶
定义租约和预留的完整状态集。这将由 state-machine 蓝图[1]完成。
将监控机制实现到 blazar-manager 中。
更改 computehosts 表的模式。具体来说,删除 *status* 字段并添加一个新的 *reservable* 字段。
更改资源查找功能,例如主机插件的 _matching_hosts() 方法和实例插件的 pickup_hosts() 方法,以关注 computehosts 表中记录的 *reservable* 字段。
将资源特定的监控功能实现到每个资源插件中,该功能由 blazar-manager 调用。首先关注主机插件的基于推送的监控功能。
将租约修复功能实现到每个资源插件中。
实现通知功能。
更改 DevStack 设置脚本以启用监控功能
编写用户指南
依赖项¶
租约和预留的可能状态取决于 state-machine 蓝图[1]。
测试¶
测试监控功能。
测试租约修复功能。
文档影响¶
此新功能应在介绍文档中描述。
安装指南将更新,以提及如何设置监控功能。
API 参考将更新,因为响应体将略有变化。
参考资料¶
[1] state-machine 蓝图 <https://blueprints.launchpad.net/blazar/+spec/state-machine>
[2] Denver PTG 讨论 <https://etherpad.openstack.org/p/blazar-resource-monitoring>
历史记录¶
发布名称 |
描述 |
|---|---|
Queens |
引入 |