Konfigurace s více clustery

Konfigurace s více clustery určuje, které clustery jsou aktuálně součástí více clusterů. Nemění se automaticky, ale řídí se operátorem. Proto se liší od mechanismu členství používaného v clusteru, který automaticky určuje sadu sila, která jsou součástí clusteru.

Pro clustery ve službě používáme následující terminologii:

  • Cluster je aktivní , pokud má alespoň jedno aktivní silo a v opačném případě neaktivní .
  • Cluster je připojený , pokud je součástí aktuální konfigurace více clusterů a jinak není připojený .

Aktivní/neaktivní je nezávislá na spojení nebo nepřipojování: všechny čtyři kombinace jsou možné.

Všechny clustery pro konkrétní službu jsou propojeny sítí gossip. Síť gossip šíří informace o konfiguraci a stavu.

Vložení konfigurace

Operátor vydává změny konfigurace vložením do sítě s více clustery. Konfigurace se dají vložit do libovolného clusteru a rozložit odsud do všech aktivních clusterů. Každá nová konfigurace se skládá ze seznamu ID clusteru, které tvoří více clusterů. Obsahuje také časové razítko UTC, které se používá ke sledování šíření prostřednictvím sítě gossip.

Konfigurace s více clustery má zpočátku hodnotu null, což znamená, že seznam s více clustery je prázdný (neobsahuje žádné clustery). Operátor tedy musí nejprve vložit konfiguraci s více clustery. Po vkládání se tato konfigurace zachová ve všech připojených silach (při běhu) a ve všech zadaných kanálech gossip (pokud jsou tyto kanály trvalé).

Představujeme určitá omezení injektáže nových konfigurací, které musí operátor dodržovat:

  • Každá nová konfigurace může přidat několik clusterů nebo odebrat některé clustery (ale ne oba současně).
  • Operátor by neměl vydávat novou konfiguraci, zatímco se stále zpracovává předchozí změna konfigurace.

Tato omezení zajišťují, aby protokoly, jako je protokol s jednou instancí, správně zachovaly vzájemné vyloučení aktivací i při změnách konfigurace.

Agregační interval správy

Konfigurace s více clustery je možné vloženého do libovolného uzlu v jakémkoli clusteru pomocí agregačního intervalu Orleans pro správu. Pokud například chcete vložit konfiguraci s více clustery, která se skládá ze tří clusterů { us1, eu1, us2 }, můžeme předat řetězec výčtu pro agregační interval správy:

var clusters = "us1,eu1,us2".Split(',');
var mgtGrain = client.GetGrain<IManagementGrain>(0);
mgtGrain.InjectMultiClusterConfiguration(clusters, "my comment here"));

Prvním argumentem InjectMultiClusterConfiguration(IEnumerable<String>, String, Boolean) je kolekce ID clusteru, která definuje novou konfiguraci s více clustery. Druhým argumentem je (volitelný) řetězec komentáře, který lze použít k označení konfigurací s libovolnými informacemi, například kdo je vložil a proč.

Existuje volitelný třetí argument, logická hodnota s názvem checkForLaggingSilosFirst, která má výchozí hodnotu true. To znamená, že systém provádí kontrolu co nejlépe, aby zjistil, jestli existují nějaká sila kdekoli, která ještě nedokončila aktuální konfiguraci, a odmítne změnu, pokud najde takový silo. To pomáhá odhalit porušení omezení, že najednou by měla být čekající pouze jedna změna konfigurace (i když ji za všech okolností nemůže zaručit).

Výchozí konfigurace

V situacích, kdy je konfigurace s více clustery známa předem a nasazení je vždy čerstvé (pro testování), můžeme chtít zadat výchozí konfiguraci. Globální konfigurace podporuje volitelný atribut DefaultMultiCluster , který přebírá seznam ID clusteru oddělený čárkami:

var silo = new HostBuilder()
    .UseOrleans(builder =>
    {
        builder.Configure<MultiClusterOptions>(options =>
        {
            options.DefaultMultiCluster = new[] { "us1", "eu1", "us2" };
        })
    })
    .Build();

Po spuštění silo s tímto nastavením zkontroluje, jestli má aktuální konfigurace více clusterů hodnotu null, a pokud ano, vloží danou konfiguraci s aktuálním časovým razítkem UTC.

Upozorňující

Trvalé kanály gossip pro více clusterů (založené na Tabulce Azure) uchovávají poslední vloženou konfiguraci, pokud nejsou explicitně odstraněny. V takovém případě zadání nemá žádný vliv při opětovném nasazení clusteru, DefaultMultiCluster protože konfigurace uložená v kanálech gossip nemá hodnotu null.>

Kanál Gossip

Operátor může také vložit konfiguraci přímo do kanálu gossip. Změny v kanálu se vyberou a automaticky rozšíří pravidelným gossipem na pozadí, i když možná velmi pomalu (použití intervalu správy je mnohem rychlejší). Hrubý odhad doby šíření je 30 sekund (nebo jakýkoli interval gossip je zadán v globální konfiguraci) krát binární logaritmus celkového počtu sil ve všech clusterech. Ale vzhledem k tomu, že dvojice gossip jsou vybrány náhodně, mohou být oba mnohem rychlejší nebo mnohem pomalejší.

Pokud používáte kanál Gossip založený na tabulkách Azure, můžou operátory vložit novou konfiguraci jednoduše úpravou záznamu konfigurace v tabulce OrleansGossipTableAzure pomocí některého nástroje pro úpravu dat v tabulkách Azure. Konfigurační záznam má následující formát:

Name Typ Hodnota
PartitionKey String ID služby
RowKey String "CONFIG"
Clustery String Čárkami oddělený seznam ID clusteru, např. "us1,eu1,us2"
Komentář String volitelný komentář
GossipTimestamp DateTime Časové razítko UTC pro konfiguraci

Poznámka:

Při úpravách tohoto záznamu v úložišti GossipTimestamp je nutné nastavit také novější hodnotu, než má v současné době (jinak se změna ignoruje). Nejvhodnějším a doporučeným způsobem je odstranit GossipTimestamp pole – implementace kanálu gossip ji pak automaticky nahradí správným aktuálním časovým razítkem (používá časové razítko Azure Table Timestamp).

Postupy clusteru

Přidávání nebo odebírání clusteru z více clusterů je často potřeba koordinovat v určitém větším kontextu. Při přidávání nebo odebírání clusterů z více clusterů doporučujeme vždy postupovat podle níže popsaných postupů.

Postup přidání clusteru

  1. Spusťte nový Orleans cluster a počkejte, až budou všechna sila spuštěná.
  2. Vloží konfiguraci, která obsahuje nový cluster.
  3. Začněte směrovat požadavky uživatelů na nový cluster.

Postup odebrání clusteru

  1. Ukončete směrování nových uživatelských požadavků do clusteru.
  2. Vložení konfigurace, která už cluster neobsahuje.
  3. Zastavte všechna sila clusteru.

Jakmile se cluster tímto způsobem odebere, můžete ho znovu přidat pomocí postupu přidání nového clusteru.

Aktivita v clusterech, které nejsou připojené

Může existovat krátká dočasná období, kdy je cluster aktivní i nepřipojil:

  • Nově spuštěný cluster může začít spouštět kód předtím, než bude v konfiguraci s více clustery (mezi kroky 1 a 2 postupu pro přidání clusteru).
  • Cluster, který se vyřadí z provozu, může stále spouštět kód před vypnutím sila (mezi kroky 2 a 3 postupu pro odebrání clusteru).

V těchto přechodných situacích je možné:

  • U zrn globálních instancí s jednou instancí: V clusteru, který není připojený, může mít duplicitní aktivaci.
  • U zrna s verzemi: Aktivace v clusterech, které nejsou připojené, neobdrží oznámení, když se změní stav zrnitosti.