同步器¶
同步器是 vitrage 内部模块,它通过轮询请求提供 OpenStack 服务的快照(所有实体),或者,通过推送通知提供组成相同 OS 服务的实体的变更通知。
问题描述¶
启用 vitrage 并为了维护 OS 服务、Nagios 等的最新的视图,它会进行采样。
提议的变更¶
定期采样 OS 服务、Nagios 等,并在发生变化时生成最新的实体(与增量相反)
设计¶
与模块交互¶
获取所有通知¶
实体类型列表
变更通知¶
- 注册
提供实体类型列表和一个回调函数,供同步器调用以发送信息,并发立即执行(对此函数的调用不会阻塞调用者),由 vitrage 图管理器完成
推送通知
同步器响应¶
列表-全部和通知响应包含实体
每个实体必须包含:key parent/child key type timestamp? CRUD 操作 (新实体/更新/…) state (active/shutdown/…) project (role)
同步器插件¶
插件种类
消息总线插件¶
通过 oslo-messaging 库注册消息总线通知
收集器插件¶
+-------------------------------------------------------------------------------------------------+
| |
| vitrage graph ^ ^ |
| | | |
+-------------------------------------------------------------------------------------------------+
| |
+------------------------------------------------------------------------------------------------+
| | synchronizer | |
| | | |
| | | |
| +--------+-----------------------+ collect +-------+------------+ |
| | | notifications | | |
| | worker +---+-------------+ | worker | |
| | | | | | | |
| +--------------------------------+ | | +------------------+-+ |
| notification | | collect | |
| | | notifications| |
| | | | |
| +------------------------------------------------------------+ +v----------+ +------------+ |
| | collector plugin | | | msg bus | | msg bus| | |
| | | | | plugin | | plugin v | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | +----------------------------+ | | | | | | |
| | baseline:|hash0|hash1|hash2|hash3|... | <-----+ | | | | | |
| | +----------^-----------------+ | | | | | | |
| | |if | | | | | | |
| | |hash(item)!=hash1 ==> | | | | | | |
| | |propagate item as a | | | | | | |
| | |change notification | | | | | | |
| | | | | | | | | |
| | +-----------+---------------+ | | | | | | |
| | |sampling ^ <------------+ | | | | | |
| | +----------|----------------+ | | | | | |
| | | | | | | | |
| | | | | | | |
| | | | | | | | |
| +------------------------------------------------------------+ +-----------+ +------------+ |
| | |
+------------------------------------------------------------------------------------------------+
|
+-----------+-------------------+
| OS service |
+-------------------------------+
采样 OS 服务、Nagios 等。
通过每个 OS 服务的 REST API
收集方法:检索 OS 服务元素列表。为了:变更通知 - 作为定期收集最新快照的一部分,我们将使用此方法对不传播变更通知的 OS 服务进行收集。在自己的收集子进程中运行,如何发现快照收集后实体的变更,我们希望知道自上次快照以来哪个实体发生了变更,为了实现这一点,我们将维护一个基线 - 一个数据结构,其中包含每个 OS 服务实体(例如虚拟机实例)的 ID + 最后的收集时间戳或表示其最新状态的哈希值。通过将最新的元素快照与基线进行比较,我们将知道要为哪个实体传播通知。为揭示此功能的服务的增量收集,对于变更通知,这是一个简单的情况,变更通知直接传递给注册者。
部署 - 作为库
消费者流程¶
- 新插件
- 编写 my_plugin.py
my_plugin(synchronizer.BasePlugin): … 在 conf 文件中注册 my_plugin 类路径,安装包含 my_plugin.py 的 egg,重启 vitrage 服务
- 初始配置
配置 nova、heat 等,以便向 vitrage 发送消息总线通知(监听器从队列中删除消息总线通知的消费)
配置活动实体类型
配置消息总线凭据,用于消息总线监听器
配置 Nagios 凭据
注册“变更通知” - 对于流式变更通知,在同步器初始化时,消费者将提供返回通知的队列,同步器初始化时将生成子进程,定期调用“获取全部”以向图提供最新的快照。
备选方案¶
无
数据模型影响¶
待定
REST API 影响¶
待定
版本影响¶
待定
其他最终用户影响¶
无
部署者影响¶
待定
开发者影响¶
待定
Horizon 影响¶
无
实现¶
负责人¶
待定
工作项¶
待定
依赖项¶
待定
测试¶
单元测试 - Tox 集成测试 - Tempest
文档影响¶
待定
参考资料¶
待定