讽刺:多计算主机支持

https://blueprints.launchpad.net/nova/+spec/ironic-multiple-compute-hosts

目前,Ironic virt 驱动程序仅支持单个 nova-compute 服务。这显然不适用于任何有意义规模的环境;没有 HA,计算服务宕机时一切都会失败。让我们修复它。

问题描述

计算机是可怕的东西。它们有时会死掉。它们随机崩溃进程。太阳耀斑会造成坏事发生。等等等等。

仅为整个 Ironic 环境运行一个 nova-compute 实例将会是一场灾难。Ironic virt 驱动程序当前假设一次只能运行一个 nova-compute 进程。它将 Ironic 安装的所有资源暴露给资源跟踪器,而无法将这些资源拆分到多个计算服务中。

用例

这允许操作员避免为 Ironic 部署使用单个 nova-compute 服务,以便即使计算服务宕机,部署也能继续运行。请注意,这假定每个 Nova 部署一个 Ironic 集群;在大多数情况下,这并非不合理,因为 Ironic 应该能够扩展到 10^5 个节点。

提议的变更

我们将从 ironic 中提取一些哈希环代码(即将放入 oslo),用于在多个 nova-compute 服务之间对 ironic 节点进行一致哈希。哈希环在驱动程序本身内使用,并在每次资源跟踪器运行时刷新。

get_available_nodes() 现在将返回一个节点子集,由以下规则确定

  • 任何由计算服务管理的节点

  • 任何映射到哈希环上计算服务的节点

  • 没有由另一个计算服务管理的节点

virt 驱动程序通过连接 services 表和 compute_nodes 表来查找正在运行 ironic 驱动程序的所有计算服务。由于首次启动的服务在 compute_nodes 表中不会有任何记录,因此 virt 驱动程序还将自身计算服务添加到此列表中。此列表中所有主机名的列表用于实例化哈希环。

随着 nova-compute 服务启动或关闭,环将重新平衡。重要的是要注意,这种重新平衡不会在所有计算服务上同时发生,因此在一段时间内,一个 ironic 节点可能由多个计算服务管理。换句话说,对于单个 ironic 节点,可能会有两条 compute_nodes 记录,具有不同的主机值。对于调度目的,这没关系,因为任何计算服务都有能力实际在该节点上生成实例(因为 ironic 服务不知道这种哈希)。这将导致容量报告(例如 nova hypervisor-stats)在此期间过度报告容量。一旦集群中的所有计算服务都完成了资源跟踪器运行并重新平衡了哈希环,就会恢复正常。

同样重要的是要注意,由于处理具有实例的节点的方式,如果实例在计算服务关闭时被删除,则该节点将在服务启动时从 compute_nodes 表中删除(因为每个服务都会在节点对象上看到一个实例,并假定另一个计算服务管理该实例)。Ironic 节点将保持活动和孤立状态。一旦运行周期性任务来回收已删除的实例,Ironic 节点将被拆除,并且该节点将再次在 compute_nodes 表中报告。

一切都是最终一致的,并且最终一致的时间可能很长。

没有配置来启用此模式;它始终运行。对于继续使用单个计算服务的部署,其行为与今天相同。

备选方案

像今天一样做,使用主动/被动故障转移。做好主动/被动故障转移并不容易,并且不能解释所有可能的故障。这也不符合 Nova 规定的计算故障模型。此外,资源跟踪器初始化在许多 Ironic 节点上很慢,因此冷故障转移可能需要几分钟。

另一种选择是让 nova 的调度器仅选择运行 ironic 驱动程序的计算服务(本质上是随机的),并让 virt 驱动程序和 ironic 确定到给定节点的调度。这里的缺点是操作员不再拥有可插拔的调度器(除非我们在 ironic 中构建一个),并且我们将不得不做很多工作以确保计算服务之间没有调度竞争。

数据模型影响

无。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

这将稍微提高性能。目前资源跟踪器负责 Ironic 部署中的每个节点。这将缩小该组,并提高资源跟踪器循环的性能。

其他部署者影响

无。

开发人员影响

没有,但 Ironic 驱动程序开发人员应该意识到这种情况。

实现

负责人

主要负责人

jim-rollenhagen (jroll)

其他贡献者

dansmith jaypipes

工作项

  • 将哈希环代码导入 Nova。

  • 在 virt 驱动程序中使用哈希环在计算守护程序之间分片节点。

依赖项

无。

测试

此代码将在默认 devstack 配置中运行。

我们还计划添加一个 CI 作业,该作业使用多个计算主机运行 ironic 驱动程序,但这可能要到 Ocata 才会发生。

文档影响

也许需要更新操作指南,但是我想将其留到下一个周期,直到我们确信这是稳定的。

参考资料

历史

修订版

发布名称

描述

Mitaka

已引入但未合并任何更改。

Newton

重新提出。完全重写以使用哈希环。