Megosztás a következőn keresztül:


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

Következő lépések