Hyper-V clustering limitations<p align=left><font face=Arial size=2>I have been creating VM's for high availability clustering by placing both the configuration and the container for each VM in a single folder on a shared LUN in the cluster.  (i.e. VM1 is located on S:\VM1\VM1.vhd and the configuration for that VM is located on S:\VM1\Virtual Machines\A62F1219-1008-4D90-A205-6FC739585DB5.xml</font></p> <p align=left> </p> <p>When using the high availability wizard to cluster the VM the configuration, the VM itself, and the disk LUN (and drive letter) are automatically placed into a cluster group for that VM.  The dependencies are also automatically created so that the VM can be seamlessly moved to another host.  Very nice.</p> <p align=left> </p> <p align=left>However there are 3 issues that have spung up while attempting to add additional VM's I've created to the cluster.</p> <p align=left> </p> <p align=left>1.  Multiple VM's on a single shared LUN.</p> <p align=left> </p> <p align=left>Once I've used the wizard to create a cluster group containing a given LUN, I cannot use the wizard to add a second VM on the same LUN.  I get an error when the wizard runs essentially saying that the LUN is already spoken for.</p> <p align=left> </p> <p align=left>2.  Mount Point Limitiations</p> <p align=left> </p> <p align=left>Even though both the Hyper-V and Cluster administrators allow use of a mount point (of a shared LUN to another shared volume with a drive letter), the cluster wizard errors saying the mount point is not accessible when attemping to cluster the VM.</p> <p align=left> </p> <p align=left>3.  Number of Drive Letter Limitations</p> <p align=left> </p> <p align=left>Assuming that the first 2 limiations do not change, that means I must have 1 LUN per each clusterd VM.  This means I am going hit a ceiling of 20 or so VM's per &quot;cluster&quot;.  That is a fairly low number of VM's on a 4 node cluster.</p> <p align=left> </p> <p align=left>Any guidance on methods to cluster VM's without using up drive letters, or to allow several clustered VM's on a single LUN, would be greatly appreciated.</p> <p align=left> </p>© 2009 Microsoft Corporation. All rights reserved.Thu, 19 Jun 2008 00:15:52 Zed28fc11-f9d4-4100-ad96-f1cb23ed8046http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#ed28fc11-f9d4-4100-ad96-f1cb23ed8046http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#ed28fc11-f9d4-4100-ad96-f1cb23ed8046MikeLaschahttp://social.technet.microsoft.com/Profile/en-US/?user=MikeLaschaHyper-V clustering limitations<p align=left><font face=Arial size=2>I have been creating VM's for high availability clustering by placing both the configuration and the container for each VM in a single folder on a shared LUN in the cluster.  (i.e. VM1 is located on S:\VM1\VM1.vhd and the configuration for that VM is located on S:\VM1\Virtual Machines\A62F1219-1008-4D90-A205-6FC739585DB5.xml</font></p> <p align=left> </p> <p>When using the high availability wizard to cluster the VM the configuration, the VM itself, and the disk LUN (and drive letter) are automatically placed into a cluster group for that VM.  The dependencies are also automatically created so that the VM can be seamlessly moved to another host.  Very nice.</p> <p align=left> </p> <p align=left>However there are 3 issues that have spung up while attempting to add additional VM's I've created to the cluster.</p> <p align=left> </p> <p align=left>1.  Multiple VM's on a single shared LUN.</p> <p align=left> </p> <p align=left>Once I've used the wizard to create a cluster group containing a given LUN, I cannot use the wizard to add a second VM on the same LUN.  I get an error when the wizard runs essentially saying that the LUN is already spoken for.</p> <p align=left> </p> <p align=left>2.  Mount Point Limitiations</p> <p align=left> </p> <p align=left>Even though both the Hyper-V and Cluster administrators allow use of a mount point (of a shared LUN to another shared volume with a drive letter), the cluster wizard errors saying the mount point is not accessible when attemping to cluster the VM.</p> <p align=left> </p> <p align=left>3.  Number of Drive Letter Limitations</p> <p align=left> </p> <p align=left>Assuming that the first 2 limiations do not change, that means I must have 1 LUN per each clusterd VM.  This means I am going hit a ceiling of 20 or so VM's per &quot;cluster&quot;.  That is a fairly low number of VM's on a 4 node cluster.</p> <p align=left> </p> <p align=left>Any guidance on methods to cluster VM's without using up drive letters, or to allow several clustered VM's on a single LUN, would be greatly appreciated.</p> <p align=left> </p>Tue, 22 Apr 2008 01:19:04 Z2008-04-28T03:59:54Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#ceb73ff7-74bd-4a70-acec-68d0f94de008http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#ceb73ff7-74bd-4a70-acec-68d0f94de008Mike Sterling [MSFT]http://social.technet.microsoft.com/Profile/en-US/?user=Mike%20Sterling%20%5bMSFT%5dHyper-V clustering limitations<p align=left><font face=Arial size=2>1. The cluster UI doesn't allow multiple VM's per LUN. However, this can be achieved via scripting. Let me confirm that the script I have is OK to post.</font></p> <p align=left> </p> <p align=left>2. There is a known issue with mount points that we're working on a fix for.</p>Tue, 22 Apr 2008 23:38:40 Z2008-04-22T23:38:46Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#2dfb1d79-d479-4fe3-93e4-a65739d9f626http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#2dfb1d79-d479-4fe3-93e4-a65739d9f626Mike Sterling [MSFT]http://social.technet.microsoft.com/Profile/en-US/?user=Mike%20Sterling%20%5bMSFT%5dHyper-V clustering limitations<p align=left>As promised: <p align=left>  <div class=codeseg> <div class=codecontent> <div class=codesniptitle><span style="width:100%">Code Snippet</span></div> <p align=left>var clusterService;<br>var cluster;<br>var resGroup;<br>var diskRes;<br>var vmRes;<br>var vmConfigRes;<br>var objInParm;<br>var objOutParam;<br>var e;<br>var groupName = &quot;mygroup&quot;;<br>var vmConfigResName = &quot;myVmConfigRes&quot;;<br>var vmResName = &quot;myVmRes&quot;;</p> <p align=left> </p> <p align=left>// Connect to the cluster service<br>clusterService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy}!\\\\.\\root\\mscluster&quot;);</p> <p align=left> </p> <p align=left>// Retrieve the cluster object.<br>e = new Enumerator(clusterService.ExecQuery(&quot;Select * From Mscluster_cluster&quot;));</p> <p align=left>for (;!e.atEnd(); e.moveNext())<br>{<br> cluster = e.item();<br>}</p> <p align=left> </p> <p align=left>// Create an empty resource group<br>resGroup = clusterService.Get(&quot;Mscluster_resourcegroup&quot;);</p> <p align=left>objInParam = resGroup.Methods_(&quot;CreateGroup&quot;).inParameters.SpawnInstance_();<br>objInParam.GroupName = groupName;</p> <p align=left>objOutParams = resGroup.ExecMethod_(&quot;CreateGroup&quot;, objInParam );</p> <p align=left>WScript.Echo(&quot;New resource group created.&quot;);</p> <p align=left> </p> <p align=left>// Retrieve dependent storage resource. The disk should be from the available storage. Assume the disk is cluster disk 2.<br>e = new Enumerator(clusterService.ExecQuery(&quot;Select * From Mscluster_Resource where name='cluster disk 2'&quot;));</p> <p align=left>for (; !e.atEnd(); e.moveNext())<br>{<br> diskRes = e.item();<br>}</p> <p align=left>objInParam = diskRes.Methods_(&quot;MoveToNewGroup&quot;).inParameters.SpawnInstance_();<br>objInParam.Group = groupName;</p> <p align=left>objOutParams = diskRes.ExecMethod_(&quot;MoveToNewGroup&quot;, objInParam);</p> <p align=left>WScript.Echo(&quot;Moved dependent resource to the new group.&quot;);</p> <p align=left> </p> <p align=left>// Add one vm to the group.</p> <p align=left><br>// Create a vm configuration resource.<br>vmConfigRes = clusterService.Get(&quot;Mscluster_Resource&quot;);<br>objInParam = vmConfigRes.Methods_(&quot;CreateResource&quot;).inParameters.SpawnInstance_();<br>objInParam.Group = groupName;<br>objInParam.ResourceName = vmConfigResName;<br>objInParam.ResourceType = &quot;Virtual Machine Configuration&quot;;<br>objInParam.SeparateMonitor = false;</p> <p align=left>objOutParams = vmConfigRes.ExecMethod_(&quot;CreateResource&quot;, objInParam);</p> <p align=left>WScript.Echo(&quot;Created new vm configuration resource.&quot;);</p> <p align=left> </p> <p align=left>// Create a vm resource.<br>vmRes = clusterService.Get(&quot;Mscluster_Resource&quot;);<br>objInParam = vmRes.Methods_(&quot;CreateResource&quot;).inParameters.SpawnInstance_();<br>objInParam.Group = groupName;<br>objInParam.ResourceName = vmResName;<br>objInParam.ResourceType = &quot;Virtual Machine&quot;;<br>objInParam.SeparateMonitor = false;</p> <p align=left>objOutParams = vmRes.ExecMethod_(&quot;CreateResource&quot;, objInParam);</p> <p align=left>WScript.Echo(&quot;Created new vm resource.&quot;);</p> <p align=left> </p> <p align=left>// Retrieve the newly created resources<br>e = new Enumerator(clusterService.ExecQuery(&quot;Select * From MsCluster_Resource where name='&quot; + vmConfigResName + &quot;'&quot;));<br>for (; !e.atEnd(); e.moveNext())<br>{<br> vmConfigRes = e.item();<br>}</p> <p align=left>e = new Enumerator(clusterService.ExecQuery(&quot;Select * From MsCluster_Resource where name='&quot; + vmResName + &quot;'&quot;));<br>for (; !e.atEnd(); e.moveNext())<br>{<br> vmRes = e.item();<br>}</p> <p align=left> </p> <p align=left>// Configure resource dependency. Normally vm configuration resource depends on the cluster disk where vhd and vm configuration file are stored. <br></p> <p align=left> </p> <p align=left>// Vm resource depends on everything vm configuration resource depends on and the vm configuration resource.<br></p> <p align=left> </p> <p align=left>// Add disk dependency to the vm configuration resource.<br>objInParam = vmConfigRes.Methods_(&quot;AddDependency&quot;).inParameters.SpawnInstance_();<br>objInParam.Resource = diskRes.Name;</p> <p align=left>objOutParams = vmConfigRes.ExecMethod_(&quot;AddDependency&quot;, objInParam);<br>WScript.Echo(&quot;Configured vm configuration resource dependency.&quot;);</p> <p align=left> </p> <p align=left>// Add disk dependency to the vm configuration resource.<br>objInParam = vmRes.Methods_(&quot;AddDependency&quot;).inParameters.SpawnInstance_();<br>objInParam.Resource = diskRes.Name;</p> <p align=left>objOutParams = vmRes.ExecMethod_(&quot;AddDependency&quot;, objInParam);</p> <p align=left><br>// Add vm configuration dependency to the vm resource.<br>objInParam = vmRes.Methods_(&quot;AddDependency&quot;).inParameters.SpawnInstance_();<br>objInParam.Resource = vmConfigRes.Name;</p> <p align=left>objOutParams = vmRes.ExecMethod_(&quot;AddDependency&quot;, objInParam);<br>WScript.Echo(&quot;Configured vm resource dependency.&quot;);</p> <p align=left> </p> <p align=left>// Configure private properties of the vm configuration and vm resources.</p> <p align=left><br>// Two properties, VmId and VmStoreRootPath need to be configured for vm configuration resource. <br>vmConfigRes.PrivateProperties.VmId = &quot;AEF780E8-8B26-40D3-B7FA-8C8278E52967&quot;;<br>vmConfigRes.PrivateProperties.VmStoreRootPath = &quot;G:\\test&quot;;<br>vmConfigRes.Put_();</p> <p align=left> </p> <p align=left>//VmId needs to be configured for vm resource.<br>vmRes.PrivateProperties.VmId = &quot;AEF780E8-8B26-40D3-B7FA-8C8278E52967&quot;;<br>vmRes.Put_();</p> <p align=left> </p> <p align=left>//Up the vm configuration with the resource.<br>var controlCode = 23068676<br>objInParam = vmConfigRes.Methods_(&quot;ExecuteResourceControl&quot;).inParameters.SpawnInstance_();<br>objInParam.ControlCode = controlCode;</p> <p align=left>objOutParams = vmConfigRes.ExecMethod_(&quot;ExecuteResourceControl&quot;, objInParam);<br>WScript.Echo(&quot;Updated vm configuration resource.&quot;);</p> <p align=left>objInParam = vmRes.Methods_(&quot;ExecuteResourceControl&quot;).inParameters.SpawnInstance_();<br>objInParam.ControlCode = controlCode;</p> <p align=left>objOutParams = vmRes.ExecMethod_(&quot;ExecuteResourceControl&quot;, objInParam);<br>WScript.Echo(&quot;Updated vm resource.&quot;);</p> <p align=left> </p></div></div> <p align=left> </p> <p></p> <p align=left></p> <p align=left> </p> <p align=left> </p> <p align=left><font face=Arial size=2></font> </p>Wed, 23 Apr 2008 04:32:07 Z2008-04-23T04:32:33Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#eb1a9ea4-cdf9-47ee-80e5-f5765df19d2dhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#eb1a9ea4-cdf9-47ee-80e5-f5765df19d2dMartinBHhttp://social.technet.microsoft.com/Profile/en-US/?user=MartinBHHyper-V clustering limitationsRe mount points - I understand that Hyper-V or Server 2008 volume shadow copy cannot work with mount points, only drive letters - is that going to be fixed too?<br>Wed, 23 Apr 2008 16:20:26 Z2008-04-23T16:20:26Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#538d5450-1cd7-4945-abce-e42c11bf368dhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#538d5450-1cd7-4945-abce-e42c11bf368dMikeLaschahttp://social.technet.microsoft.com/Profile/en-US/?user=MikeLaschaHyper-V clustering limitations<p align=left><font face=Arial size=2></font> </p> <p>Mike,</p> <p align=left> </p> <p align=left>Thanks for the script.  I will try this out and report back soon.</p>Thu, 24 Apr 2008 00:08:05 Z2008-04-24T00:08:05Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#ce62a926-7078-4638-93c2-9a1d83d18008http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#ce62a926-7078-4638-93c2-9a1d83d18008MikeLaschahttp://social.technet.microsoft.com/Profile/en-US/?user=MikeLaschaHyper-V clustering limitations<p>Mike,</p> <p align=left> </p> <p align=left>Will this script run on server core or do I need to run it remotely from a management server?</p> <p align=left> </p> <p align=left>I named the script updatevm.vbs and executed it with &quot;cscript updatevm.vbs&quot;.</p> <p align=left> </p> <p align=left>I get an error updatevm.vbs(1, 19) Microsoft VBScript compilation error: Expected end of statement</p> <p align=left> </p> <p align=left>Am I having a blond moment?</p> <p align=left> </p> <p align=left>Plus I am assuming that the VM has already been provisioned and that I update the script with the proper Disk folder and GUID correct? (i.e. I am not building a new VM with this script correct?)</p> <p align=left> </p>Fri, 25 Apr 2008 21:59:13 Z2008-04-25T21:59:13Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#1bbe7734-6b93-46fe-a853-59e3e07ac62ahttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#1bbe7734-6b93-46fe-a853-59e3e07ac62aRob Mchttp://social.technet.microsoft.com/Profile/en-US/?user=Rob%20McHyper-V clustering limitations<p>I would echo this. Using drive letters is a severe limitation.  I have larger hosts currently that have upwards of 30 guests on them under Virtual Server 2005 R2 on a 3 separate LUNS.  Moving to a HA Hyper-V cluster, this would be impossible with the separation necessary into drive letters.  I have also been tinkering with the DiskShadow utility in Windows 2008 to provide an interum backup solution while I test Hyper-V.  From what I have found, this too can only provided shadow copies of those volumes with drive letters.  So I see this as something that would have to be fixed too.  I like Hyper-V alot, but if child servers have to be linked to LUNS with drive letters, then this limits its use in an enterprise scenario.</p> <p> </p> <p align=left>Rob </p> <p align=left><a title="http://www.virtuallyaware.net" href="http://www.virtuallyaware.net">http://www.virtuallyaware.net</a></p> <p align=left><font face=Arial size=2></font> </p>Sat, 26 Apr 2008 01:47:09 Z2008-04-26T01:47:09Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#968b9c75-642b-4fb9-81cc-733b89b270echttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#968b9c75-642b-4fb9-81cc-733b89b270ecJaap Wesseliushttp://social.technet.microsoft.com/Profile/en-US/?user=Jaap%20WesseliusHyper-V clustering limitations<p align=left><font face=Arial size=2>For larger clusters you can use GUID instead of drive letters, this will give you more flexibility. When formatting a disk don't give it a drive letter and do not use a mount point.</font></p> <p align=left>Go to a command prompt and use the MOUNTVOL command, this will give you the GUID of the disk. This GUID can be used to access the disk.</p> <p align=left>When configuring a VM use this GUID instead of a drive letter.</p> <p align=left> </p> <p align=left>There are still some limitations though. You have to move the cluster disk to the proper group and after a fail-over the disk resource has to be brought online manually. These issues will be fixed however.</p> <p align=left>See my posting in the the fail-over cluster forum: <a title="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=3169132&amp;SiteID=17" href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=3169132&amp;SiteID=17">http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=3169132&amp;SiteID=17</a></p> <p align=left> </p> <p align=left>Cheers</p> <p align=left>Jaap</p> <p align=left> </p> <p align=left> </p>Sat, 26 Apr 2008 06:05:19 Z2008-04-28T03:59:54Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#d6f1fe1a-a28d-4bd9-a8e5-f3ed4a722d93http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#d6f1fe1a-a28d-4bd9-a8e5-f3ed4a722d93MikeLaschahttp://social.technet.microsoft.com/Profile/en-US/?user=MikeLaschaHyper-V clustering limitations<p align=left><font face=Arial size=2>Jaap, </font></p> <p align=left> </p> <p align=left>Very intersting.  Thanks for the tip.  I'll give it a try and let you know.</p>Sat, 03 May 2008 16:42:59 Z2008-05-03T16:42:59Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#7b0574f3-51d1-448c-aba0-11553f212bcchttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#7b0574f3-51d1-448c-aba0-11553f212bccBobby Rosehttp://social.technet.microsoft.com/Profile/en-US/?user=Bobby%20RoseHyper-V clustering limitations<p align=left><font face=Arial size=2>This script works but seems to lack something with the network inteface that prevents it from failing over currently.  If I create a single clustered vm thru the gui, networking is maintained during failover fine.  But if I use this script to add a vm to a cluster group, networking is fine on the machine on which the script was ran to add the vm to the cluster group but not on the other node (it has configuration error for the network interface).   Is there some other parameter that the clustered vm config resource needs for the network.  </font></p> <p align=left> </p> <p align=left>And yes the virtual network is the same on both nodes.  Like I said, it works if I create the clustered vm via the gui but not using this script.</p> <p align=left> </p> <p align=left>Thanks</p> <p align=left>-=B</p> <p align=left> </p> <p align=left> </p> <p align=left>I found the issue.  This script isn't creating the vmswitchports parameter for the virtual machine configuration resource so what would be the mods for the above script to do that?</p>Fri, 09 May 2008 20:54:27 Z2008-05-09T20:54:27Zhttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#2220d45a-b1c3-4538-8ef9-8aab2a55e88chttp://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/ed28fc11-f9d4-4100-ad96-f1cb23ed8046#2220d45a-b1c3-4538-8ef9-8aab2a55e88cJaap Wesseliushttp://social.technet.microsoft.com/Profile/en-US/?user=Jaap%20WesseliusHyper-V clustering limitations<p>Hi,</p> <p align=left> </p> <p align=left>I noticed that the multiple VM's on a single LUN is still not fixed in the GUI of Hyper-V RC1.</p> <p align=left>Will this be fixed in the RTM (RTW?) version or do we still have to use the script (haven't tried it yet after reading the above comments).</p> <p align=left> </p> <p align=left>Thanks,</p> <p align=left>Jaap</p> <p align=left> </p> <p align=left><font face=Arial size=2></font> </p>Thu, 22 May 2008 15:32:40 Z2008-05-22T15:32:40Z