使用 Mistral 的可扩展 VNF 监控策略¶
https://blueprints.launchpad.net/tacker/+spec/mistral-monitor-policy
问题描述¶
目前,Tacker 服务器托管一个本地变量来保持 VNFs 的监控,并使用本地线程进行监控。这导致 tacker 服务器无法扩展,并影响 API 性能
如果有很多需要监控的 VNFs,tacker 服务器将不得不运行很多线程来监控它们,这将影响 tacker 服务器的 API 功能。
如果 tacker 服务器重启,监控线程将不会启动。
由于这使得 tacker 服务器具有状态,因此无法运行多个 tacker 服务器。
提议的变更¶
asciiflow
+---------------------+
| Mistral workflow |
+-(1)---> VNF monitor action |
+---------------+ | | |
| Tacker server +----+ +--------^------------+
+-----+---------+ |
| | |
| | |
| | |
| | |
| | +--------v----+
| |----(3)--------> MSG Queue <----+
| +-------------+ (2)
| |
| +-------v----------+
| | Tacker |
| | conductor server |
| +------+-----+ +------+ |
| | | | +------------------+
+-------> Tacker DB <-----+
| |
+------------+
由于 Mistral 是 tacker 系统的一个组成部分,因此可以使用一个长期运行的 Mistral 工作流操作来执行此任务。Tacker 服务器将生成一个 VNF 监控工作流,并在配置了监控策略的 VNF 存在时执行它。一旦被监控的目标 VDU 被移除,工作流和执行将被移除。
监控操作无法直接访问 tacker 数据库,因此我们引入了一个 Tacker-conductor 服务器来为 mistral 操作执行数据库访问。
即使删除了工作流执行,Mistral 也不会停止长期运行的操作。因此,为操作退出制定了一种机制。当工作流被移除时,VNFM 插件将通过 MSG 队列杀死 mistral 操作。
Mistral 操作将使用 RPC 与 conductor 服务器通信。为了处理监控的可扩展性,将部署多个 conductors。
mistral 操作通过以下接口 VNFPolicyActionRPC 与 conductor 通信
class VNFPolicyActionRPC(object)
# execute policy action
def execute_policy_action(context, vnf, monitor_return_value,
policy_actions, action_id):
# The response message containing the operation result
# the status should be the passed in by request or 'bad_action'
# if the action is not the wanted action.
status = rpc call conductor
return status
在 VNF 更改或删除后,VNFM 插件通过以下接口 VNFPolicyMonitorRPC 异步地杀死 mistral 操作
class VNFPolicyMonitorRPC(object)
# kill the mistral action job
def kill(context, action_id):
pass
# update the mistral action job
def update(context, action_id, parameter):
pass
上述接口中的 update 方法用于通知策略监控被监控 vnf 发生了变化,例如 VNF 被扩展,并且被重新启动。
创建 VNF 的序列图
监控策略分为两部分:策略监控和策略操作。策略监控,例如 ping 和 http_ping,实现为 mistral 任务操作。策略操作将在 tacker conductor 中运行。
具有监控策略的每个 VNF 将生成一个工作流,并将其作为 VNF 实例的元信息保存,以便对其进行管理。
一旦工作流启动,mistral 工作流操作就会运行。该操作将根据监控策略执行其工作。当需要策略操作时,监控操作将调用 conductor 的 execute_policy_action RPC 方法。
conductor 中的 execute_policy_action 方法将调用策略操作,这将执行实际工作,例如重新启动、记录等。
如果策略操作需要更新 vnf_policy_monitor,它将通知 vnf_policy_monitor 更改。
如果 conductor 发现该操作已过时,它将返回 bad_action 给 vnf_policy_monitor,然后 vnf_policy_monitor 将退出。
更新 VNF 的序列图
由于 VNF 更新只是用于配置 VDUs,因此不需要此操作执行工作流操作。
删除 VNF 的序列图
扩展 VNF 的序列图
备选方案¶
无
数据模型影响¶
VNF 数据库将被扩展,以包含一个 Mistral 操作 ID 列来记录当前操作 ID。
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他开发人员影响¶
无
开发人员影响¶
无
实现¶
负责人¶
Yong sheng gong <gong.yongsheng@99cloud.net>
Nguyen Hai <nguyentrihai93@gmail.com> <nguyentrihai@soongsil.ac.kr>
dharmendra <dharmendra.kushwaha@nectechnologies.in>
里程碑¶
- 完成目标里程碑
rocky-1
工作项¶
实现 VNF 监控策略的工作流版本
单元测试
依赖项¶
rabbitmq
oslo message
测试¶
可以在这些场景中测试此功能。
测试 VNF 实例化场景
设置 tacker 系统,这将启动 tacker conductor 服务器
在 VDU 属性下载入具有监控策略的 VNFD 并启动 VNF
检查 VNF 监控策略工作流是否已设置,并且 ping 操作正在 mistral executor 组件上运行(以 ping 策略为例)
使 VDU VM 无法访问,以检查相关策略操作是否会被调用(以重新启动操作为例)
检查 mistral 中的策略监控是否会监控新的管理 IP
测试 VNF 删除场景
在 VDU 属性下载入具有监控策略的 VNFD
检查 VNF 监控策略工作流是否已设置,并且 ping 操作正在 mistral executor 组件上运行(以 ping 策略为例)
检查 VNF 是否标记为活动状态
删除 VNF 并检查是否删除了 mistral 相关内容
测试扩展 VNF 的行为
在 VDU 属性下下载入具有监控策略的 VNFD 并扩展策略并启动 VNF
扩展 VNF 并检查策略监控是否正在 ping 多个管理 IP
缩小 VNF 并检查策略监控是否未 ping 移除的 IP。
文档影响¶
更改 tacker 部署文档
添加有关在 tacker 服务器中执行操作的 mistral 工作流方式的文档