Udostępnij za pośrednictwem


Konfigurowanie stanowych niezawodnych usług

Istnieją dwa zestawy ustawień konfiguracji dla niezawodnych usług. Jeden zestaw jest globalny dla wszystkich niezawodnych usług w klastrze, podczas gdy drugi zestaw jest specyficzny dla określonej niezawodnej usługi.

Konfiguracja globalna

Globalna konfiguracja niezawodnej usługi jest określona w manifeście klastra dla klastra w sekcji KtlLogger. Umożliwia konfigurację udostępnionej lokalizacji dziennika i rozmiaru oraz globalne limity pamięci używane przez rejestrator. Manifest klastra to pojedynczy plik XML, który zawiera ustawienia i konfiguracje, które mają zastosowanie do wszystkich węzłów i usług w klastrze. Plik jest zwykle nazywany ClusterManifest.xml. Manifest klastra dla klastra można wyświetlić przy użyciu polecenia Get-ServiceFabricClusterManifest programu PowerShell.

Nazwy konfiguracji

Nazwisko Jednostka Domyślna wartość Uwagi
WriteBufferMemoryPoolMinimumInKB Kilobajtów 8388608 Minimalna liczba KB do przydzielenia w trybie jądra dla puli pamięci buforu zapisu rejestratora. Ta pula pamięci jest używana do buforowania informacji o stanie przed zapisaniem na dysku.
WriteBufferMemoryPoolMaximumInKB Kilobajtów Bez ograniczeń Maksymalny rozmiar, do którego może rosnąć pula pamięci buforu zapisu rejestratora.
SharedLogId Identyfikator GUID "" Określa unikatowy identyfikator GUID do użycia do identyfikowania domyślnego udostępnionego pliku dziennika używanego przez wszystkie usługi niezawodne we wszystkich węzłach w klastrze, które nie określają identyfikatora SharedLogId w określonej konfiguracji usługi. Jeśli określono identyfikator SharedLogId, należy również określić parametr SharedLogPath.
SharedLogPath W pełni kwalifikowana nazwa ścieżki "" Określa w pełni kwalifikowaną ścieżkę, w której udostępniony plik dziennika używany przez wszystkie usługi niezawodne we wszystkich węzłach klastra, które nie określają ścieżki SharedLogPath w określonej konfiguracji usługi. Jeśli jednak parametr SharedLogPath jest określony, należy również określić identyfikator SharedLogId.
SharedLogSizeInMB Megabajtów 8192 Określa liczbę MB miejsca na dysku do statycznego przydzielenia dla udostępnionego dziennika. Wartość musi być 2048 lub większa.

W usłudze Azure ARM lub lokalnym szablonie JSON w poniższym przykładzie pokazano, jak zmienić udostępniony dziennik transakcji, który zostanie utworzony, aby przywrócić wszystkie niezawodne kolekcje dla usług stanowych.

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

Przykładowa sekcja manifestu lokalnego klastra deweloperów

Jeśli chcesz to zmienić w lokalnym środowisku projektowym, musisz edytować lokalny plik 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>

Uwagi

Rejestrator ma globalną pulę pamięci przydzieloną z niestronicowanej pamięci jądra, która jest dostępna dla wszystkich niezawodnych usług w węźle na potrzeby buforowania danych stanu przed zapisaniem w dedykowanym dzienniku skojarzonym z niezawodną repliką usługi. Rozmiar puli jest kontrolowany przez ustawienia WriteBufferMemoryPoolMinimumInKB i WriteBufferMemoryPoolMaximumInKB. WriteBufferMemoryPoolMinimumInKB określa zarówno początkowy rozmiar tej puli pamięci, jak i najniższy rozmiar, do którego pula pamięci może się zmniejszyć. WriteBufferMemoryPoolMaximumInKB jest najwyższym rozmiarem, do którego może rosnąć pula pamięci. Każda niezawodna replika usługi, która jest otwarta, może zwiększyć rozmiar puli pamięci przez system określony w wysokości do WriteBufferMemoryPoolMaximumInKB. Jeśli istnieje większe zapotrzebowanie na pamięć z puli pamięci niż jest dostępne, żądania pamięci będą opóźniane do momentu udostępnienia pamięci. W związku z tym, jeśli pula pamięci buforu zapisu jest zbyt mała dla określonej konfiguracji, wydajność może wystąpić.

Ustawienia SharedLogId i SharedLogPath są zawsze używane razem do definiowania identyfikatora GUID i lokalizacji domyślnego dziennika udostępnionego dla wszystkich węzłów w klastrze. Domyślny dziennik udostępniony jest używany dla wszystkich niezawodnych usług, które nie określają ustawień w settings.xml dla określonej usługi. Aby uzyskać najlepszą wydajność, pliki dziennika udostępnionego powinny być umieszczane na dyskach, które są używane wyłącznie dla udostępnionego pliku dziennika w celu zmniejszenia rywalizacji.

SharedLogSizeInMB określa ilość miejsca na dysku do wstępnego przydzielenia domyślnego dziennika udostępnionego na wszystkich węzłach. Parametr SharedLogId i SharedLogPath nie muszą być określone w celu określenia parametru SharedLogSizeInMB.

Konfiguracja specyficzna dla usługi

Domyślne konfiguracje usług Reliable Services można modyfikować przy użyciu pakietu konfiguracji (Config) lub implementacji usługi (kodu).

  • Konfiguracja — konfiguracja za pośrednictwem pakietu konfiguracji jest realizowana przez zmianę pliku Settings.xml wygenerowanego w katalogu głównym pakietu Programu Microsoft Visual Studio w folderze Config dla każdej usługi w aplikacji.
  • Kod — konfiguracja za pośrednictwem kodu jest realizowana przez utworzenie klasy ReliableStateManager przy użyciu obiektu ReliableStateManagerConfiguration z odpowiednim zestawem opcji.

Domyślnie środowisko uruchomieniowe usługi Azure Service Fabric szuka wstępnie zdefiniowanych nazw sekcji w pliku Settings.xml i używa wartości konfiguracji podczas tworzenia podstawowych składników środowiska uruchomieniowego.

Uwaga

Nie usuwaj nazw sekcji następujących konfiguracji w pliku Settings.xml generowanym w rozwiązaniu programu Visual Studio, chyba że planujesz skonfigurować usługę za pomocą kodu. Zmiana nazwy pakietu konfiguracji lub nazw sekcji będzie wymagać zmiany kodu podczas konfigurowania elementu ReliableStateManager.

Konfiguracja zabezpieczeń replikatora

Konfiguracje zabezpieczeń replikatora służą do zabezpieczania kanału komunikacyjnego używanego podczas replikacji. Oznacza to, że usługi nie będą mogły zobaczyć ruchu replikacji między sobą, zapewniając, że dane, które są udostępniane o wysokiej dostępności, są również bezpieczne. Domyślnie pusta sekcja konfiguracji zabezpieczeń uniemożliwia zabezpieczenia replikacji.

Ważne

W węzłach systemu Linux certyfikaty muszą być sformatowane jako PEM. Aby dowiedzieć się więcej na temat lokalizowania i konfigurowania certyfikatów dla systemu Linux, zobacz Konfigurowanie certyfikatów w systemie Linux.

Domyślna nazwa sekcji

ReplicatorSecurityConfig

Uwaga

Aby zmienić nazwę tej sekcji, przesłoń parametr replicatorSecuritySectionName do konstruktora ReliableStateManagerConfiguration podczas tworzenia elementu ReliableStateManager dla tej usługi.

Konfiguracja replikatora

Konfiguracje replikatora konfigurują replikator, który jest odpowiedzialny za zapewnienie wysokiej niezawodności stanu stanowej usługi Reliable Service przez replikowanie i utrwalanie stanu lokalnie. Domyślna konfiguracja jest generowana przez szablon programu Visual Studio i powinna wystarczyć. W tej sekcji omówiono dodatkowe konfiguracje, które są dostępne do dostrajania replikatora.

Domyślna nazwa sekcji

ReplicatorConfig

Uwaga

Aby zmienić tę nazwę sekcji, zastąpij parametr replicatorSettingsSectionName konstruktorowi ReliableStateManagerConfiguration podczas tworzenia klasy ReliableStateManager dla tej usługi.

Nazwy konfiguracji

Nazwisko Jednostka Domyślna wartość Uwagi
BatchAcknowledgementInterval Sekundy 0,015 Okres, dla którego replikator w pomocniczej chwili czeka po otrzymaniu operacji przed wysłaniem potwierdzenia do podstawowego. Wszelkie inne potwierdzenia wysyłane dla operacji przetworzonych w tym interwale są wysyłane jako jedna odpowiedź.
ReplikatorEndpoint Nie dotyczy Brak parametru domyślnego Adres IP i port używany przez replikator podstawowy/pomocniczy do komunikowania się z innymi replikatorami w zestawie replik. Powinno to odwoływać się do punktu końcowego zasobu TCP w manifeście usługi. Zapoznaj się z zasobami manifestu usługi, aby dowiedzieć się więcej na temat definiowania zasobów punktu końcowego w manifeście usługi.
MaxPrimaryReplicationQueueSize Liczba operacji 8192 Maksymalna liczba operacji w kolejce podstawowej. Operacja jest zwalniana po odebraniu potwierdzenia przez replikator podstawowy ze wszystkich replikatorów pomocniczych. Ta wartość musi być większa niż 64 i moc 2.
MaxSecondaryReplicationQueueSize Liczba operacji 16384 Maksymalna liczba operacji w kolejce pomocniczej. Operacja jest zwalniana po udostępnieniu stanu wysokiej dostępności przez trwałość. Ta wartość musi być większa niż 64 i moc 2.
CheckpointThresholdInMB MB 50 Ilość miejsca w pliku dziennika, po którym jest określony stan kontrolny.
MaxRecordSizeInKB KB 1024 Największy rozmiar rekordu, który replikator może zapisywać w dzienniku. Ta wartość musi być wielokrotną 4 i większą niż 16.
MinLogSizeInMB MB 0 (określony system) Minimalny rozmiar dziennika transakcyjnego. Dziennik nie będzie mógł obcinać rozmiaru poniżej tego ustawienia. 0 wskazuje, że replikator określi minimalny rozmiar dziennika. Zwiększenie tej wartości zwiększa możliwość wykonywania częściowych kopii i przyrostowych kopii zapasowych, ponieważ szanse na obcięcie odpowiednich rekordów dziennika są obniżane.
TruncationThresholdFactor Współczynnik 2 Określa, jaki rozmiar dziennika zostanie wyzwolony. Próg obcięcia jest określany przez wartość MinLogSizeInMB pomnożoną przez element TruncationThresholdFactor. ObcięcieThresholdFactor musi być większe niż 1. Parametr MinLogSizeInMB * TruncationThresholdFactor musi być mniejszy niż MaxStreamSizeInMB.
ThrottlingThresholdFactor Współczynnik 100 Określa, jaki rozmiar dziennika, replika zacznie być ograniczana. Próg ograniczania przepustowości (w MB) jest określany przez parametr Max(((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). Próg ograniczania (w MB) musi być większy niż próg obcinania (w MB). Próg obcięcia (w MB) musi być mniejszy niż MaxStreamSizeInMB.
MaxAccumulatedBackupLogSizeInMB MB 800 Maksymalny rozmiar skumulowany (w MB) dzienników kopii zapasowych w danym łańcuchu dzienników kopii zapasowych. Żądania przyrostowej kopii zapasowej nie powiedzą się, jeśli przyrostowa kopia zapasowa wygeneruje dziennik kopii zapasowej, który spowoduje skumulowane dzienniki kopii zapasowej, ponieważ odpowiedni pełny rozmiar kopii zapasowej będzie większy niż ten rozmiar. W takich przypadkach użytkownik musi wykonać pełną kopię zapasową.
SharedLogId Identyfikator GUID "" Określa unikatowy identyfikator GUID używany do identyfikowania udostępnionego pliku dziennika używanego z tą repliką. Zazwyczaj usługi nie powinny używać tego ustawienia. Jeśli jednak określono identyfikator SharedLogId, należy również określić parametr SharedLogPath.
SharedLogPath W pełni kwalifikowana nazwa ścieżki "" Określa w pełni kwalifikowaną ścieżkę, w której zostanie utworzony udostępniony plik dziennika dla tej repliki. Zazwyczaj usługi nie powinny używać tego ustawienia. Jeśli jednak parametr SharedLogPath jest określony, należy również określić identyfikator SharedLogId.
SlowApiMonitoringDuration Sekundy 300 Ustawia interwał monitorowania dla zarządzanych wywołań interfejsu API. Przykład: użytkownik dostarczył funkcję wywołania zwrotnego kopii zapasowej. Po upływie interwału raport kondycji ostrzeżenia zostanie wysłany do Menedżera kondycji.
LogTruncationIntervalSeconds Sekundy 0 Konfigurowalny interwał, w którym obcinanie dziennika zostanie zainicjowane na każdej repliki. Służy do zapewnienia, że dziennik jest również obcięty na podstawie czasu zamiast tylko rozmiaru dziennika. To ustawienie wymusza również przeczyszczenie usuniętych wpisów w niezawodnym słowniku. W związku z tym można go użyć do zapewnienia, że usunięte elementy są czyszczone w odpowiednim czasie.
EnableStableReads Wartość logiczna Fałsz Włączenie stabilnych operacji odczytu ogranicza repliki pomocnicze do zwracania wartości, które zostały zastąpione kworum.

Przykładowa konfiguracja za pomocą kodu

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

Przykładowy plik konfiguracji

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

Uwagi

Usługa BatchAcknowledgementInterval kontroluje opóźnienie replikacji. Wartość "0" powoduje najmniejsze możliwe opóźnienie kosztem przepływności (ponieważ należy wysłać i przetworzyć więcej komunikatów potwierdzenia, z których każda zawiera mniej potwierdzeń). Im większa wartość parametru BatchAcknowledgementInterval, tym większa jest ogólna przepływność replikacji kosztem większego opóźnienia operacji. Przekłada się to bezpośrednio na opóźnienie zatwierdzeń transakcji.

Wartość checkpointThresholdInMB kontroluje ilość miejsca na dysku, którego replikator może użyć do przechowywania informacji o stanie w dedykowanym pliku dziennika repliki. Zwiększenie tej wartości do wartości wyższej niż domyślna może spowodować szybsze ponowne skonfigurowanie czasu, gdy nowa replika zostanie dodana do zestawu. Jest to spowodowane częściowym transferem stanu, który odbywa się z powodu dostępności większej liczby historii operacji w dzienniku. Może to potencjalnie zwiększyć czas odzyskiwania repliki po awarii.

Ustawienie MaxRecordSizeInKB definiuje maksymalny rozmiar rekordu, który można zapisać przez replikatora w pliku dziennika. W większości przypadków domyślny rozmiar rekordu 1024 KB jest optymalny. Jeśli jednak usługa powoduje, że większe elementy danych są częścią informacji o stanie, może być konieczne zwiększenie tej wartości. W 1024 r. rozmiar MaxRecordSizeInKB jest mniejszy niż 1024, ponieważ mniejsze rekordy używają tylko miejsca potrzebnego dla mniejszego rekordu. Oczekujemy, że ta wartość będzie musiała zostać zmieniona tylko w rzadkich przypadkach.

Ustawienia SharedLogId i SharedLogPath są zawsze używane razem, aby usługa korzystała z oddzielnego dziennika udostępnionego z domyślnego dziennika udostępnionego dla węzła. Aby uzyskać najlepszą wydajność, jak najwięcej usług powinno określać ten sam dziennik udostępniony. Udostępnione pliki dziennika powinny być umieszczane na dyskach, które są używane wyłącznie dla udostępnionego pliku dziennika w celu zmniejszenia rywalizacji o ruch głowy. Oczekujemy, że ta wartość będzie musiała zostać zmieniona tylko w rzadkich przypadkach.

Następne kroki