Vitrage-graph 快速故障切换¶
https://blueprints.launchpad.net/vitrage/+spec/vitrage-fast-failover
- vitrage-graph 高可用性应满足以下要求
vitrage-graph 的单个活动实例(由 pacemaker 管理)。
在故障切换时无需请求更新即可快速初始化。
如果发生长时间停机,vitrage-graph 启动将请求 collector 更新
问题描述¶
Vitrage-graph 处于活动待机状态。目前在故障切换时,vitrage-graph 需要再次从 collector 数据源拉取所有数据。这需要相当长的时间,在此期间数据不一致。由于我们希望继续使用内存图(出于性能考虑),vitrage-graph 服务将保持活动待机状态。因此,故障切换事件中的停机时间必须最小化。
提议的变更¶
每次 get_all 之后,vitrage-graph 都会将完整的实体图快照存储在数据库中,因此大多数事件不需要重新播放。
Vitrage-graph 将每个处理过的事件发送到 vitrage-persistor,以便按处理顺序存储这些事件。
在初始化时,vitrage-graph 查询数据库表 graph_snapshots,获取最新的条目,如果它不早于 snapshot_interval,则将使用它。
- 使用快照初始化 - 在故障切换时
反序列化存储的快照以获取图。
在所有在快照之后发生的事件(来自 events 表)上运行处理器。
启用评估器。
处理消息总线中等待的所有事件。
- 不使用快照初始化 - 从头开始(这是当前行为)。
从一个新的空图开始。
RPC 到 Collector 以运行所有驱动程序的 get_all,然后处理事件。
处理消息总线中等待的所有事件。
启用评估器并迭代所有图。
备选方案¶
使用持久化图数据库可以提高 vitrage-graph 的高可用性,因为由于运行活动-活动,故障切换将很快。这可能是在高可用性方面更可取的解决方案,但总体而言,与内存 networkx 相比,性能下降是不合理的
数据模型影响¶
可能需要进行一些小的更改,待定。
REST API 影响¶
无
版本影响¶
无
其他最终用户影响¶
无
部署者影响¶
默认情况下将启用此功能。部署者可以通过将以下内容添加到 vitrage.conf [persistancy] enable_persistancy=false 来禁用它
开发者影响¶
无
Horizon 影响¶
无
实现¶
负责人¶
- 主要负责人
idan-hefetz
- 其他贡献者
无
工作项¶
无
依赖项¶
无
测试¶
将添加额外的 tempest 用于故障切换,因为持久性已经由现有的 tempest 覆盖。单元测试在这里将不起作用,因为更改主要是在初始化过程和调度器中。此功能主要重用现有的(经过测试的)功能。
文档影响¶
无
参考资料¶
无