Delen via


Consul gebruiken als lidmaatschapsprovider

Consul is een gedistribueerd, maximaal beschikbaar en datacentrumbewust servicedetectieplatform, waaronder eenvoudige serviceregistratie, statuscontrole, foutdetectie en sleutelwaardeopslag. Het is gebaseerd op het uitgangspunt dat elk knooppunt in het datacenter een Consul-agent uitvoert die fungeert als een server of een client. Elke agent communiceert via een schaalbaar geruchtenprotocol.

Een gedetailleerd overzicht van Consul, inclusief vergelijkingen met vergelijkbare oplossingen, is beschikbaar in What is Consul?.

Consul is geschreven in Go en is open source. Gecompileerde downloads zijn beschikbaar voor macOS X, FreeBSD, Linux, Solaris en Windows.

Waarom kiezen voor Consul?

Orleans Als lidmaatschapsprovider is Consul een goede keuze voor het leveren van on-premises oplossingen waarvoor klanten geen bestaande infrastructuur of een coöperatieve IT-provider hoeven te hebben. Consul is een lichtgewicht uitvoerbaar bestand zonder afhankelijkheden, waardoor het gemakkelijk is om in te bouwen in een middlewareoplossing. Wanneer u Consul gebruikt voor het ontdekken, controleren en onderhouden van microservices, biedt volledig integreren met Orleans lidmaatschap eenvoud en gebruiksgemak. Consul biedt ook een lidmaatschapstabel (ook wel bekend als "OrleansCustom System Store") die volledig kan worden geïntegreerd met Orleansclusterbeheer.

Consul instellen

Uitgebreide documentatie over het opzetten van een stabiel Consul-cluster is beschikbaar in de Consul-documentatie, zodat hier geen informatie wordt herhaald. Voor het gemak toont deze handleiding echter hoe u snel Orleans kunt laten draaien met een zelfstandige Consul-agent.

  1. Maak een map om Consul in te installeren (bijvoorbeeld C:\Consul).

  2. Maak een submap: C:\Consul\Data (Consul maakt deze map niet als deze niet bestaat).

  3. Download en pak Consul.exe uit in C:\Consul.

  4. Open een opdrachtprompt op C:\Consul en voer de volgende opdracht uit:

    ./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
    

    In de voorgaande opdracht:

    • agent: Geeft Consul de opdracht om het agentproces uit te voeren dat als host fungeert voor de diensten. Zonder deze switch probeert het Consul-proces RPC te gebruiken om een actieve agent te configureren.
    • -server: Definieert de agent als een server, niet als een client. (Een Consul-klant is een agent die diensten en gegevens host, maar geen stemrechten heeft en kan niet de clusterleider worden).
    • -bootstrap: Het eerste knooppunt (en alleen het eerste!) in een cluster moet worden gebootstrapped om de leiding van het cluster op zich te nemen.
    • -data-dir [path]: Hiermee geeft u het pad op waar alle Consul-gegevens, inclusief de tabel clusterlidmaatschap, worden opgeslagen.
    • -client='0.0.0.0': Informeert Consul op welk IP-adres de service moet worden geopend.

    Er bestaan veel andere parameters, waaronder de optie voor het gebruik van een JSON-configuratiebestand. Zie de Consul-documentatie voor een volledige lijst.

  5. Controleer of Consul draait en gereed is om lidmaatschapsverzoeken te Orleans accepteren door de servicepagina in uw browser te openen.http://localhost:8500/v1/catalog/services Wanneer de browser correct werkt, wordt de volgende JSON weergegeven:

    {
        "consul": []
    }
    

Orleans configureren

Om Orleans te configureren zodat Consul als lidmaatschapsprovider wordt gebruikt, moet het siloproject de Microsoft.Orleans.Clustering.Consul NuGet-pakket refereren. Nadat u de verwijzing hebt toegevoegd, configureert u de lidmaatschapsprovider als volgt in het Program.cs-bestand van de silo:

IHostBuilder builder = Host.CreateDefaultBuilder(args)
    .UseOrleans(silo =>
    {
        silo.UseConsulSiloClustering(options =>
        {
            // The address of the Consul server
            var address = new Uri("http://localhost:8500");
            options.ConfigureConsulClient(address);
        });
    })
    .UseConsoleLifetime();

using IHost host = builder.Build();
host.Run();

De voorgaande code:

Als u de client wilt configureren, verwijst u naar hetzelfde NuGet-pakket en roept u de UseConsulClientClustering-extensiemethode aan.

Client-SDK

Als u Consul wilt gebruiken voor servicedetectie, zijn client-SDK's beschikbaar voor de populairste talen.

Implementatiedetails

De lidmaatschapstabelprovider maakt gebruik van de functionaliteit van Consul's sleutel-/waardearchief, inclusief CAS (Check-And-Set) bewerkingen. Wanneer elke Silo wordt gestart, worden twee sleutelwaardegegevens geregistreerd: één met Silo-details en één die de laatste keer dat de Silo heeft gemeld dat het actief was. De laatste verwijst naar diagnostische 'Ik leef'-vermeldingen, geen heartbeats voor foutdetectie, die rechtstreeks tussen silo's worden verzonden en niet naar de tabel worden geschreven. Alle schrijfbewerkingen naar de tabel maken gebruik van CAS om gelijktijdigheidsbeheer te bieden, zoals vereist door Orleanshet Cluster Management Protocol.

Zodra de silo draait, bekijk deze vermeldingen in een webbrowser op http://localhost:8500/v1/kv/?keys&pretty. De uitvoer ziet er ongeveer als volgt uit:

[
    "orleans/default/192.168.1.11:11111@43165319",
    "orleans/default/192.168.1.11:11111@43165319/iamalive",
    "orleans/default/version"
]

Alle sleutels worden voorafgegaan door orleans. Dit voorvoegsel is vastgelegd in de provider en is bedoeld om keyspace-conflicten met andere Consul-gebruikers te voorkomen. Haal aanvullende informatie voor elke sleutel op door de naam (zonder aanhalingstekens) toe te voegen in de Consul KV-root op http://localhost:8500/v1/kv/. Als u dit doet, wordt de volgende JSON weergegeven:

[
    {
        "LockIndex": 0,
        "Key": "orleans/default/192.168.1.11:11111@43165319",
        "Flags": 0,
        "Value": "[BASE64 UTF8 Encoded String]",
        "CreateIndex": 321,
        "ModifyIndex": 322
    }
]

De codering van de Base64 UTF-8-gecodeerde tekenreeks Value biedt de werkelijke Orleans lidmaatschapsgegevens:

http://localhost:8500/v1/KV/orleans/default/[SiloAddress]

{
    "Hostname": "[YOUR_MACHINE_NAME]",
    "ProxyPort": 30000,
    "StartTime": "2023-05-15T14:22:00.004977Z",
    "Status": 3,
    "SiloName": "Silo_fcad0",
    "SuspectingSilos": []
}

http://localhost:8500/v1/KV/orleans/default/[SiloAddress]/IAmAlive

"2023-05-15T14:27:01.1832828Z"

Wanneer clients verbinding maken, lezen ze de KVs voor alle silo's in het cluster in één HTTP GET-aanroep met behulp van de URI http://localhost:8500/v1/KV/orleans/default/?recurse.

Beperkingen

Houd rekening met enkele beperkingen bij het gebruik van Consul als lidmaatschapsprovider.

Orleans uitgebreid lidmaatschapsprotocol (tabelversie en ETag)

Consul KV biedt momenteel geen ondersteuning voor atomische updates. Daarom implementeert de Orleans Consul-lidmaatschapsprovider alleen het Orleans basislidmaatschapsprotocol, zoals beschreven in Clusterbeheer in Orleans. Het uitgebreide lidmaatschapsprotocol wordt niet ondersteund. Dit uitgebreide protocol is geïntroduceerd als extra, maar niet essentieel, siloconnectiviteitsvalidatie en als basis voor functionaliteit die nog niet is geïmplementeerd.

Meerdere datacenters

Sleutel-waardeparen in Consul worden momenteel niet gerepliceerd tussen de datacenters van Consul. Er bestaat een afzonderlijk project om deze replicatie-inspanning aan te pakken, maar het heeft nog niet aangetoond dat het ondersteuning biedt aan Orleans.

Bij uitvoering in Windows

Wanneer Consul in Windows start, wordt het volgende bericht vastgelegd:

==> WARNING: Windows is not recommended as a Consul server. Do not use in production.

Dit waarschuwingsbericht wordt weergegeven vanwege een gebrek aan focus op testen bij het uitvoeren in een Windows-omgeving, niet vanwege werkelijke bekende problemen. Lees de discussie voordat u beslist of Consul de juiste keuze is.

Mogelijke toekomstige verbeteringen

  1. Bewijzen dat het Consul KV-replicatieproject een Orleans cluster in een WAN-omgeving kan ondersteunen tussen meerdere Consul-datacenters.
  2. Implementeer de herinneringstabel in Consul.
  3. Implementeer het uitgebreide lidmaatschapsprotocol. Het team achter Consul is van plan atomische operaties te implementeren. Zodra deze functionaliteit beschikbaar is, kunnen de beperkingen in de provider mogelijk worden verwijderd.