Windows Server 2012实现虚拟机亲和性策略

云计算 虚拟化
如果首选物理节点列表中的节点属于亲和性控制组成员,则切换策略会跳到下一首选物理节点,以此类推。当所有首选节点均处于亲和性策略控制组成员,为了保证高可用性,集群服务会忽略亲和性策略选择一个首选节点作为故障切换节点。根据上面的切换策略控制条件, 需要配置的就包括了可用节点列表,首选节点列表,和亲和性策略这三个部分。

   有朋友咨询如何在Windows Server 2012实现虚拟机亲和性策略。熟悉VMware vSphere解决方案的技术宅肯定会比较熟悉一个叫做DRS的动态迁移策略, 其中可以配置VM亲和性策略控制两个虚拟机应用运行在不同的物理ESXi主机上。这个功能还是很实用的,例如如果虚拟机应用运行了一个Guest集群,那么其中一个基本需求就是让来宾虚拟机运行在不同的物理主机上,如果DRS控制策略处于性能考虑让两个来宾虚拟机运行在同一台物理主机上则集群的高可用性就失去了;另一个常见的案例是在站点集群的解决方案中,如果你希望通过集群控制在一个站点内进行故障切换,站点间通过在线迁移转移虚拟机的灵活性;那么这样的功能在Windows Server 2012 Hyper-V中是否提供呢?

  在Windows Server 2012中对高可用性进行了大量增强,包括了:

  1. 虚拟机复制

  2. 网络聚合

  3. 集成的高可用性

  4. 虚拟机应用监控

  5. 集群感知更新

  6. 集群切换优先级控制

  7. 虚拟机亲和性策略

  这里和大家分享一下虚拟机亲和性策略的设置方法。

  故障转移群组切换时依照如下的策略控制切换目标物理主机,

  首先,该物理节点属于可能物理节点列表成员。

  其次,根据***物理节点顺序选择切换节点。

  如果***物理节点列表中的节点属于亲和性控制组成员,则切换策略会跳到下一***物理节点,以此类推。

  当所有***节点均处于亲和性策略控制组成员,为了保证高可用性,集群服务会忽略亲和性策略选择一个***节点作为故障切换节点。

  根据上面的切换策略控制条件, 需要配置的就包括了可用节点列表,***节点列表,和亲和性策略这三个部分。

#p#

  1.可用节点列表

  在Windows Server 2012的故障转移集群中,选择设置可用节点。

如何在Windows Server 2012实现虚拟机亲和性策略

  如果你熟悉Powershell,也可以通过CMDLET完成上述工作:

  如果没有导入故障转移群的Powershell管理模块,需要先导入该模块

  Import-Module FailoverClusters

  确认安装了故障转移集群以及RSAT模块,如果没有安装,则先安装该模块

  Get-WindowsFeature failover-clustering | Install-WindowsFeature –IncludeManagementTools

  设置VMtest1和VMtest2两个虚拟机的可用物理节点主机为shuttle1和shuttle2

  Get-ClusterResource -Name "VMtest1", "VMtest2" | Set-ClusterOwnerNode -Owners shuttle1,shuttle2

#p#

  2. 设置***节点列表

  在Windows Server 2012的故障转移集群中,选择设置***节点,

如何在Windows Server 2012实现虚拟机亲和性策略

  当然,也可以通过Powershell的CMDLET完成上述工作:

  如果没有导入故障转移群的Powershell管理模块,需要先导入该模块

  Import-Module FailoverClusters

  确认安装了故障转移集群以及RSAT模块,如果没有安装,则先安装该模块

  Get-WindowsFeature failover-clustering | Install-WindowsFeature –IncludeManagementTools

  设置虚拟机VMtest1的***物理节点为按照Shuttle1,Shuttle2顺序

  Get-ClusterGroup VMtest1 | Set-ClusterOwnerNode shuttle1, shuttle2

  清除***节点配置

  Get-ClusterGroup VMtest1 | Set-ClusterOwnerNode ""

#p#

  3. 设置亲和性策略

  这个最核心的部分我没发现如何通过GUI界面完成,只能通过Powershell,不过用CMDLET个人感觉更习惯一些:)

  虽然Cluster.exe可以用于定义了亲和性策略,不过从Windows Server 2012后这种方式即将过期,因此并不推荐采用这种方式;使用这种方式需要先安装故障转移集群命令行接口模块

  Get-WindowsFeature FailoverCluster-CmdInterface | Install-WindowsFeature

  设置VMtest1,VMtest2虚拟机的亲和性组为App Servers和Critical Servers,也就是App Servers和Critical Servers组中的虚拟机VMtest1和VMtest2不能同时被放置到一个故障转移集群中的同一物理节点上 (注意:这个设置只能做Reset,就是每次配置都不是增量而是覆盖设置的)

  cluster group VMtest1 /prop AntiAffinityClassNames = "App Servers", "Critical Servers"

  cluster group VMtest2 /prop AntiAffinityClassNames = "App Servers", "Critical Servers"

  清除设置

  cluster group VMtest1 /prop AntiAffinityClassNames = ""

  cluster group VMtest2 /prop AntiAffinityClassNames = ""

  (可以用通配符)

  推荐用Powershell如对于虚拟机或虚拟机组设置应用亲和性策略,方法是通过设置AntiAffinityClassNames的属性值。

  首先,确定AntiAffinityClassNames属性的当前设置方式是通过 Get-ClusterGroup CMDLET。

  Get-ClusterGroup | Select AntiAffinityClassNames

  (默认情况下,该命令取值为空,说明还没做任何设置)

  该CMDLET同样需要导入故障转移群的Powershell管理模块,需要先导入该模块

  Import-Module FailoverClusters

  确认安装了故障转移集群以及RSAT模块,如果没有安装,则先安装该模块

  Get-WindowsFeature failover-clustering | Install-WindowsFeature –IncludeManagementTools

  ***,对该属性位进行设置和添加方法,各位自己去如法炮制吧:-)

  (Get-ClusterGroup VMtest1).AntiAffinityClassNames = "Critical Servers"

  (Get-ClusterGroup VMtest1).AntiAffinityClassNames += "App Servers"

  (Get-ClusterGroup VMtest2).AntiAffinityClassNames = "Critical Servers"

  (Get-ClusterGroup VMtest2).AntiAffinityClassNames += "App Servers"

  个人感觉这个方法比在Windows 2008R2中设置容易太多了, 2008R2里面你要配置定义多个字符串变量,还是挺复杂的:

  # 创建字符变量"antiaffinityclassnames"

  $antiaffinityclassnames = New-Object System.Collections.Specialized.StringCollection

  # 定义亲和性类"App Servers"

  $antiaffinityclassnames.Add("App Servers")

  # 定义亲和性类"Critical Servers"

  $antiaffinityclassnames.Add("Critical Servers")

  # 分配虚拟机到已经定义的亲和性类AntiAffinityClassNames property

  (Get-ClusterGroup VMtest1).AntiAffinityClassNames = $antiaffinityclassnames

  (Get-ClusterGroup VMtest2).AntiAffinityClassNames = $antiaffinityclassnames

责任编辑:贾隆 来源: 51CTO.com
相关推荐

2012-09-06 09:17:23

Windows Ser

2013-09-16 11:11:23

Windows SerHyper-V

2009-09-04 08:42:02

2013-03-07 10:42:15

Windows Ser虚拟机Hyper-V

2013-05-28 10:33:06

虚拟化虚拟机移植

2021-04-29 00:20:21

Python亲和性分析

2009-03-04 09:11:20

类型亲和性类型约束SQLite

2012-04-05 09:40:10

虚拟化vmware虚拟机

2013-09-22 10:11:18

Windows SerHyper-v微软

2012-06-01 09:53:37

虚拟机

2024-03-05 10:34:33

KubernetesPod云原生

2009-09-09 08:05:51

优化VMware Se

2012-07-12 14:39:55

Windows Ser

2012-12-25 15:04:07

Windows Ser动态内存Hyper-V

2012-05-18 10:22:23

2013-03-28 10:05:17

Windows SerAD虚拟化虚拟化安全

2012-08-16 13:59:49

Windows Ser虚拟化

2009-09-07 21:51:59

2014-05-13 14:00:42

虚拟机hypervisor

2023-02-17 12:55:23

微软Windows
点赞
收藏

51CTO技术栈公众号