替换 Zookeeper、Memcache 服务组驱动为 Tooz 驱动

https://blueprints.launchpad.net/nova/+spec/tooz-for-service-groups

Nova 的 zookeeper 和 memcache 服务组驱动已经逐渐失效。 tooz (一个新的 oslo 库,已经开发了大约一年) 能够以一种 Nova 无需维护 zookeeper 和 memcache 服务组驱动的方式提供分组概念。

问题描述

Nova 目前需要维护、测试和支持 db、memcache、zookeeper 驱动。db 驱动是目前唯一广泛部署的驱动。

memcache 和 zookeepr 驱动此后逐渐失效。例如,Zookeeper 驱动使用 evzookeeper,该驱动已不再积极维护,并且不适用于 eventlet >= 0.17.1。

如果 Nova 添加一个 tooz 服务组驱动,这意味着 Nova 可以弃用现有的 zookeeper 和 memcache 驱动,并最终不再需要维护这些代码。

从长远来看,希望用户能够迁移到由 tooz 支持的更具前景的系统,但这项工作不在本次规范的范围内。

用例

  • 范围之内:迁移现有的 memcache 和 zookeeper 驱动用户到新的 tooz 服务组驱动

  • 范围之外:现有的 db 驱动用户迁移到 tooz 驱动

项目优先级

提议的变更

在开始这项工作之前,我们需要修复服务组 API 抽象:https://blueprints.launchpad.net/nova/+spec/servicegroup-api-control-plane

上述工作可能会扩展 tooz 需要存储的数据量,例如节点是否启用或禁用。与此同时,这将明确现有非 DB 服务组驱动的许多当前限制,这些限制需要在 tooz 驱动中避免。

将添加一个 ToozServiceGroupDriver,它实现现有的 ServiceGroupDriver 接口。尽管上述工作可能会略微调整该接口。

它将简单地将调用封装到 tooz 库中,并针对遇到的错误引发 Nova 特定的异常。

备选方案

我们可以什么都不做,但这不太可能修复损坏的驱动程序,导致用户困惑,以及痛苦的升级。

我们可以直接停止对 memcache 和 zookeeper 服务组驱动的支持,但似乎有一个社区希望通过 tooz 支持它们,支持该社区会很好。

我们可以尝试从 Nova 的 memcache 和 zookeeper 驱动程序实时升级到新的 tooz 驱动程序,但鉴于这些驱动程序似乎目前已损坏,这似乎是浪费精力。在从 Nova 代码库中删除驱动程序之前,可以在弃用周期内的用户反馈用于确定是否需要这样做。

数据模型影响

DB 服务组驱动程序不受此更改的影响。

memcache 和 zookeeper 驱动程序不会以与 tooz 存储信息相同的方式在这些系统中存储信息。但 Nova 只是 tooz 库的用户,因此我们可以跳过该更改的细节。

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

预计不会有变化,仍然需要定期向 memcache 发送心跳以确保 memcache 键未过期,zookeeper 客户端(即使使用 kazoo 也需要定期与 zookeeper 签到),因此在这个领域不应有任何重大变化。

其他部署者影响

将为 tooz 驱动程序提供一个新的配置值,使用 URL。以下是一些 URL 格式示例

servicegroup_tooz_url = "kazoo://127.0.0.1:2181?timeout=5"
servicegroup_tooz_url = "memcached://:11211?timeout=5"
servicegroup_tooz_url = "redis://:6379?timeout=5"

鉴于 Nova 的 memcache 和 zookeeper 驱动程序的当前状态,我们正在采用一种非常简单的过渡方法。它将类似于

  • 升级到 liberty,使用现有的服务组驱动程序

  • 首先重启 nova-compute。

  • 更新配置以指向新的服务组驱动程序

  • 更新配置后重启 nova-api。

我们将在 memcache 和 zookeeper 驱动程序的弃用窗口期间,从用户那里收集对这种方法的反馈,以评估更简单的方法是否足够。

开发人员影响

Nova 开发人员可能需要在使用、理解和集成 tooz 时与 oslo 社区(以及 tooz 子社区)进行更多互动。

实现

负责人

主要负责人:vilobhmm

工作项

  • 实现新的 tooz 服务组驱动程序。

  • 记录从现有驱动程序到 tooz 驱动程序的迁移,包括任何所需数据迁移的实施。

  • 为 memcache 和 zookeeper 驱动程序添加弃用警告。

  • 完成下面详细的测试工作。

依赖项

此规范增加了对 tooz 的依赖

这项工作也依赖于整理服务组 API 的工作:https://blueprints.launchpad.net/nova/+spec/servicegroup-api-control-plane

测试

  • 与 infra 合作,确保其中一个 gate 作业开始使用 tooz 驱动程序

文档影响

  • 描述新的 tooz 驱动程序及其配置选项

  • 描述如何从 memcache 或 zookeeper 迁移到 tooz

  • 传达 memcache 和 zookeeper 驱动程序的弃用

参考资料

oslo 采用 Tooz

Tooz rtd

其他