Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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ę lokalizacji i rozmiaru udostępnionego dziennika oraz globalnych limitów pamięci używanych 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
| Nazwa | Jednostka | Wartość domyślna | Uwagi |
|---|---|---|---|
| WriteBufferMemoryPoolMinimumInKB | Kilobajty | 8388608 | Minimalna liczba KB do przydzielenia w trybie jądra dla puli pamięci buforowej zapisu rejestratora. Ta pula pamięci jest używana do buforowania informacji o stanie przed zapisaniem na dysku. |
| WriteBufferMemoryPoolMaximumInKB | Kilobajty | Brak limitu | Maksymalny rozmiar, do którego może rosnąć pula pamięci buforu zapisu rejestratora. |
| SharedLogId | GUID | "" | Określa unikatowy identyfikator GUID używany 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 znajduje się udostępniony plik dziennika używany przez wszystkie niezawodne usługi we wszystkich węzłach w klastrze, które nie określają SharedLogPath w swojej specyficznej konfiguracji usługi. Jeśli jednak parametr SharedLogPath jest określony, należy również określić identyfikator SharedLogId. |
| SharedLogSizeInMB | Megabajty | 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 w lokalnym szablonie JSON poniższy przykład pokazuje, jak zmienić udostępniony dziennik transakcji, który zostanie utworzony, aby wspierać wszelkie niezawodne kolekcje dla usług stanowiskowych.
"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 o ilość określoną przez system 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 ucierpieć.
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 mają ustawień określonych w settings.xml dla tej konkretniej 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 przeznaczenia dla 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 wyszukuje wstępnie zdefiniowane nazwy 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ć nawzajem swojego ruchu replikacji, zapewniając, że dane, które są zapewniane jako wysoko dostępne, 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, zastąp parametr replicatorSecuritySectionName w konstruktorze KonfiguracjaReliableStateManager podczas tworzenia instancji ReliableStateManager dla tej usługi.
Konfiguracja replikatora
Konfiguracje replikatora służą do konfigurowania replikatora odpowiedzialnego za niezawodne utrwalanie stanu usługi Reliable Service poprzez lokalne replikowanie i przechowywanie stanu. 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
| Nazwa | Jednostka | Wartość domyślna | Uwagi |
|---|---|---|---|
| BatchAcknowledgementInterval | Sekund | 0.015 | Czas, przez jaki replikator w drugorzędnym węźle czeka po otrzymaniu operacji, zanim wyśle potwierdzenie do węzła głównego. Wszelkie inne potwierdzenia wysyłane dla operacji przetworzonych w tym interwale są wysyłane jako jedna odpowiedź. |
| ReplicatorEndpoint | N/A | Brak domyślnego parametru – wymagany parametr | 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 główny ze wszystkich replikatorów wtórnych. 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 zapewnieniu wysokiej dostępności stanu poprzez jego utrwalenie. 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 | baza wiedzy | 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 przez system) | Minimalny rozmiar dziennika transakcyjnego. Dziennik nie będzie mógł skrócić 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ż prawdopodobieństwo obcięcia odpowiednich rekordów dziennika jest zmniejszone. |
| WspółczynnikPrógUcinania | Czynnik | 2 | Określa, przy jakim rozmiarze dziennika nastąpi jego obcięcie. Próg obcięcia jest określany przez wartość MinLogSizeInMB pomnożoną przez TruncationThresholdFactor. CzynnikProgowyObcięcia musi być większy niż 1. Parametr MinLogSizeInMB * TruncationThresholdFactor musi być mniejszy niż MaxStreamSizeInMB. |
| Czynnik progowy regulacji przepływu | Czynnik | 4 | Określa, przy jakiej wielkości dziennika replika zaczyna być ograniczana. Próg ograniczania przepustowości (w MB) jest określany przez parametr Max(((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). Próg dławienia (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 powiodą się, jeśli przyrostowa kopia zapasowa wygeneruje dziennik kopii zapasowej, który spowoduje, że skumulowane dzienniki kopii zapasowej od momentu odpowiedniej pełnej kopii będą większe niż ten rozmiar. W takich przypadkach użytkownik musi wykonać pełną kopię zapasową. |
| SharedLogId | 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. |
| CzasMonitorowaniaWolnegoApi | Sekund | 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 ostrzegawczy o stanie zdrowia zostanie wysłany do Menedżera Zdrowia. |
| LogTruncationIntervalSeconds | Sekund | 0 | Konfigurowalny interwał, w którym skracanie dziennika zostanie zainicjowane na każdej replice. Służy do zapewnienia, że dziennik jest również skrócony 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. |
| Włącz stabilne odczyty | logiczny | Nieprawda | Włączenie stabilnych operacji odczytu ogranicza repliki pomocnicze do zwracania wartości, które zostały potwierdzone przez 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 poziomu wyższego niż domyślny może skutkować szybszymi czasami rekonfiguracji, 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. Nie ma większych korzyści z ustawiania MaxRecordSizeInKB na mniej niż 1024, ponieważ mniejsze rekordy używają tylko tyle miejsca, ile jest potrzebne 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 mogła korzystać z oddzielnego dziennika udostępnionego zamiast 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.