以编程方式检测Windows群集配置?

时间:2009-11-13 15:59:15

标签: windows cluster-computing

有谁知道如何以编程方式检测Windows服务器是群集的一部分?

此外,是否可以检测到服务器是主动节点还是被动节点?

[编辑]并从Win32中检测到它?注册表设置可能?

感谢您的任何见解。

道格

3 个答案:

答案 0 :(得分:4)

您可以使用WMI查找信息。这应该适用于XP / Win32等。

这里有一些关于使用VBScript完成工作的好消息: http://www.activexperts.com/activmonitor/windowsmanagement/scripts/networking/clustering/

这里有一些C#/ .net代码也使用WMI:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.Management;

namespace SandboxConsole
{
    public class ClusterAdmin
    {
        [MTAThread]
        public static void Main()
        {
            string clusterName = "MyCluster"; // cluster alias
            string custerGroupResource = "FS_Resource1"; // Cluster group name
            ConnectionOptions options = new ConnectionOptions();
            options.Username = "ClusterAdmin"; //could be in domain\user format
            options.Password = "HisPassword";

            // Connect with the mscluster WMI namespace on the cluster named "MyCluster"
            ManagementScope s = new ManagementScope("\\\\" + clusterName + "\\root\\mscluster", options);
            ManagementPath p = new ManagementPath("Mscluster_Clustergroup.Name='" + custerGroupResource + "'");

            using (ManagementObject clrg = new ManagementObject(s, p, null))
            {
                // Take clustergroup off line and read its status property when done
                TakeOffLine(clrg);
                clrg.Get();
                Console.WriteLine(clrg["Status"]);

                System.Threading.Thread.Sleep(3000); // Sleep for a while

                // Bring back online and get status.
                BringOnLine(clrg);
                clrg.Get();
                Console.WriteLine(clrg["Status"]);
            }
        }
        static void TakeOffLine(ManagementObject resourceGroup)
        {
            ManagementBaseObject outParams =
            resourceGroup.InvokeMethod("Takeoffline", null, null);
        }
        static void BringOnLine(ManagementObject resourceGroup)
        {
            ManagementBaseObject outParams =
            resourceGroup.InvokeMethod("Takeoffline", null, null);
        }
    }
}

我找到了这段代码here并稍微整理了一下。

答案 1 :(得分:1)

您正在寻找的任何特定语言?

您可以使用failover cluster cmdlets for Powershell(适用于Windows Server 2008 R2)。具体为Get-ClusterGet-ClusterNode

答案 2 :(得分:1)

我没有确切的答案,但是有许多API以“Cluster”开头(如ClusterOpenEnum和ClusterNodeEnum)以及以“IGetCluster”开头的COM界面看起来很有希望。