Konfigurace stavových spolehlivých služeb

Existují dvě sady nastavení konfigurace pro spolehlivé služby. 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 je určená v manifestu clusteru v části KtlLogger. Umožňuje konfiguraci umístění a velikosti sdíleného protokolu plus 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í

Name Jednotka Výchozí hodnota Poznámky
WriteBufferMemoryPoolMinimumInKB Kilobajtech 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 nástroje pro zápis. Tento fond paměti slouží k ukládání informací o stavu do mezipaměti před zápisem na disk.
WriteBufferMemoryPoolMaximumInKB Kilobajtech Bez omezení Maximální velikost, do které se fond paměti vyrovnávací paměti zápisu protokolovacího nástroje může zvětšit.
Id sdíleného protokolu Identifikátor GUID "" Určuje jedinečný identifikátor GUID, který se má použít k identifikaci výchozího sdíleného souboru protokolu používaného všemi spolehlivými službami na všech uzlech v clusteru, které nezadávají SharedLogId v konfiguraci specifické pro službu. Pokud je zadána hodnota SharedLogId, musí být zadána také cesta SharedLogPath.
SharedLogPath Plně kvalifikovaný název cesty "" Určuje plně kvalifikovanou cestu, kde sdílený soubor protokolu používaný všemi spolehlivými službami na všech uzlech v clusteru, které nezadávají SharedLogPath ve své konfiguraci specifické pro službu. Pokud je však zadán Parametr SharedLogPath, musí být zadáno také SharedLogId.
SharedLogSizeInMB Megabajtů 8192 Určuje počet MB místa na disku, které se má staticky přidělit sdílenému protokolu. Hodnota musí být 2048 nebo větší.

Následující příklad v Azure ARM nebo místní šabloně JSON ukazuje, jak změnit sdílený transakční protokol, který se vytvoří za účelem zálohování spolehlivých kolekcí stavových služeb.

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

Část manifestu ukázkového 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í clustermanifest.xml soubor.

   <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í nástroj má globální fond paměti přidělený z nestránkované paměti 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 ke spolehlivé replice služby. Velikost fondu se řídí nastavením WriteBufferMemoryPoolMinimumInKB a WriteBufferMemoryPoolMaximumInKB. WriteBufferMemoryPoolMinimumInKB určuje počáteční velikost tohoto fondu paměti a nejnižší velikost, na kterou se může fond paměti zmenšit. WriteBufferMemoryPoolMaximumInKB je nejvyšší velikost, do které se fond paměti může zvětšit. Každá spolehlivá replika služby, která je otevřena, může zvětšit velikost fondu paměti o množství stanovené systémem až do WriteBufferMemoryPoolMaximumInKB. Pokud je ve fondu paměti větší poptávka, než je k dispozici, požadavky na paměť se zpozdí, dokud nebude paměť k dispozici. Proto pokud je fond paměti pro zápis pro konkrétní konfiguraci příliš malý, může dojít k snížení výkonu.

Nastavení SharedLogId a SharedLogPath se vždy používají společně k definování 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 se sdílené soubory protokolu měly umístit na disky, které se používají výhradně pro sdílený soubor protokolu, aby se omezily kolize.

SharedLogSizeInMB určuje velikost místa na disku, které se má předem přidělit pro výchozí sdílený protokol na 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ých Reliable Services můžete upravit pomocí konfiguračního balíčku (Config) nebo implementace služby (kódu).

  • Konfigurace – konfigurace prostřednictvím konfiguračního balíčku se provádí změnou souboru Settings.xml, který se vygeneruje v kořenovém adresáři balíčku sady Microsoft Visual Studio ve složce Config 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 příslušnými nastavenými možnostmi.

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

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 nakonfigurovat službu prostřednictvím kódu. Přejmenování konfiguračního balíčku nebo názvů oddílů bude vyžadovat změnu kódu při konfiguraci ReliableStateManager.

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 vzájemně zobrazit provoz replikace, což zajišťuje, aby data, která jsou vysoce dostupná, byla také zabezpečená. Ve výchozím nastavení brání zabezpečení replikace prázdný oddíl konfigurace zabezpečení.

Důležité

Na linuxových uzlech musí být certifikáty ve formátu 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ři vytváření ReliableStateManagerManager pro tuto službu přepište parametr replicatorSecuritySectionName konstruktor ReliableStateManagerConfiguration.

Konfigurace replikátoru

Konfigurace replikátoru konfigurují replikátor, který je zodpovědný za zajištění vysoké spolehlivosti stavové služby Reliable Service replikací a místním uchováváním stavu. 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 na konstruktor ReliableStateManagerConfiguration při vytváření ReliableStateManager pro tuto službu.

Názvy konfigurací

Name Jednotka Výchozí hodnota Poznámky
BatchAcknowledgementInterval Sekundy 0.015 Časové období, po které replikátor v sekundární databázi čeká po přijetí operace před odesláním potvrzení zpět primárnímu serveru. Veškerá další potvrzení, která se mají odeslat pro operace zpracovávané v tomto intervalu, se odesílají jako jedna odpověď.
ReplicatorEndpoint Žádný výchozí parametr IP adresa a port, které primární/sekundární replikátor použije ke komunikaci s ostatními replikátory v sadě replik. To by mělo odkazovat na koncový bod prostředku TCP v manifestu služby. Další informace o definování prostředků koncového bodu v manifestu služby najdete v tématu Prostředky 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í od všech sekundárních replikátorů. 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 jehož uplynutí je stav označen kontrolním bodem.
MaxRecordSizeInKB KB 1024 Největší velikost záznamu, kterou může replikátor zapisovat do protokolu. Tato hodnota musí být násobek 4 a větší než 16.
MinLogSizeInMB MB 0 (systém je určen) Minimální velikost transakčního protokolu. Protokol nebude moct zkrátit na velikost nižší než toto nastavení. Hodnota 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 sníží pravděpodobnost zkrácení relevantních záznamů protokolu.
TruncationThresholdFactor Faktor 2 Určuje, při jaké velikosti 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.
ThrottlingThresholdFactor Faktor 4 Určuje, při jaké velikosti protokolu se začne omezovat replika. Prahová hodnota omezování (v MB) je určena hodnotou Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). Prahová hodnota omezení (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 nahromaděné 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 povinen provést úplnou zálohu.
SharedLogId Identifikátor GUID "" Určuje jedinečný identifikátor GUID, který se má použít k identifikaci sdíleného souboru 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é cesta SharedLogPath.
SharedLogPath Plně kvalifikovaný název cesty "" Určuje plně kvalifikovanou cestu, kde se vytvoří sdílený soubor protokolu pro tuto repliku. Služby by obvykle neměly toto nastavení používat. Pokud je však zadána cesta SharedLogPath, musí být zadáno také SharedLogId.
SlowApiMonitoringDuration Sekundy 300 Nastaví interval monitorování pro volání spravovaného 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 s upozorněním.
LogTruncationIntervalSeconds Sekundy 0 Konfigurovatelný interval, ve kterém se u každé repliky zahájí zkrácení protokolu. Používá se k zajištění zkrácení protokolu také na základě času, nikoli pouze velikosti protokolu. Toto nastavení také vynutí vymazání odstraněných položek ve spolehlivém slovníku. Proto ho můžete použít k zajištění toho, aby se odstraněné položky vymazaly včas.
EnableStableReads Logická hodnota Ne Povolení stabilního čtení omezí sekundární repliky na vracené hodnoty, které byly naváděny do kvora.

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 musí být odesláno a zpracováno více potvrzovacích zpráv, z nichž každá obsahuje méně potvrzení). Čím větší je hodnota BatchAcknowledgementInterval, tím vyšší je celková propustnost replikace za cenu vyšší latence operace. To přímo znamená latenci potvrzení transakcí.

Hodnota CheckpointThresholdInMB určuje množství místa na disku, které replikátor může použít k ukládání informací o stavu do vyhrazeného souboru protokolu repliky. Zvýšení této hodnoty na vyšší než výchozí hodnotu by mohlo vést k rychlejší rekonfiguraci, když se do sady přidá nová replika. Důvodem je částečný přenos stavu, ke kterému dochází kvůli dostupnosti více historie operací v protokolu. To může potenciálně prodloužit dobu obnovení repliky po chybovém ukončení.

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

Nastavení SharedLogId a SharedLogPath se vždy používají společně, 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 stejný sdílený protokol zadat co nejvíce služeb. 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 omezily kolize pohybu hlavy. Očekáváme, že tuto hodnotu bude potřeba změnit jen ve výjimečných případech.

Další kroky