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 覆盖。单元测试在这里将不起作用,因为更改主要是在初始化过程和调度器中。此功能主要重用现有的(经过测试的)功能。

文档影响

参考资料