主机聚合
- Launchpad 条目: NovaSpec:host-aggregates
- 创建时间: 2011 年 10 月 10 日
- 贡献者: Armando Migliaccio, John Garbutt
总结
此蓝图将聚合的概念引入 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)
- OSAPI 扩展
- 聚合模型和 API
- 针对 XenServer 的 Virt 扩展
- 池创建和设置
- 针对 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.
代码变更
更改受到良好限制,可以在以下评论中看到
- 模型 - https://review.openstack.org/#change,3035
- OSAPI 扩展 - https://review.openstack.org/#change,3109
- OSAPI 扩展 - https://review.openstack.org/#change,3184
- 聚合 API - https://review.openstack.org/#change,3149
- 客户端映射 - https://review.openstack.org/#change,3144
- 存储选择 - https://review.openstack.org/#change,3380
- Virt/xenapi 实现 - https://review.openstack.org/#change,3761 和 https://review.openstack.org/#change,4244
- 主机维护 - https://review.openstack.org/#change,4023, https://review.openstack.org/#change,4322
有关完整详细信息,请参阅 Launchpad 上的蓝图页面。
迁移
由于向 Nova 概念模型引入了新的抽象,因此可能需要 DB Schema。迁移文件可以在 https://review.openstack.org/#change,3035 中看到。
测试/演示计划
已添加广泛的单元测试覆盖率。将添加更多测试以进行练习。sh,可通过 devstack 获得。更多详细信息将随后提供。
未解决的问题
无。
BoF 议程和讨论
无。