Stateful betrouwbare services configureren

Er zijn twee sets configuratie-instellingen voor betrouwbare services. De ene set is globaal voor alle betrouwbare services in het cluster, terwijl de andere set specifiek is voor een bepaalde betrouwbare service.

Globale configuratie

De configuratie van de globale betrouwbare service wordt opgegeven in het clustermanifest voor het cluster in de sectie KtlLogger. Hiermee kunt u de locatie en grootte van het gedeelde logboek configureren, plus de algemene geheugenlimieten die door de logboekregistratie worden gebruikt. Het clustermanifest is één XML-bestand met instellingen en configuraties die van toepassing zijn op alle knooppunten en services in het cluster. Het bestand wordt meestal ClusterManifest.xml genoemd. U kunt het clustermanifest voor uw cluster zien met behulp van de powershell-opdracht Get-ServiceFabricClusterManifest.

Configuratienamen

Naam Eenheid Standaardwaarde Opmerkingen
WriteBufferMemoryPoolMinimumInKB Kilobytes 8388608 Minimum aantal KB dat in de kernelmodus moet worden toegewezen voor de geheugengroep voor de logboekregistratie-schrijfbuffer. Deze geheugengroep wordt gebruikt voor het opslaan van statusinformatie in de cache voordat u naar de schijf schrijft.
WriteBufferMemoryPoolMaximumInKB Kilobytes Geen limiet De maximale grootte waartoe de geheugengroep voor schrijfbuffers van de logboekregistratie kan toenemen.
SharedLogId GUID "" Hiermee geeft u een unieke GUID te gebruiken voor het identificeren van het standaard gedeelde logboekbestand dat wordt gebruikt door alle betrouwbare services op alle knooppunten in het cluster die de SharedLogId niet opgeven in hun servicespecifieke configuratie. Als SharedLogId is opgegeven, moet SharedLogPath ook worden opgegeven.
SharedLogPath Volledig gekwalificeerde padnaam "" Hiermee geeft u het volledig gekwalificeerde pad op waar het gedeelde logboekbestand wordt gebruikt door alle betrouwbare services op alle knooppunten in het cluster die het SharedLogPath niet opgeven in hun servicespecifieke configuratie. Als SharedLogPath echter is opgegeven, moet ook SharedLogId worden opgegeven.
SharedLogSizeInMB Megabytes 8192 Hiermee geeft u het aantal MB aan schijfruimte statisch toe te wijzen voor het gedeelde logboek. De waarde moet 2048 of groter zijn.

In azure ARM- of on-premises JSON-sjabloon laat het onderstaande voorbeeld zien hoe u het gedeelde transactielogboek dat wordt gemaakt, kunt wijzigen om betrouwbare verzamelingen voor stateful services te back-uden.

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

Voorbeeld van een lokale sectie voor het cluster voor ontwikkelaars

Als u dit wilt wijzigen in uw lokale ontwikkelomgeving, moet u het lokale clustermanifest.xml-bestand bewerken.

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

Opmerkingen

De logboekregistratie heeft een globale pool van geheugen toegewezen uit niet-wisselbare kernelgeheugen die beschikbaar is voor alle betrouwbare services op een knooppunt voor het opslaan van statusgegevens voordat deze wordt geschreven naar het toegewezen logboek dat is gekoppeld aan de betrouwbare servicereplica. De poolgrootte wordt bepaald door de instellingen WriteBufferMemoryPoolMinimumInKB en WriteBufferMemoryPoolMaximumInKB. WriteBufferMemoryPoolMinimumInKB geeft zowel de oorspronkelijke grootte van deze geheugengroep als de laagste grootte op waartoe de geheugengroep kan worden verkleind. WriteBufferMemoryPoolMaximumInKB is de hoogste grootte waartoe de geheugengroep kan groeien. Elke betrouwbare servicereplica die wordt geopend, kan de grootte van de geheugengroep vergroten met een door het systeem bepaalde hoeveelheid tot WriteBufferMemoryPoolMaximumInKB. Als er meer vraag is naar geheugen uit de geheugengroep dan beschikbaar is, worden aanvragen voor geheugen uitgesteld totdat er geheugen beschikbaar is. Als de geheugengroep van de schrijfbuffer te klein is voor een bepaalde configuratie, kunnen de prestaties daarom afnemen.

De instellingen SharedLogId en SharedLogPath worden altijd samen gebruikt om de GUID en locatie voor het standaard gedeelde logboek voor alle knooppunten in het cluster te definiëren. Het standaard gedeelde logboek wordt gebruikt voor alle betrouwbare services die niet de instellingen opgeven in de settings.xml voor de specifieke service. Voor de beste prestaties moeten gedeelde logboekbestanden worden geplaatst op schijven die alleen worden gebruikt voor het gedeelde logboekbestand om conflicten te verminderen.

SharedLogSizeInMB geeft de hoeveelheid schijfruimte op die vooraf moet worden toegewezen voor het standaard gedeelde logboek op alle knooppunten. SharedLogId en SharedLogPath hoeven niet te worden opgegeven om SharedLogSizeInMB te kunnen opgeven.

Servicespecifieke configuratie

U kunt de standaardconfiguraties van stateful Reliable Services wijzigen met behulp van het configuratiepakket (Config) of de service-implementatie (code).

  • Configuratie : configuratie via het configuratiepakket wordt uitgevoerd door het Settings.xml-bestand te wijzigen dat wordt gegenereerd in de hoofdmap van het Microsoft Visual Studio-pakket onder de map Config voor elke service in de toepassing.
  • Code : configuratie via code wordt uitgevoerd door een ReliableStateManager te maken met behulp van een ReliableStateManagerConfiguration-object met de juiste optieset.

De Azure Service Fabric-runtime zoekt standaard naar vooraf gedefinieerde sectienamen in het Settings.xml-bestand en gebruikt de configuratiewaarden tijdens het maken van de onderliggende runtime-onderdelen.

Notitie

Verwijder de sectienamen van de volgende configuraties niet in het Settings.xml-bestand dat wordt gegenereerd in de Visual Studio-oplossing, tenzij u van plan bent om uw service via code te configureren. Voor het wijzigen van de naam van het configuratiepakket of de sectienamen is een codewijziging vereist bij het configureren van de ReliableStateManager.

Configuratie van replicatorbeveiliging

Replicatorbeveiligingsconfiguraties worden gebruikt om het communicatiekanaal te beveiligen dat wordt gebruikt tijdens de replicatie. Dit betekent dat services elkaars replicatieverkeer niet kunnen zien, zodat de gegevens die maximaal beschikbaar worden gemaakt ook veilig zijn. Een lege sectie voor de beveiligingsconfiguratie voorkomt standaard replicatiebeveiliging.

Belangrijk

Op Linux-knooppunten moeten certificaten pem-indeling hebben. Zie Certificaten configureren in Linux voor meer informatie over het zoeken en configureren van certificaten voor Linux.

Standaardsectienaam

ReplicatorSecurityConfig

Notitie

Als u deze sectienaam wilt wijzigen, overschrijft u de parameter replicatorSecuritySectionName in de constructor ReliableStateManagerConfiguration bij het maken van de ReliableStateManager voor deze service.

Replicatorconfiguratie

Replicatorconfiguraties configureren de replicator die verantwoordelijk is voor het uiterst betrouwbaar maken van de status van de stateful Reliable Service door de status lokaal te repliceren en te behouden. De standaardconfiguratie wordt gegenereerd door de Visual Studio-sjabloon en moet voldoende zijn. In deze sectie worden aanvullende configuraties besproken die beschikbaar zijn om de replicator af te stemmen.

Standaardsectienaam

ReplicatorConfig

Notitie

Als u deze sectienaam wilt wijzigen, overschrijft u de parameter replicatorSettingsSectionName in de constructor ReliableStateManagerConfiguration bij het maken van de ReliableStateManager voor deze service.

Configuratienamen

Naam Eenheid Standaardwaarde Opmerkingen
BatchAcknowledgementInterval Seconden 0.015 Tijdsperiode waarvoor de replicator op de secundaire locatie wacht na ontvangst van een bewerking voordat een bevestiging naar de primaire instantie wordt verzonden. Alle andere bevestigingen die moeten worden verzonden voor bewerkingen die binnen dit interval worden verwerkt, worden als één antwoord verzonden.
ReplicatorEndpoint N.v.t. Geen standaardparameter vereist IP-adres en poort die de primaire/secundaire replicator gebruikt om te communiceren met andere replicators in de replicaset. Dit moet verwijzen naar een TCP-resource-eindpunt in het servicemanifest. Raadpleeg Servicemanifestresources voor meer informatie over het definiëren van eindpuntresources in een servicemanifest.
MaxPrimaryReplicationQueueSize Aantal bewerkingen 8192 Maximum aantal bewerkingen in de primaire wachtrij. Een bewerking wordt vrijgemaakt nadat de primaire replicator een bevestiging heeft ontvangen van alle secundaire replicators. Deze waarde moet groter zijn dan 64 en een macht van 2.
MaxSecondaryReplicationQueueSize Aantal bewerkingen 16384 Maximum aantal bewerkingen in de secundaire wachtrij. Een bewerking wordt vrijgemaakt nadat de status maximaal beschikbaar is gemaakt via persistentie. Deze waarde moet groter zijn dan 64 en een macht van 2.
CheckpointThresholdInMB MB 50 Hoeveelheid ruimte in het logboekbestand waarna de status wordt gecontroleerd.
MaxRecordSizeInKB KB 1024 De grootste recordgrootte die de replicator in het logboek kan schrijven. Deze waarde moet een veelvoud zijn van 4 en groter dan 16.
MinLogSizeInMB MB 0 (systeem bepaald) Minimale grootte van het transactionele logboek. Het logboek mag niet worden afgekapt tot een grootte onder deze instelling. 0 geeft aan dat de replicator de minimale grootte van het logboek bepaalt. Het verhogen van deze waarde vergroot de mogelijkheid om gedeeltelijke kopieën en incrementele back-ups uit te voeren, omdat de kans dat relevante logboekrecords worden afgekapt, kleiner wordt.
TruncationThresholdFactor Factor 2 Bepaalt bij welke grootte van het logboek afkapping wordt geactiveerd. De drempelwaarde voor afkapping wordt bepaald door MinLogSizeInMB vermenigvuldigd met TruncationThresholdFactor. TruncationThresholdFactor moet groter zijn dan 1. MinLogSizeInMB * TruncationThresholdFactor moet kleiner zijn dan MaxStreamSizeInMB.
ThrottlingThresholdFactor Factor 4 Bepaalt bij welke grootte van het logboek de replica wordt beperkt. Beperkingsdrempel (in MB) wordt bepaald door Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). De beperkingsdrempel (in MB) moet groter zijn dan de afkappingsdrempel (in MB). De drempelwaarde voor afkapping (in MB) moet kleiner zijn dan MaxStreamSizeInMB.
MaxAccumulatedBackupLogSizeInMB MB 800 Maximale geaccumuleerde grootte (in MB) van back-uplogboeken in een bepaalde back-uplogboekketen. Een incrementele back-upaanvraag mislukt als de incrementele back-up een back-uplogboek genereert dat ervoor zorgt dat de samengevoegde back-uplogboeken omdat de relevante volledige back-up groter is dan deze grootte. In dergelijke gevallen moet de gebruiker een volledige back-up maken.
SharedLogId GUID "" Hiermee geeft u een unieke GUID te gebruiken voor het identificeren van het gedeelde logboekbestand dat met deze replica wordt gebruikt. Normaal gesproken mogen services deze instelling niet gebruiken. Als SharedLogId echter is opgegeven, moet ook SharedLogPath worden opgegeven.
SharedLogPath Volledig gekwalificeerde padnaam "" Hiermee geeft u het volledig gekwalificeerde pad op waar het gedeelde logboekbestand voor deze replica wordt gemaakt. Normaal gesproken mogen services deze instelling niet gebruiken. Als SharedLogPath echter is opgegeven, moet ook SharedLogId worden opgegeven.
SlowApiMonitoringDuration Seconden 300 Hiermee stelt u het bewakingsinterval voor beheerde API-aanroepen in. Voorbeeld: door de gebruiker opgegeven back-up-callbackfunctie. Nadat het interval is verstreken, wordt een waarschuwingsstatusrapport verzonden naar health manager.
LogTruncationIntervalSeconds Seconden 0 Configureerbaar interval waarmee afkapping van logboeken op elke replica wordt gestart. Het wordt gebruikt om ervoor te zorgen dat logboek ook wordt afgekapt op basis van tijd in plaats van alleen logboekgrootte. Deze instelling dwingt ook het opschonen van verwijderde items in een betrouwbare woordenlijst af. Daarom kan het worden gebruikt om ervoor te zorgen dat verwijderde items tijdig worden verwijderd.
EnableStableReads Booleaans False Als u stabiele leesbewerkingen inschakelt, worden secundaire replica's beperkt tot het retourneren van waarden die quorum-acked zijn.

Voorbeeldconfiguratie via code

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

Voorbeeldconfiguratiebestand

<?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>

Opmerkingen

BatchAcknowledgementInterval beheert de replicatielatentie. Een waarde van '0' resulteert in de laagst mogelijke latentie, ten koste van de doorvoer (omdat er meer bevestigingsberichten moeten worden verzonden en verwerkt, elk met minder bevestigingen). Hoe groter de waarde voor BatchAcknowledgementInterval, hoe hoger de algehele replicatiedoorvoer, ten koste van een hogere latentie van bewerkingen. Dit vertaalt zich rechtstreeks in de latentie van transactiedoorvoeringen.

De waarde voor CheckpointThresholdInMB bepaalt de hoeveelheid schijfruimte die de replicator kan gebruiken om statusgegevens op te slaan in het toegewezen logboekbestand van de replica. Het verhogen van deze waarde naar een hogere waarde dan de standaardwaarde kan leiden tot snellere herconfiguratietijden wanneer een nieuwe replica wordt toegevoegd aan de set. Dit komt door de gedeeltelijke statusoverdracht die plaatsvindt vanwege de beschikbaarheid van meer bewerkingen in het logboek. Dit kan de hersteltijd van een replica na een crash mogelijk verhogen.

De instelling MaxRecordSizeInKB definieert de maximale grootte van een record die door de replicator in het logboekbestand kan worden geschreven. In de meeste gevallen is de standaardgrootte van 1024 kB optimaal. Als de service er echter voor zorgt dat grotere gegevensitems deel uitmaken van de statusgegevens, moet deze waarde mogelijk worden verhoogd. Het heeft weinig voordeel om MaxRecordSizeInKB kleiner dan 1024 te maken, omdat kleinere records alleen de ruimte gebruiken die nodig is voor de kleinere record. We verwachten dat deze waarde slechts in zeldzame gevallen hoeft te worden gewijzigd.

De instellingen SharedLogId en SharedLogPath worden altijd samen gebruikt om een service een afzonderlijk gedeeld logboek te laten gebruiken van het standaard gedeelde logboek voor het knooppunt. Voor de beste efficiëntie moeten zoveel mogelijk services hetzelfde gedeelde logboek opgeven. Gedeelde logboekbestanden moeten worden geplaatst op schijven die uitsluitend worden gebruikt voor het gedeelde logboekbestand om conflicten tussen hoofdbewegingen te verminderen. We verwachten dat deze waarde slechts in zeldzame gevallen hoeft te worden gewijzigd.

Volgende stappen