【问题标题】:Windows Failover Cluster API still Valid?Windows 故障转移群集 API 仍然有效吗?
【发布时间】:2020-04-17 03:17:24
【问题描述】:

我正在寻找部署选项。 2 个 Windows 故障转移群集实例下的 Net Windows 服务。但我坚持使用 Windows 故障集群 API 来跨 Windows 服务实例进行通信。我看不到任何参考。用它。还有效吗?

【问题讨论】:

    标签: c# windows windows-services failover failovercluster


    【解决方案1】:

    首选方法是从您的代码中调用Powershell Cmdlets

    这是我编写的一个用于集群虚拟机的类。它应该为您提供足够的基础以到达您想去的地方。

    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Management.Automation;
    
    
    public static class FailoverClustering
    {
        public static List<string> GetClusterNode(string cluster)
        {
            List<string> nodes = new List<string>();
    
            PowerShell powerShell = PowerShell.Create();
    
            powerShell.AddCommand("Get-ClusterNode");
            powerShell.AddParameter("Cluster", cluster);
            foreach (PSObject result in powerShell.Invoke())
                nodes.Add(result.Members["Name"].Value.ToString());
    
            if (powerShell.Streams.Error.Count > 0)
                throw new Exception(powerShell.Streams.Error[0].Exception.Message);
    
            powerShell.Dispose();
    
            return nodes;
        }
    
        public static ClusteredVirtualMachine AddClusterVirtualMachineRole(string cluster, string virtualMachine)
        {
            PowerShell powerShell = PowerShell.Create();
    
            powerShell.AddCommand("Add-ClusterVirtualMachineRole");
            powerShell.AddParameter("Cluster", cluster);
            powerShell.AddParameter("VirtualMachine", virtualMachine);
    
            Collection<PSObject> result = powerShell.Invoke();
    
            if (powerShell.Streams.Error.Count > 0)
                throw new Exception(powerShell.Streams.Error[0].Exception.Message);
    
            powerShell.Dispose();
    
            return new ClusteredVirtualMachine(
                result[0].Members["Name"].Value.ToString(),
                result[0].Members["OwnerNode"].Value.ToString(),
                result[0].Members["State"].Value.ToString()
                );
        }
    }
    
    public class ClusteredVirtualMachine
    {
        public string Name { get; }
        public string OwnerNode { get; }
        public State State { get; }
    
        public ClusteredVirtualMachine(string name, string ownerNode, string state)
        {
            Name = name;
            OwnerNode = ownerNode;
            switch (state)
            {
                case "Offline": State = State.Offline; break;
                case "Online": State = State.Online; break;
            }
        }
    }
    
    public enum State
    {
        Online,
        Offline
    }
    

    【讨论】:

    • 它有帮助。谢谢。
    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 2016-03-19
    • 2021-02-15
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多