Állapotalapú megbízható szolgáltatások konfigurálása
A megbízható szolgáltatásokhoz két konfigurációs beállításkészlet létezik. Az egyik készlet globális a fürt összes megbízható szolgáltatásához, a másik pedig egy adott megbízható szolgáltatásra vonatkozik.
Globális konfiguráció
A globális megbízható szolgáltatáskonfiguráció a fürt fürtjegyzékében van megadva a KtlLogger szakaszban. Lehetővé teszi a megosztott napló helyének és méretének konfigurálását, valamint a naplózó által használt globális memóriakorlátokat. A fürt jegyzékfájlja egyetlen XML-fájl, amely a fürt összes csomópontjára és szolgáltatására vonatkozó beállításokat és konfigurációkat tartalmazza. A fájlt általában ClusterManifest.xml nevezik. A fürt fürtjegyzékét a Get-ServiceFabricClusterManifest PowerShell-paranccsal tekintheti meg.
Konfigurációnevek
Name | Unit (Egység) | Alapértelmezett érték | Megjegyzések |
---|---|---|---|
WriteBufferMemoryPoolMinimumInKB | Kilobyte | 8388608 | A naplózó írási puffermemóriakészletéhez kernel módban lefoglalandó tudásbázis minimális száma. Ez a memóriakészlet az állapotinformációk gyorsítótárazására szolgál, mielőtt a lemezre ír. |
WriteBufferMemoryPoolMaximumInKB | Kilobyte | Korlátlan | Maximális méret, amellyel a naplózó megírhatja a puffermemóriakészletet. |
SharedLogId | GUID | "" | Egyedi GUID-azonosítót ad meg a fürt összes olyan csomópontján használt alapértelmezett megosztott naplófájl azonosításához, amely nem adja meg a SharedLogId azonosítót a szolgáltatásspecifikus konfigurációban. Ha a SharedLogId meg van adva, akkor a SharedLogPath értéket is meg kell adni. |
SharedLogPath | Teljes elérési út neve | "" | Megadja azt a teljes elérési utat, ahol a fürt összes megbízható szolgáltatása által használt megosztott naplófájl nem adja meg a SharedLogPathot a szolgáltatásspecifikus konfigurációban. Ha azonban meg van adva a SharedLogPath, akkor a SharedLogId értéket is meg kell adni. |
SharedLogSizeInMB | Megabájt | 8192 | Megadja, hogy hány MB lemezterületet kell statikusan lefoglalni a megosztott naplóhoz. Az értéknek 2048-nak vagy nagyobbnak kell lennie. |
Az Azure ARM-ben vagy a helyszíni JSON-sablonban az alábbi példa bemutatja, hogyan módosíthatja a létrehozott megosztott tranzakciónaplót az állapotalapú szolgáltatások megbízható gyűjteményeinek biztonsági mentéséhez.
"fabricSettings": [{
"name": "KtlLogger",
"parameters": [{
"name": "SharedLogSizeInMB",
"value": "4096"
}]
}]
Minta helyi fejlesztői fürt jegyzékszakasza
Ha módosítani szeretné ezt a helyi fejlesztési környezetben, szerkesztenie kell a helyi clustermanifest.xml fájlt.
<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>
Megjegyzések
A naplózó globális memóriakészlettel rendelkezik, amelyet nem lapozott kernelmemória foglal le, amely egy csomópont összes megbízható szolgáltatása számára elérhető az állapotadatok gyorsítótárazásához, mielőtt a megbízható szolgáltatásreplikához társított dedikált naplóba íródott. A készlet méretét a WriteBufferMemoryPoolMinimumInKB és a WriteBufferMemoryPoolMaximumInKB beállítások vezérlik. A WriteBufferMemoryPoolMinimumInKB megadja a memóriakészlet kezdeti méretét és azt a legkisebb méretet, amelyre a memóriakészlet zsugorodhat. A WriteBufferMemoryPoolMaximumInKB a legnagyobb méret, amelyre a memóriakészlet nőhet. Minden megnyitott megbízható szolgáltatásreplika megnövelheti a memóriakészlet méretét egy rendszer által meghatározott mennyiséggel a WriteBufferMemoryPoolMaximumInKB értékig. Ha a memóriakészletből több memória van, mint amennyi rendelkezésre áll, a memóriakérelmeket a rendszer késlelteti, amíg a memória nem áll rendelkezésre. Ezért ha az írási puffer memóriakészlete túl kicsi egy adott konfigurációhoz, a teljesítmény szenvedhet.
A SharedLogId és a SharedLogPath beállítások mindig együtt vannak használva a fürt összes csomópontjának alapértelmezett megosztott naplójának GUID-azonosítójának és helyének meghatározásához. Az alapértelmezett megosztott napló minden olyan megbízható szolgáltatáshoz használatos, amely nem adja meg az adott szolgáltatás settings.xml beállításait. A legjobb teljesítmény érdekében a megosztott naplófájlokat olyan lemezekre kell helyezni, amelyeket kizárólag a megosztott naplófájlokhoz használnak a versengés csökkentése érdekében.
A SharedLogSizeInMB meghatározza, hogy az összes csomóponton előre kiosztandó lemezterület mennyi legyen az alapértelmezett megosztott naplóhoz. A SharedLogId és a SharedLogPath értéket nem kell megadni a SharedLogSizeInMB megadásához.
Szolgáltatásspecifikus konfiguráció
Az állapotalapú Reliable Services alapértelmezett konfigurációit a konfigurációs csomag (Config) vagy a szolgáltatás implementációja (kód) használatával módosíthatja.
- Config – A konfigurációs csomagon keresztüli konfigurálás a Microsoft Visual Studio csomaggyökerében létrehozott Settings.xml fájl módosításával történik az alkalmazás minden szolgáltatásához tartozó Config mappa alatt.
- Kód – A kódon keresztüli konfigurálás egy ReliableStateManager egy ReliableStateManagerConfiguration objektummal, a megfelelő beállításokkal történő létrehozásával valósítható meg.
Alapértelmezés szerint az Azure Service Fabric-futtatókörnyezet előre definiált szakaszneveket keres a Settings.xml fájlban, és felhasználja a konfigurációs értékeket a mögöttes futtatókörnyezeti összetevők létrehozásakor.
Megjegyzés
Ne törölje az alábbi konfigurációk szakaszneveit a Visual Studio-megoldásban létrehozott Settings.xml fájlban, hacsak nem tervezi a szolgáltatás kódon keresztüli konfigurálását. A konfigurációs csomag vagy szakasznevek átnevezéséhez kódmódosításra lesz szükség a ReliableStateManager konfigurálásakor.
Replikátor biztonsági konfigurációja
A replikátor biztonsági konfigurációi a replikáció során használt kommunikációs csatorna védelmére szolgálnak. Ez azt jelenti, hogy a szolgáltatások nem fogják látni egymás replikációs forgalmát, biztosítva, hogy a magas rendelkezésre állású adatok is biztonságosak legyenek. Alapértelmezés szerint egy üres biztonsági konfigurációs szakasz megakadályozza a replikáció biztonságát.
Fontos
Linux-csomópontokon a tanúsítványoknak PEM-formátumúnak kell lenniük. A tanúsítványok Linuxhoz való kereséséről és konfigurálásáról további információt a Tanúsítványok konfigurálása Linuxon című témakörben talál.
Alapértelmezett szakasznév
ReplicatorSecurityConfig
Megjegyzés
A szakasz nevének módosításához írja felül a replicatorSecuritySectionName paramétert a ReliableStateManagerConfiguration konstruktorra a szolgáltatás ReliableStateManager létrehozásakor.
Replikátor konfigurálása
A replikátor konfigurációi konfigurálják azt a replikátort, amely felelős az állapotalapú Reliable Service állapotának magas megbízhatóságáért az állapot helyi replikálásával és megőrzésével. Az alapértelmezett konfigurációt a Visual Studio-sablon hozza létre, és elegendőnek kell lennie. Ez a szakasz a replikátor hangolásához elérhető további konfigurációkról szól.
Alapértelmezett szakasznév
ReplicatorConfig
Megjegyzés
A szakasz nevének módosításához írja felül a replicatorSettingsSectionName paramétert a ReliableStateManagerConfiguration konstruktorra a szolgáltatás ReliableStateManager létrehozásakor.
Konfigurációnevek
Name | Unit (Egység) | Alapértelmezett érték | Megjegyzések |
---|---|---|---|
BatchAcknowledgementInterval | Másodperc | 0.015 | Az az időszak, amelyre a másodlagos replikátor a művelet fogadása után várakozik, mielőtt nyugtát küld az elsődlegesnek. Az ebben az intervallumban feldolgozott műveletekhez küldendő egyéb nyugtázások egyetlen válaszként lesznek elküldve. |
ReplicatorEndpoint | N/A | Nincs alapértelmezett kötelező paraméter | IP-cím és port, amelyet az elsődleges/másodlagos replikátor a replikakészlet más replikátoraival való kommunikációra használ. Ennek egy TCP-erőforrásvégpontra kell hivatkoznia a szolgáltatásjegyzékben. A szolgáltatásjegyzék-erőforrások definiálásáról a Szolgáltatásjegyzék erőforrásai című témakörben olvashat bővebben. |
MaxPrimaryReplicationQueueSize | Műveletek száma | 8192 | Az elsődleges üzenetsor műveleteinek maximális száma. A művelet felszabadul, miután az elsődleges replikátor nyugtázást kap az összes másodlagos replikátortól. Ennek az értéknek 64-nél nagyobbnak és 2-nél nagyobbnak kell lennie. |
MaxSecondaryReplicationQueueSize | Műveletek száma | 16384 | A másodlagos üzenetsor műveleteinek maximális száma. A művelet felszabadul, miután az állapotot magas rendelkezésre állásúvá tette az adatmegőrzés révén. Ennek az értéknek 64-nél nagyobbnak és 2-nél nagyobbnak kell lennie. |
CheckpointThresholdInMB | MB | 50 | A naplófájlok azon területe, amely után az állapot ellenőrzőpontként van meghatározva. |
MaxRecordSizeInKB | KB | 1024 | A replikátor által a naplóba írható legnagyobb rekordméret. Ennek az értéknek 4-nek és 16-nál nagyobbnak kell lennie. |
MinLogSizeInMB | MB | 0 (rendszer meghatározva) | A tranzakciós napló minimális mérete. A napló nem csonkíthat a beállítás alatti méretre. A 0 azt jelzi, hogy a replikátor határozza meg a napló minimális méretét. Az érték növelése növeli a részleges másolatok és a növekményes biztonsági mentések lehetőségét, mivel a releváns naplórekordok csonkolásának esélye csökken. |
CsonkításThresholdFactor | Szempont | 2 | Meghatározza a napló méretét, és csonkítás lesz aktiválva. A csonkítás küszöbértékét a MinLogSizeInMB és a TruncationThresholdFactor szorzata határozza meg. TruncationThresholdFactor értékének 1-nél nagyobbnak kell lennie. MinLogSizeInMB * TruncationThresholdFactor értékének kisebbnek kell lennie, mint a MaxStreamSizeInMB. |
SzabályozásThresholdFactor | Szempont | 4 | Meghatározza a napló méretét, és a replika szabályozni kezd. A szabályozási küszöbértéket (MB-ban) a Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)) határozza meg. A szabályozási küszöbértéknek (MB-ban) nagyobbnak kell lennie a csonkítás küszöbértékénél (MB-ban). A csonkítás küszöbértékének (MB-ban) kisebbnek kell lennie, mint a MaxStreamSizeInMB értéknek. |
MaxAccumulatedBackupLogSizeInMB | MB | 800 | A biztonsági mentési naplók maximális halmozott mérete (MB-ban) egy adott biztonsági mentési naplóláncban. A növekményes biztonsági mentési kérések sikertelenek lesznek, ha a növekményes biztonsági mentés olyan biztonsági mentési naplót hozna létre, amely a halmozott biztonsági mentési naplókat eredményezné, mivel a vonatkozó teljes biztonsági mentés nagyobb lesz ennél a méretnél. Ilyen esetekben a felhasználónak teljes biztonsági mentést kell készítenie. |
SharedLogId | GUID | "" | Egyedi GUID-azonosítót ad meg a replikával használt megosztott naplófájl azonosításához. A szolgáltatások általában nem használhatják ezt a beállítást. Ha azonban Meg van adva a SharedLogId, akkor a SharedLogPath paramétert is meg kell adni. |
SharedLogPath | Teljes elérési út neve | "" | Megadja azt a teljes elérési utat, ahol a replika megosztott naplófájlja létrejön. A szolgáltatások általában nem használhatják ezt a beállítást. Ha azonban meg van adva a SharedLogPath, akkor a SharedLogId értéket is meg kell adni. |
SlowApiMonitoringDuration | Másodperc | 300 | Beállítja a felügyelt API-hívások figyelési időközét. Példa: a felhasználó biztonsági mentési visszahívási függvényt adott meg. Az időköz leteltét követően a rendszer figyelmeztető állapotjelentést küld az állapotkezelőnek. |
LogTruncationIntervalSeconds | Másodperc | 0 | Konfigurálható időköz, amikor a rendszer naplócsobbítást kezdeményez az egyes replikákon. Ezzel biztosítható, hogy a napló idő alapján is csonkuljon, és ne csak a naplóméretet. Ez a beállítás a törölt bejegyzések törlését is kényszeríti a megbízható szótárban. Így biztosítható, hogy a törölt elemeket időben töröljék. |
EnableStableReads | Logikai | Hamis | A stabil olvasások engedélyezése korlátozza a másodlagos replikákat a kvórumalapú értékek visszaadására. |
Mintakonfiguráció kóddal
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)
{ }
...
}
Minta konfigurációs fájl
<?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>
Megjegyzések
A BatchAcknowledgementInterval szabályozza a replikáció késését. A "0" érték a lehető legkisebb késést eredményezi az átviteli sebesség költségén (mivel több nyugtázási üzenetet kell küldeni és feldolgozni, amelyek mindegyike kevesebb nyugtát tartalmaz). Minél nagyobb a BatchAcknowledgementInterval értéke, annál nagyobb a replikáció teljes átviteli sebessége a nagyobb műveleti késés árán. Ez közvetlenül a tranzakciós véglegesítések késésére fordítható le.
A CheckpointThresholdInMB értéke határozza meg, hogy a replikátor mennyi lemezterületet használhat fel az állapotadatok tárolására a replika dedikált naplófájljában. Ha ezt az alapértelmezettnél magasabb értékre növeli, az gyorsabb újrakonfigurálási időket eredményezhet, amikor új replikát adnak hozzá a készlethez. Ezt a részleges állapotátvitel okozza, amely a naplóban lévő műveletek több előzményének rendelkezésre állása miatt történik. Ez növelheti a replika összeomlás utáni helyreállítási idejét.
A MaxRecordSizeInKB beállítás határozza meg a replikátor által a naplófájlba írható rekord maximális méretét. A legtöbb esetben az alapértelmezett 1024 KB-os rekordméret optimális. Ha azonban a szolgáltatás nagyobb adatelemeket okoz az állapotinformációkban, akkor lehet, hogy növelni kell ezt az értéket. A MaxRecordSizeInKB 1024-nél kisebb méretűvé tételének kevés előnye van, mivel a kisebb rekordok csak a kisebb rekordhoz szükséges területet használják. Azt várjuk, hogy ezt az értéket csak ritka esetekben kell módosítani.
A SharedLogId és a SharedLogPath beállításokat mindig együtt használjuk, hogy egy szolgáltatás külön megosztott naplót használjon a csomópont alapértelmezett megosztott naplójától. A legjobb hatékonyság érdekében a lehető legtöbb szolgáltatásnak ugyanazt a megosztott naplót kell megadnia. A megosztott naplófájlokat olyan lemezekre kell helyezni, amelyeket kizárólag a megosztott naplófájlhoz használnak a fejmozgási versengés csökkentése érdekében. Azt várjuk, hogy ezt az értéket csak ritka esetekben kell módosítani.