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 集群要求
- [5] 创建 Hyper-V 集群
- [6] Hyper-V 集群验证
- [7] Windows Hyper-V / Server 2012 R2 集群验证
https://technet.microsoft.com/en-us/library/hh847274%28v=wps.630%29.aspx