替换 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
其他
https://wiki.openstack.org/wiki/Oslo/blueprints/service-sync
https://specs.openstack.org/openstack/ceilometer-specs/specs/juno/central-agent-partitioning.html
http://lists.openstack.org/pipermail/openstack-operators/2015-March/006674.html
http://lists.openstack.org/pipermail/openstack-dev/2015-April/062737.html