Windows API отказоустойчивого кластера все еще действителен? - PullRequest
0 голосов
/ 17 апреля 2020

Я искал варианты для развертывания. Net Windows Служба в 2 windows экземплярах отказоустойчивых кластеров. Но я застрял с использованием Windows Failure Cluster API для связи между windows экземплярами службы. Я не мог видеть любой Ref. использовать это. Это все еще действует?

1 Ответ

0 голосов
/ 17 апреля 2020

Предпочтительным методом является вызов командлетов Powershell из вашего кода.

Вот класс, который я написал для кластеризации виртуальной машины. Это должно дать вам достаточно, чтобы продолжить, чтобы добраться туда, куда вы хотите go.

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
}
...