Konfigurace stavových spolehlivých služeb

Pro spolehlivé služby existují dvě sady nastavení konfigurace. Jedna sada je globální pro všechny spolehlivé služby v clusteru, zatímco druhá sada je specifická pro konkrétní spolehlivou službu.

Globální konfigurace

Globální konfigurace spolehlivé služby se zadává v manifestu clusteru pro cluster v části KtlLogger. Umožňuje konfiguraci umístění a velikosti sdíleného protokolu a navíc globální limity paměti používané protokolovacím nástrojem. Manifest clusteru je jeden soubor XML, který obsahuje nastavení a konfigurace, které platí pro všechny uzly a služby v clusteru. Soubor se obvykle nazývá ClusterManifest.xml. Manifest clusteru pro váš cluster můžete zobrazit pomocí příkazu PowerShellu Get-ServiceFabricClusterManifest.

Názvy konfigurací

Název Unit Default value Poznámky
WriteBufferMemoryPoolMinimumInKB Kilobyty 8388608 Minimální počet kB, který se má přidělit v režimu jádra pro fond paměti vyrovnávací paměti protokolovacího modulu. Tento fond paměti slouží k ukládání informací o stavu do mezipaměti před zápisem na disk.
WriteBufferMemoryPoolMaximumInKB Kilobyty Bez omezení Maximální velikost, na kterou může fond paměti vyrovnávací paměti protokolovacího modulu zvětšit.
SharedLogId Identifikátor GUID "" Určuje jedinečný identifikátor GUID, který se má použít k identifikaci výchozího souboru sdíleného protokolu používaného všemi spolehlivými službami ve všech uzlech v clusteru, které ve své konfiguraci specifické pro službu nezadávají id SharedLogId. Pokud je zadán parametr SharedLogId, musí být zadána také vlastnost SharedLogPath.
SharedLogPath Plně kvalifikovaný název cesty "" Určuje plně kvalifikovanou cestu, kde soubor sdíleného protokolu používaný všemi spolehlivými službami na všech uzlech v clusteru, který ve své konfiguraci specifické pro službu neurčoval cestu SharedLogPath. Pokud je však zadána vlastnost SharedLogPath, musí být zadána také vlastnost SharedLogId.
SharedLogSizeInMB Megabyty 8192 Určuje počet MB místa na disku, který se má staticky přidělit pro sdílený protokol. Hodnota musí být 2048 nebo větší.

V šabloně AZURE ARM nebo místní šablony JSON níže vidíte, jak změnit sdílený transakční protokol, který se vytvoří, aby se vrátily všechny spolehlivé kolekce stavových služeb.

"fabricSettings": [{
    "name": "KtlLogger",
    "parameters": [{
        "name": "SharedLogSizeInMB",
        "value": "4096"
    }]
}]

Ukázka části manifestu místního vývojářského clusteru

Pokud to chcete změnit v místním vývojovém prostředí, musíte upravit místní soubor clustermanifest.xml.

   <Section Name="KtlLogger">
     <Parameter Name="SharedLogSizeInMB" Value="4096"/>
     <Parameter Name="WriteBufferMemoryPoolMinimumInKB" Value="8192" />
     <Parameter Name="WriteBufferMemoryPoolMaximumInKB" Value="8192" />
     <Parameter Name="SharedLogId" Value="{7668BB54-FE9C-48ed-81AC-FF89E60ED2EF}"/>
     <Parameter Name="SharedLogPath" Value="f:\SharedLog.Log"/>
   </Section>

Poznámky

Protokolovací modul má globální fond paměti přidělený z paměti bez stránkovaného jádra, která je k dispozici všem spolehlivým službám na uzlu pro ukládání dat stavu do mezipaměti před zápisem do vyhrazeného protokolu přidruženého k spolehlivé replice služby. Velikost fondu je řízena nastavením WriteBufferMemoryPoolMinimumInKB a WriteBufferMemoryPoolMaximumInKB. WriteBufferMemoryPoolMinimumInKB určuje počáteční velikost tohoto fondu paměti i nejnižší velikost, na kterou se fond paměti může zmenšit. WriteBufferMemoryPoolMaximumInKB je nejvyšší velikost, na kterou může fond paměti růst. Každá otevřená replika služby může zvýšit velikost fondu paměti systémem určenou velikost až WriteBufferMemoryPoolMaximumInKB. Pokud je z fondu paměti více požadavků, než je k dispozici, požadavky na paměť budou zpožděny, dokud nebude k dispozici paměť. Proto pokud je fond paměti vyrovnávací paměti pro zápis příliš malý pro konkrétní konfiguraci, může dojít k snížení výkonu.

Nastavení SharedLogId a SharedLogPath se vždy používají společně k definování identifikátoru GUID a umístění výchozího sdíleného protokolu pro všechny uzly v clusteru. Výchozí sdílený protokol se používá pro všechny spolehlivé služby, které nezadávají nastavení v settings.xml pro konkrétní službu. Pro zajištění nejlepšího výkonu by měly být sdílené soubory protokolu umístěny na disky, které se používají výhradně pro soubor sdíleného protokolu, aby se snížila kolize.

SharedLogSizeInMB určuje velikost místa na disku, které se má předem přidělit pro výchozí sdílený protokol ve všech uzlech. SharedLogId a SharedLogPath není nutné zadávat, aby bylo možné zadat SharedLogSizeInMB.

Konfigurace specifická pro službu

Výchozí konfigurace stavové služby Reliable Services můžete upravit pomocí konfiguračního balíčku (konfigurace) nebo implementace služby (kódu).

  • Konfigurace – Konfigurace prostřednictvím konfiguračního balíčku se provádí změnou souboru Settings.xml vygenerovaného v kořenovém adresáři balíčku sady Microsoft Visual Studio ve složce Konfigurace pro každou službu v aplikaci.
  • Kód – Konfigurace prostřednictvím kódu se provádí vytvořením ReliableStateManager pomocí objektu ReliableStateManagerConfiguration s odpovídající sadou možností.

Modul runtime Azure Service Fabric ve výchozím nastavení hledá předdefinované názvy oddílů v souboru Settings.xml a využívá konfigurační hodnoty při vytváření základních komponent modulu runtime.

Poznámka:

Neodstraňovat názvy oddílů následujících konfigurací v souboru Settings.xml vygenerovaném v řešení sady Visual Studio, pokud neplánujete službu konfigurovat prostřednictvím kódu. Přejmenování názvů konfiguračního balíčku nebo oddílů bude při konfiguraci ReliableStateManager vyžadovat změnu kódu.

Konfigurace zabezpečení replikátoru

Konfigurace zabezpečení replikátoru slouží k zabezpečení komunikačního kanálu, který se používá během replikace. To znamená, že služby nebudou moct vidět provoz replikace mezi sebou a zajistit také zabezpečení dat, která jsou vysoce dostupná. Ve výchozím nastavení oddíl konfigurace prázdného zabezpečení brání zabezpečení replikace.

Důležité

V uzlech Linuxu musí být certifikáty formátované PEM. Další informace o vyhledání a konfiguraci certifikátů pro Linux najdete v tématu Konfigurace certifikátů v Linuxu.

Výchozí název oddílu

ReplicatorSecurityConfig

Poznámka:

Chcete-li změnit název tohoto oddílu, přepište parametr replicatorSecuritySectionName na ReliableStateManagerConfiguration konstruktor při vytváření ReliableStateManager pro tuto službu.

Konfigurace replikátoru

Konfigurace replikátoru konfigurují replikátor, který je zodpovědný za zajištění vysoké spolehlivosti stavové služby Reliable Service tím, že replikuje a udržuje stav místně. Výchozí konfigurace je generována šablonou sady Visual Studio a měla by stačit. Tato část popisuje další konfigurace, které jsou k dispozici pro ladění replikátoru.

Výchozí název oddílu

ReplicatorConfig

Poznámka:

Chcete-li změnit název tohoto oddílu, přepište parametr replicatorSettingsSectionName konstruktor ReliableStateManagerConfiguration při vytváření ReliableStateManager pro tuto službu.

Názvy konfigurací

Název Unit Default value Poznámky
BatchAcknowledgementInterval Sekundy 0,015 Časové období, pro které replikátor na sekundární straně čeká po přijetí operace před odesláním potvrzení na primární server. Všechny další potvrzení, které se mají odeslat pro operace zpracovávané v tomto intervalu, se odesílají jako jedna odpověď.
ReplicatorEndpoint Bez výchozího parametru IP adresa a port, které bude primární/sekundární replikátor používat ke komunikaci s ostatními replikátory v sadě replik. V manifestu služby by se měl odkazovat na koncový bod prostředku TCP. Další informace o definování prostředků koncového bodu v manifestu služby najdete v prostředcích manifestu manifestu služby.
MaxPrimaryReplicationQueueSize Počet operací 8192 Maximální počet operací v primární frontě Operace se uvolní poté, co primární replikátor obdrží potvrzení ze všech sekundárních repliktorů. Tato hodnota musí být větší než 64 a mocnina 2.
MaxSecondaryReplicationQueueSize Počet operací 16384 Maximální počet operací v sekundární frontě Operace se uvolní po zajištění vysoké dostupnosti stavu prostřednictvím trvalosti. Tato hodnota musí být větší než 64 a mocnina 2.
CheckpointThresholdInMB MB 50 Velikost místa v souboru protokolu, po kterém je stav kontrolní bod.
MaxRecordSizeInKB kB 1024 Největší velikost záznamu, kterou může replikátor zapisovat do protokolu. Tato hodnota musí být násobkem 4 a větší než 16.
MinLogSizeInMB MB 0 (systém určený) Minimální velikost transakčního protokolu. Protokol nebude moci zkrátit velikost pod tímto nastavením. 0 označuje, že replikátor určí minimální velikost protokolu. Zvýšení této hodnoty zvyšuje možnost provádění částečných kopií a přírůstkových záloh, protože se snižuje pravděpodobnost zkrácení relevantních záznamů protokolu.
TruncationThresholdFactor Faktor 2 Určuje, jakou velikost protokolu se aktivuje zkrácení. Prahová hodnota zkrácení je určena hodnotou MinLogSizeInMB vynásobenou hodnotou TruncationThresholdFactor. TruncationThresholdFactor musí být větší než 1. MinLogSizeInMB * TruncationThresholdFactor musí být menší než MaxStreamSizeInMB.
OmezeníthrottlingThresholdFactor Koeficient 4 Určuje, jakou velikost protokolu se replika začne omezovat. Prahová hodnota omezování (v MB) je určená hodnotou Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). Prahová hodnota omezování (v MB) musí být větší než prahová hodnota zkrácení (v MB). Prahová hodnota zkrácení (v MB) musí být menší než MaxStreamSizeInMB.
MaxAccumulatedBackupLogSizeInMB MB 800 Maximální kumulovaná velikost (v MB) protokolů zálohování v daném řetězu protokolů zálohování. Požadavky na přírůstkové zálohování selžou, pokud by přírůstkové zálohování vygenerovalo protokol zálohování, který by způsobil kumulované protokoly zálohování, protože příslušná úplná záloha bude větší než tato velikost. V takových případech je uživatel nutný k úplnému zálohování.
SharedLogId Identifikátor GUID "" Určuje jedinečný identifikátor GUID, který se má použít k identifikaci souboru sdíleného protokolu použitého s touto replikou. Služby by obvykle neměly toto nastavení používat. Pokud je však zadán parametr SharedLogId, musí být zadána také vlastnost SharedLogPath.
SharedLogPath Plně kvalifikovaný název cesty "" Určuje plně kvalifikovanou cestu, kam se vytvoří soubor sdíleného protokolu pro tuto repliku. Služby by obvykle neměly toto nastavení používat. Pokud je však zadána vlastnost SharedLogPath, musí být zadána také vlastnost SharedLogId.
SlowApiMonitoringDuration Sekundy 300 Nastaví interval monitorování pro spravovaná volání rozhraní API. Příklad: Uživatel zadal funkci zpětného volání zálohování. Po uplynutí intervalu se do Správce stavu odešle zpráva o stavu upozornění.
LogTruncationIntervalSeconds Sekundy 0 Konfigurovatelný interval, ve kterém se v každé replice zahájí zkrácení protokolu. Používá se k zajištění zkrácení protokolu také na základě času místo velikosti protokolu. Toto nastavení také vynutí vymazání odstraněných položek ve spolehlivém slovníku. Proto se dá použít k tomu, aby se odstraněné položky vymazaly včas.
EnableStableReads Logický False Povolení stabilních čtení omezuje sekundární repliky na vrácení hodnot, které byly kvorum zatěžovány.

Ukázková konfigurace prostřednictvím kódu

class Program
{
    /// <summary>
    /// This is the entry point of the service host process.
    /// </summary>
    static void Main()
    {
        ServiceRuntime.RegisterServiceAsync("HelloWorldStatefulType",
            context => new HelloWorldStateful(context, 
                new ReliableStateManager(context, 
        new ReliableStateManagerConfiguration(
                        new ReliableStateManagerReplicatorSettings()
            {
                RetryInterval = TimeSpan.FromSeconds(3)
                        }
            )))).GetAwaiter().GetResult();
    }
}    
class MyStatefulService : StatefulService
{
    public MyStatefulService(StatefulServiceContext context, IReliableStateManagerReplica stateManager)
        : base(context, stateManager)
    { }
    ...
}

Ukázkový konfigurační soubor

<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <Section Name="ReplicatorConfig">
      <Parameter Name="ReplicatorEndpoint" Value="ReplicatorEndpoint" />
      <Parameter Name="BatchAcknowledgementInterval" Value="0.05"/>
      <Parameter Name="CheckpointThresholdInMB" Value="512" />
   </Section>
   <Section Name="ReplicatorSecurityConfig">
      <Parameter Name="CredentialType" Value="X509" />
      <Parameter Name="FindType" Value="FindByThumbprint" />
      <Parameter Name="FindValue" Value="9d c9 06 b1 69 dc 4f af fd 16 97 ac 78 1e 80 67 90 74 9d 2f" />
      <Parameter Name="StoreLocation" Value="LocalMachine" />
      <Parameter Name="StoreName" Value="My" />
      <Parameter Name="ProtectionLevel" Value="EncryptAndSign" />
      <Parameter Name="AllowedCommonNames" Value="My-Test-SAN1-Alice,My-Test-SAN1-Bob" />
   </Section>
</Settings>

Poznámky

BatchAcknowledgementInterval řídí latenci replikace. Hodnota 0 má za následek nejnižší možnou latenci za cenu propustnosti (protože se musí odesílat a zpracovávat další zprávy potvrzení, přičemž každý obsahuje méně potvrzení). Čím větší je hodnota pro BatchAcknowledgementInterval, tím vyšší je celková propustnost replikace za cenu vyšší latence operace. To se přímo překládá na latenci potvrzení transakcí.

Hodnota CheckpointThresholdInMB určuje velikost místa na disku, které replikátor může použít k ukládání informací o stavu ve vyhrazeném souboru protokolu repliky. Zvýšení této hodnoty na vyšší hodnotu, než je výchozí hodnota, může vést k rychlejší rekonfiguraci při přidání nové repliky do sady. Důvodem je částečný přenos stavu, který probíhá kvůli dostupnosti více historie operací v protokolu. To může potenciálně zvýšit dobu obnovení repliky po chybovém ukončení.

Nastavení MaxRecordSizeInKB definuje maximální velikost záznamu, který může zapisovat replikátor do souboru protokolu. Ve většině případů je optimální výchozí velikost záznamů o velikosti 1024 kB. Pokud však služba způsobuje, že větší datové položky jsou součástí informací o stavu, může být potřeba tuto hodnotu zvýšit. Pokud je hodnota MaxRecordSizeInKB menší než 1024, menší záznamy využívají jenom místo potřebné pro menší záznam. Očekáváme, že tato hodnota se bude muset změnit pouze ve výjimečných případech.

Nastavení SharedLogId a SharedLogPath se vždy používají společně k tomu, aby služba používala samostatný sdílený protokol od výchozího sdíleného protokolu pro uzel. Pro zajištění co nejlepší efektivity by měl co nejvíce služeb zadat stejný sdílený protokol. Sdílené soubory protokolu by se měly umístit na disky, které se používají výhradně pro sdílený soubor protokolu, aby se snížila kolize pohybu hlavy. Očekáváme, že tato hodnota se bude muset změnit pouze ve výjimečných případech.

Další kroky