Hyper-V 集群

https://blueprints.launchpad.net/nova/+spec/hyper-v-cluster

Hyper-V 集群自 Windows / Hyper-V Server 2008 以来就被引入,它带来了诸多优势,例如高可用性虚拟机、更好的性能、更快的实时迁移和其他功能。[1][2][3]

问题描述

Hyper-V 集群可以带来一系列其他方式无法获得的优势,并提高现有功能的性能。一些例子包括高可用性虚拟机、更快的实时迁移、网络健康检测等。更详细的功能列表可以在参考部分找到 [1][2][3]。

目前,OpenStack 不支持 Hyper-V 集群。此蓝图解决了这个问题并添加了一个实现。

用例

此功能尤其适用于其卓越的性能、高可用性虚拟机以及虚拟机和虚拟机网络健康检测。

项目优先级

提议的变更

创建和部署 Hyper-V 集群有两种方法,各有优缺点

  • 选项 A:由单个 nova-compute 服务控制的 Hyper-V 集群。这意味着 nova-compute 服务将在集群中的单个 Hyper-V 节点上运行,并且可以远程操作集群所有节点上的 WMI 对象。

    优点

    • 一致的磁盘资源跟踪。 集群共享存储仅由单个计算服务跟踪。

    • 较小的开销,因为只需要一个 nova-compute 服务,而不是每个节点一个 nova-compute 服务。

    缺点

    • neutron-hyperv-agent 仍然是每个节点必需的。 尽管其性能在过去几个发布周期中得到了增强,但它无法有效地处理端口绑定、VLAN 标记以及为每个新端口创建安全组规则(在某些情况下可能高达数千个端口)。

    • ceilometer-agent-compute 必须在每个节点上运行,或者需要实现一个 Hyper-V 集群检查器,以便轮询所有资源的指标。

    • 空闲内存跟踪问题。 考虑这个例子:16 个节点集群,每个节点有 1 GB 的空闲内存 => ResourceTracker 将报告 16 GB 的空闲内存。 在集群中部署一个 2 GB 的实例将失败,因为没有可用的主机。

    • 空闲 vCPU 跟踪问题。 与上述相同。

    • nova-compute 服务可能会性能下降,因为它将为大量实例生成控制台日志记录线程,这将导致串行控制台访问响应速度变慢。

    • 对实例执行操作时,需要在 Hyper-V 集群驱动程序中进行额外的查询,以确定实例位于哪个节点上,以便正确操作它。

    • Hyper-V 集群将充当调度器,为新实例选择节点,从而导致较差的分配选择。

    • 底层集群基础设施将是不透明的,用户将无法通过 Nova API 知道实例位于哪个物理节点上。

    • 用户无法选择在同一集群中进行实时迁移。 由于 nova 中报告的计算节点只有一个,因此所有“foo”实例都将部署在主机“bar”上,并且运行命令

      nova live-migration foo bar

      将导致 UnableToMigrateToSelf 异常。 这将否定 Hyper-V 集群的优势之一:在同一集群内进行更快的实时迁移。

  • 选项 B:每个 Hyper-V 集群节点上运行一个 nova-compute 服务。

    优点

    • 正确的内存和 vCPU 跟踪。

    • nova-scheduler 将正确地在集群中调度实例。

    • nova-compute 服务性能不会下降。

    • 同一集群内的实时迁移速度更快。

    缺点

    • 空闲磁盘资源跟踪。 由于所有 nova-compute 服务都将报告相同的集群共享存储,每个 ResourceTracker 将报告不同的存储使用量。 例如,如果集群共享存储为 500 GB,并且单个节点上有两个使用 200 GB 存储的实例,则该节点将报告有 100 GB 的可用存储空间,而没有实例的其他节点将报告有 500 GB 的可用空间。 尝试部署另一个 200 GB 的实例将失败。(进行中)

此蓝图将解决选项 B,因为它的价值远远超过选项 A。

nova 中几乎所有现有的 Hyper-V 代码都可以重用于创建 Hyper-V 集群驱动程序,但对于选项 B 来说,需要进行一些更改

  • 实例必须在生成时添加到集群中。

  • 需要在实时迁移之前检查新主机是否在同一集群中。 如果它在同一集群中,则必须执行集群实时迁移,否则,必须在执行经典实时迁移之前取消集群实例。

  • 在 Hyper-V 集群中仍然可以进行冷迁移,冷迁移与实时迁移相同的条件适用。

  • 实例在销毁之前必须取消集群。

  • 当通过实时迁移或从非集群 Hyper-V 服务器或从另一个集群进行冷迁移时,将新实例添加到集群,则必须对实例进行集群化。

  • 开发一种查询集群共享存储的空闲/可用磁盘空间的方法,并将该方法报告给资源跟踪器。

  • 开发一种确保只有一个 Hyper-V 计算节点获取特定 glance 镜像的方法。

备选方案

没有,为了利用 Hyper-V 集群提供的优势,必须对实例进行集群化。

数据模型影响

REST API 影响

安全影响

nova-compute 服务必须使用在所有 Hyper-V 节点上具有 Hyper-V 管理权限的 Active Directory 用户来运行。

通知影响

其他最终用户影响

性能影响

  • 由于集群共享存储,镜像只需要在每个集群中缓存一次,而不是每个节点缓存一次,从而减少了用于缓存的存储空间,并减少了缓存时间。

  • 由于集群共享存储,实时迁移和冷迁移的持续时间大大缩短。

  • 当集群计算节点进入维护模式或被关闭时,将自动进行主机撤离。 实例将被实时迁移,从而确保高可用性。

其他部署者影响

  • Hyper-V 集群要求:[4]

  • 创建 Hyper-V 集群:[5]

  • Hyper-V 节点必须加入 Active Directory。

  • Hyper-V 节点必须加入故障转移集群,并且必须验证设置。[6][7]

  • 只有具有相同版本的节点才能加入同一集群。 例如,集群只能包含 Windows / Hyper-V Server 2012、Windows / Hyper-V Server 2012 R2 或 Windows / Hyper-V Server 2008 R2。

  • 集群中的所有 Hyper-V 节点必须可以访问相同的共享集群存储。

  • 共享存储的路径必须在计算节点的 nova.conf 文件中设置为如下所示:instances_path=\SHARED_STORAGEOpenStackInstances

  • 计算节点的 nova.conf 文件中的 compute_driver 必须设置为如下所示:compute_driver=nova.virt.hyperv.cluster.driver.HyperVClusterDriver

  • Hyper-V 集群的 WMI 命名空间为“/root/MSCluster”。 使用该命名空间时,由于在实例化命名空间时缺少 WMI 模块中的一个魔术方法 (__nonzero__) 而导致驱动程序启动失败。 这发生在 python wmi 模块的版本 1.4.9 或更早版本中。

  • 同一集群中的 Hyper-V 节点应添加到相同的宿主聚合中。 这将确保调度器为冷迁移选择同一聚合中的宿主。

开发人员影响

实现

负责人

主要负责人

Claudiu Belu <cbelu@cloudbasesolutions.com>

工作项

如“提议的更改”部分所述。

依赖项

测试

  • 单元测试。

  • Tempest 测试将能够验证此功能,并且它们将在 Hyper-V CI 的一部分中运行。

文档影响

将添加有关 HyperVClusterDriver 的文档。

参考资料

[1] Windows Hyper-V / Server 2012 集群功能

https://technet.microsoft.com/en-us/library/dn265972.aspx#BKMK_2012

[2] Windows Hyper-V / Server 2012 R2 集群功能

https://technet.microsoft.com/en-us/library/dn265972.aspx#BKMK_2012R2

[3] Hyper-V 集群实时迁移

https://technet.microsoft.com/en-us/library/dd759249.aspx#BKMK_live

[4] Hyper-V 集群要求

https://technet.microsoft.com/en-us/library/jj612869.aspx

[5] 创建 Hyper-V 集群

http://blogs.technet.com/b/keithmayer/archive/2012/12/12/step-by-step-building-a-free-hyper-v-server-2012-cluster-part-1-of-2.aspx

[6] Hyper-V 集群验证

https://technet.microsoft.com/en-us/library/jj134244.aspx

[7] Windows Hyper-V / Server 2012 R2 集群验证

https://technet.microsoft.com/en-us/library/hh847274%28v=wps.630%29.aspx

历史