Stateful betrouwbare services configureren
Er zijn twee sets configuratie-instellingen voor betrouwbare services. Eén set is globaal voor alle betrouwbare services in het cluster, terwijl de andere set specifiek is voor een bepaalde betrouwbare service.
Globale configuratie
De globale betrouwbare serviceconfiguratie wordt opgegeven in het clustermanifest voor het cluster onder de sectie KtlLogger. Hiermee kunt u de gedeelde logboeklocatie en -grootte configureren plus de globale 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 | Default value | Opmerkingen |
---|---|---|---|
WriteBufferMemoryPoolMinimumInKB | Kilobytes | 8388608 | Minimaal aantal KB dat moet worden toegewezen in de kernelmodus voor de geheugengroep voor de schrijfbuffer van de logboekregistratie. Deze geheugengroep wordt gebruikt voor het opslaan van statusinformatie in de cache voordat u naar de schijf schrijft. |
WriteBufferMemoryPoolMaximumInKB | Kilobytes | Geen limiet | Maximale grootte waarop de geheugengroep voor schrijfbuffers voor logboekregistratie kan groeien. |
SharedLogId | GUID | "" | Hiermee geeft u een unieke GUID op die moet worden gebruikt voor het identificeren van het standaard gedeelde logboekbestand dat wordt gebruikt door alle betrouwbare services op alle knooppunten in het cluster die niet de SharedLogId 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 dat wordt gebruikt door alle betrouwbare services op alle knooppunten in het cluster die niet het SharedLogPath opgeven in hun servicespecifieke configuratie. Als SharedLogPath echter is opgegeven, moet SharedLogId ook worden opgegeven. |
SharedLogSizeInMB | Megabytes | 8192 | Hiermee geeft u het aantal MB aan schijfruimte dat statisch moet worden toegewezen voor het gedeelde logboek. De waarde moet 2048 of groter zijn. |
In de Azure ARM- of on-premises JSON-sjabloon ziet u in het onderstaande voorbeeld hoe u het gedeelde transactielogboek wijzigt dat wordt gemaakt om een back-up te maken van betrouwbare verzamelingen voor stateful services.
"fabricSettings": [{
"name": "KtlLogger",
"parameters": [{
"name": "SharedLogSizeInMB",
"value": "4096"
}]
}]
Voorbeeld van het lokale clustermanifest 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 groep geheugen toegewezen uit niet-gepaginad kernelgeheugen dat beschikbaar is voor alle betrouwbare services op een knooppunt voor cachingstatusgegevens voordat deze naar het toegewezen logboek wordt geschreven dat is gekoppeld aan de betrouwbare servicereplica. De poolgrootte wordt bepaald door de instellingen WriteBufferMemoryPoolMinimumInKB en WriteBufferMemoryPoolMaximumInKB. WriteBufferMemoryPoolMinimumInKB geeft zowel de initiële grootte van deze geheugengroep als de laagste grootte aan waarop de geheugengroep kan verkleinen. WriteBufferMemoryPoolMaximumInKB is de hoogste grootte waarop de geheugenpool kan groeien. Elke betrouwbare servicereplica die wordt geopend, kan de grootte van de geheugengroep verhogen door een door het systeem vastgestelde hoeveelheid tot WriteBufferMemoryPoolMaximumInKB. Als er meer geheugen van de geheugengroep nodig is dan beschikbaar is, worden aanvragen voor geheugen uitgesteld totdat het geheugen beschikbaar is. Als de geheugengroep voor de schrijfbuffer daarom te klein is voor een bepaalde configuratie, kunnen de prestaties lijden.
De sharedLogId- en SharedLogPath-instellingen 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 de instellingen in de settings.xml voor de specifieke service niet opgeven. Voor de beste prestaties moeten gedeelde logboekbestanden worden geplaatst op schijven die uitsluitend worden gebruikt voor het gedeelde logboekbestand om conflicten te verminderen.
SharedLogSizeInMB geeft de hoeveelheid schijfruimte op die 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 stateful Reliable Services-standaardconfiguraties 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 Configuratie 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 verbruikt de configuratiewaarden tijdens het maken van de onderliggende runtimeonderdelen.
Notitie
Verwijder niet de sectienamen van de volgende configuraties 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. Als u de naam van het configuratiepakket of de sectienamen wijzigt, moet de code worden gewijzigd bij het configureren van reliableStateManager.
Configuratie van replicatorbeveiliging
Replicatorbeveiligingsconfiguraties worden gebruikt om het communicatiekanaal te beveiligen dat tijdens de replicatie wordt gebruikt. Dit betekent dat services elkaars replicatieverkeer niet kunnen zien, zodat de gegevens die maximaal beschikbaar zijn, ook veilig zijn. Standaard voorkomt een lege beveiligingsconfiguratiesectie replicatiebeveiliging.
Belangrijk
Op Linux-knooppunten moeten certificaten met PEM-indeling zijn opgemaakt. 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 reliableStateManagerConfiguration-constructor bij het maken van de ReliableStateManager voor deze service.
Replicatorconfiguratie
Replicatorconfiguraties configureren de replicator die verantwoordelijk is voor het maken van de stateful Reliable Service-status zeer betrouwbaar 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 vindt u informatie over aanvullende configuraties 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 ReliableStateManagerConfiguration-constructor bij het maken van de ReliableStateManager voor deze service.
Configuratienamen
Naam | Eenheid | Default value | Opmerkingen |
---|---|---|---|
BatchAcknowledgementInterval | Seconden | 0,015 | De periode waarvoor de replicator op de secundaire server wacht na ontvangst van een bewerking voordat een bevestiging naar de primaire wordt teruggestuurd. 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 ontvangt 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 via persistentie. Deze waarde moet groter zijn dan 64 en een macht van 2. |
CheckpointThresholdInMB | MB | 50 | Hoeveelheid logboekbestandruimte 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 (door het 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 logboekgrootte bepaalt. Als u deze waarde verhoogt, wordt de mogelijkheid vergroot om gedeeltelijke kopieën en incrementele back-ups uit te voeren, omdat de kans dat relevante logboekrecords worden afgekapt, wordt verlaagd. |
TruncationThresholdFactor | Factor | 2 | Bepaalt 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 op welke grootte van het logboek de replica wordt beperkt. De drempelwaarde voor beperking (in MB) wordt bepaald door Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). De drempelwaarde voor bandbreedtebeperking (in MB) moet groter zijn dan de drempelwaarde voor afkapping (in MB). De drempelwaarde voor afkapping (in MB) moet kleiner zijn dan MaxStreamSizeInMB. |
MaxAccumulatedBackupLogSizeInMB | MB | 800 | Maximale totale 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 waardoor de samengevoegde back-uplogboeken worden veroorzaakt, 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 SharedLogPath ook worden opgegeven. |
SharedLogPath | Volledig gekwalificeerde padnaam | "" | Hiermee geeft u het volledig gekwalificeerde pad waarin het gedeelde logboekbestand voor deze replica wordt gemaakt. Normaal gesproken mogen services deze instelling niet gebruiken. Als SharedLogPath echter is opgegeven, moet SharedLogId ook worden opgegeven. |
SlowApiMonitoringDuration | Seconden | 300 | Hiermee stelt u het bewakingsinterval voor beheerde API-aanroepen in. Voorbeeld: door de gebruiker opgegeven back-up callback-functie. Nadat het interval is verstreken, wordt een waarschuwingsstatusrapport verzonden naar Health Manager. |
LogTruncationIntervalSeconds | Seconden | 0 | Configureerbaar interval waarmee afkapping van logboeken wordt geïnitieerd op elke replica. Het wordt gebruikt om ervoor te zorgen dat logboeken ook worden 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 opgeschoond. |
EnableStableReads | Booleaanse waarde | Onwaar | Door stabiele leesbewerkingen in te schakelen, 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 bepaalt de replicatielatentie. Een waarde van '0' resulteert in de laagst mogelijke latentie, ten koste van doorvoer (omdat er meer bevestigingsberichten moeten worden verzonden en verwerkt, elk met minder bevestigingen). Hoe groter de waarde voor BatchAcknowledgementInterval, hoe hoger de totale replicatiedoorvoer, ten koste van een hogere latentie van de bewerking. Dit vertaalt zich rechtstreeks naar 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. Als u dit verhoogt naar een hogere waarde dan de standaardwaarde, kan dit 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 geschiedenis van bewerkingen in het logboek. Dit kan de hersteltijd van een replica vergroten na een crash.
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 standaardrecordgrootte van 1024 kB optimaal. Als de service echter grotere gegevensitems als onderdeel van de statusgegevens veroorzaakt, moet deze waarde mogelijk worden verhoogd. Er is weinig voordeel bij het maken van MaxRecordSizeInKB kleiner dan 1024, omdat kleinere records alleen de ruimte gebruiken die nodig is voor de kleinere record. We verwachten dat deze waarde alleen in zeldzame gevallen moet worden gewijzigd.
De sharedLogId- en SharedLogPath-instellingen 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 hoofdverplaatsingen te verminderen. We verwachten dat deze waarde alleen in zeldzame gevallen moet worden gewijzigd.