跳转到: 导航, 搜索

主机聚合

总结

此蓝图将聚合的概念引入 Nova。主机聚合与区域和可用区不同:前者允许将 Nova 部署划分为逻辑组,用于负载均衡和实例分配,而后者则用于提供与其他可用区之间某种形式的物理隔离和冗余(例如,通过使用单独的电源和网络设备)。可用区不一定意味着地理分布,而区域通常意味着地理分布。主机聚合可以被视为进一步划分可用区的机制,即划分为多个共享通用资源(如存储和网络)的主机组。

发布说明

Nova 中对主机聚合(即超visor 主机集群、组或池)的支持。聚合概念是 Nova 部署的另一个扩展层级,位于区域和可用区之后。

原理

主机聚合能够提供更精细的粒度来构建整个 OpenStack 部署。聚合还允许单个客户实例在可用区内具有更高的可用性,它能够实现高级 VM 放置策略,更重要的是,它能够实现主机的零停机时间升级。聚合通过 Admin OSAPI API 暴露。有关更多详细信息,请查看 OSAPI 文档。

用户故事

主机聚合创建

  • 在 host_1 上安装并启动 nova-compute
  • 在 host_2 上安装并启动 nova-compute
  • 在 host_N 上安装并启动 nova-compute
  • 创建一个名为 Aggregate_X 的聚合
  • 将 host_1 添加到 aggregate_X,host_1 加入聚合
  • 将 host_2 添加到 aggregate_X,host_2 加入聚合
  • 将 host_N 添加到 aggregate_X,host_3 加入聚合

请注意:聚合的设置必须在所有加入聚合的主机完全运行(即允许为 VM 创建等请求)之前完成。为此,nova-compute 可能需要一个新的标志,该标志告诉服务向 Nova 基础设施注册,但同时处于禁用模式。服务状态可以在主机加入聚合后切换为“已启用”。

主机维护

  • 将主机置于维护模式
  • 在主机上运行的 VM 迁移到聚合的成员
  • 管理员干预主机(例如,添加额外的内存)
  • 将主机恢复到运行模式

前提条件

有关更多详细信息,请参阅下面的实现部分。

  • 在此功能的第一个版本中,共享存储和网络等内容是手动设置和配置的。
  • Nova 有区域和可用区。
  • 聚合引入了一个子分组层级。可用区和聚合之间的关系是 1-M(即,一个可用区包含 0 个或多个聚合,并且一个聚合只能属于一个可用区)。
  • 一个主机是零个或一个聚合
  • 聚合必须仅对管理员可见。
  • 聚合是一个抽象概念,即它不一定转换为超visor 端的资源池。该声明的含义是,如果决定让例如 XenServer/VMWare 资源池映射到 host-aggregates-v1 中的聚合,那么在 host-aggregates-v2 中可能不再是这种情况。
  • 可能需要对特定的 virt 层支持进行更改。
    • 例如,在 xenapi 的情况下,可能需要确保实例可以显式地流式传输到本地 SR 或另一个存储。目前实例流式传输到默认 SR,而默认 SR 通常是本地 SR。这对于非 HA 实例来说很好,但是对于启用 HA 的实例来说,需要某种形式的共享存储。简而言之,预计将与负责 https://blueprints.launchpad.net/nova/+spec/guest-ha 的人进行协调。
    • 随着超visor 池的引入(例如,XenServer 池或 ESX 资源池),实时迁移成为奖励;这意味着将需要与负责 https://blueprints.launchpad.net/nova/+spec/xenapi-live-migration 的人进行协调的工作。
    • 需要与更广泛的社区团队进行协调,以便让这些东西主要为 XenServer 和 KVM 正常工作(ESXi 可能会有疑问)。Essex 的主要重点是缩小这两个超visor 之间的差距,而不是扩大差距。

设计

OSAPI Admin API 将扩展以支持以下操作

  • 主机
    • 启动主机维护(或 evacuate-host):禁止主机为 API 请求提供服务,并将实例迁移到聚合中的其他主机
    • 停止主机维护:(或 rebalance-host):将主机恢复到运行模式,将实例迁移回该主机(可选)
  • 聚合
    • 列出聚合:返回所有主机聚合的列表(可以选择按可用区过滤)
    • 创建聚合:创建聚合,接受友好的名称等。返回一个 id
    • 显示聚合:显示聚合的详细信息(id、名称、availability_zone、主机和元数据)
    • 更新聚合:更新聚合的名称和可用区
    • 设置元数据:将元数据设置为提供的值
    • 删除聚合:删除聚合,如果聚合不为空则失败
    • 添加主机:将主机添加到聚合
    • 删除主机:从聚合中删除主机,如果主机未禁用则失败

实现

请阅读下面的注释,以获取有关实现首次切片的更多详细信息。

  • XenServer
    • 一些与聚合关联的属性会影响池的配置(例如,共享存储、主选举等)
    • 添加到聚合的第一个主机成为主节点,其他主机成为从节点
    • 需要处理主节点故障
  • 主机维护:这意味着主机上的客户实例需要移动到聚合中的其他主机(并在维护窗口关闭后移回)。此移动会对实例网络、实例的可控性等产生影响。需要在此领域进行大量工作,以确保编排层仍然可以访问和控制实例。
  • 调度层需要了解聚合:这意味着两件事
    • 即使主机是池的成员,也应继续在主机基础上计算指标(内存、存储、cpu 等);
    • VM 放置算法不应受到池存在的影响;
    • 可以可选地提供一个余量,以便处理维护窗口(这可能意味着一个相当大的打包问题);
  • 优化:可用区可以从主机详细信息中获取,因此可以在创建聚合时省略它。这意味着从聚合中删除的最后一个主机/服务会清除可用区。
  • 可能需要考虑其他服务(如卷)加入主机聚合意味着什么

蓝图实现目标

  • E3/早期 E4
    • OSAPI 扩展
      • 客户端映射(python-novaclient)
  • 聚合模型和 API
    • 针对 XenServer 的 Virt 扩展
      • 池创建和设置
  • 主机维护
  • E4/Essex RC/F1
    • smoketests & 文档

UI 变更

可以提供扩展到 Horizon,以支持管理员任务,例如聚合创建和管理。但是 nova cli 客户端预计将提供以下操作


  * aggregate-list                                                    Print a list of all aggregates.
  * aggregate-create         <name> <availability_zone>               Create a new aggregate with the specified details.
  * aggregate-delete         <id>                                     Delete the aggregate by its id.
  * aggregate-details        <id>                                     Show details of the specified aggregate.
  * aggregate-add-host       <id> <host>                              Add the host to the specified aggregate.
  * aggregate-remove-host    <id> <host>                              Remove the specified host from the specfied aggregate.
  * aggregate-set-metadata   <id> <key=value> [<key=value> ...]       Update the metadata associated with the aggregate.
  * aggregate-update         <id> <name> [<availability_zone>]        Update the aggregate's name and optionally availablity zone.


代码变更

更改受到良好限制,可以在以下评论中看到

有关完整详细信息,请参阅 Launchpad 上的蓝图页面。

迁移

由于向 Nova 概念模型引入了新的抽象,因此可能需要 DB Schema。迁移文件可以在 https://review.openstack.org/#change,3035 中看到。

测试/演示计划

已添加广泛的单元测试覆盖率。将添加更多测试以进行练习。sh,可通过 devstack 获得。更多详细信息将随后提供。

未解决的问题

无。

BoF 议程和讨论

无。