Diagnostisera och felsöka tillgängligheten för Azure Cosmos DB-SDK:er i miljöer med flera regioner
GÄLLER FÖR: NoSQL
Den här artikeln beskriver beteendet för den senaste versionen av Azure Cosmos DB SDK:er när du ser ett anslutningsproblem till en viss region eller när en region redundans inträffar.
Med alla Azure Cosmos DB SDK:er kan du anpassa de regionala inställningarna. Följande egenskaper används i olika SDK:er:
- Egenskapen ConnectionPolicy.PreferredLocations i .NET V2 SDK.
- Egenskaperna CosmosClientOptions.ApplicationRegion eller CosmosClientOptions.ApplicationPreferredRegions i .NET V3 SDK.
- Metoden CosmosClientBuilder.preferredRegions i Java V4 SDK.
- Parametern CosmosClient.preferred_locations i Python SDK.
- Parametern CosmosClientOptions.ConnectionPolicy.preferredLocations i JS SDK.
När SDK initieras med en konfiguration som anger regionala inställningar hämtar den först kontoinformationen, inklusive tillgängliga regioner från den globala slutpunkten. Den tillämpar sedan en skärningspunkt mellan den konfigurerade regionala preferensen och kontots tillgängliga regioner och använder ordningen i den regionala preferensen för att prioritera resultatet.
Om den regionala inställningskonfigurationen innehåller regioner som inte är en tillgänglig region i kontot ignoreras värdena. Om dessa ogiltiga regioner läggs till senare i kontot använder SDK:t dem om de är högre i inställningskonfigurationen.
Kontotyp | Läsningar | Skrivningar |
---|---|---|
Enstaka skrivregion | Önskad region med högsta ordning | Primär region |
Flera skrivregioner | Önskad region med högsta ordning | Önskad region med högsta ordning |
Om du inte anger en önskad region använder SDK-klienten som standard den primära regionen:
Kontotyp | Läsningar | Skrivningar |
---|---|---|
Enstaka skrivregion | Primär region | Primär region |
Flera skrivregioner | Primär region | Primär region |
Anteckning
Den primära regionen refererar till den första regionen i listan över Azure Cosmos DB-kontoregioner. Om de värden som anges som regionala inställningar inte matchar några befintliga Azure-regioner ignoreras de. Om de matchar en befintlig region men kontot inte replikeras till den ansluter klienten till nästa prioriterade region som matchar eller till den primära regionen.
Varning
Redundans- och tillgänglighetslogik som beskrivs i det här dokumentet kan inaktiveras i klientkonfigurationen, vilket inte rekommenderas om inte själva användarprogrammet ska hantera tillgänglighetsfel. Detta kan uppnås genom att:
- Ange egenskapen ConnectionPolicy.EnableEndpointDiscovery i .NET V2 SDK till false.
- Ange egenskapen CosmosClientOptions.LimitToEndpoint i .NET V3 SDK till true.
- Ange metoden CosmosClientBuilder.endpointDiscoveryEnabled i Java V4 SDK till false.
- Ange parametern CosmosClient.enable_endpoint_discovery i Python SDK till false.
- Ange parametern CosmosClientOptions.ConnectionPolicy.enableEndpointDiscovery i JS SDK till false.
Under normala omständigheter ansluter SDK-klienten till den önskade regionen (om en regional inställning har angetts) eller till den primära regionen (om ingen inställning har angetts) och åtgärderna begränsas till den regionen, såvida inte något av nedanstående scenarier inträffar.
I dessa fall exponerar klienten som använder Azure Cosmos DB SDK loggar och innehåller återförsöksinformationen som en del av åtgärdsdiagnostikinformationen:
- Egenskapen RequestDiagnosticsString för svar i .NET V2 SDK.
- Egenskapen Diagnostik för svar och undantag i .NET V3 SDK.
- Metoden getDiagnostics() i svar och undantag i Java v4 SDK.
När du fastställer nästa region i prioritetsordning använder SDK-klienten listan över kontoregioner och prioriterar önskade regioner (om det finns några).
En omfattande information om SLA-garantier under dessa händelser finns i serviceavtalen för tillgänglighet.
Ta bort en region från kontot
När du tar bort en region från ett Azure Cosmos DB-konto kommer alla SDK-klienter som aktivt använder kontot att identifiera borttagningen av regionen via en svarskod för serverdelen. Klienten markerar sedan den regionala slutpunkten som otillgänglig. Klienten försöker utföra den aktuella åtgärden igen och alla framtida åtgärder dirigeras permanent till nästa region i prioritetsordning. Om inställningslistan bara hade en post (eller var tom) men kontot har andra tillgängliga regioner dirigeras den till nästa region i kontolistan.
Lägga till en region i ett konto
Var femte minut läser Azure Cosmos DB SDK-klienten kontokonfigurationen och uppdaterar de regioner som den känner till.
Om du tar bort en region och senare lägger till den i kontot igen, om den tillagda regionen har en högre regional inställningsordning i SDK-konfigurationen än den aktuella anslutna regionen, växlar SDK:t tillbaka för att använda den här regionen permanent. När den tillagda regionen har identifierats dirigeras alla framtida begäranden till den.
Om du konfigurerar klienten så att den helst ansluter till en region som Azure Cosmos DB-kontot inte har ignoreras den önskade regionen. Om du lägger till den regionen senare identifierar klienten den och växlar permanent till den regionen.
Redundansväsna skrivregionen i ett konto för en enda skrivregion
Om du initierar en redundansväxling av den aktuella skrivregionen misslyckas nästa skrivbegäran med ett känt serverdelssvar. När det här svaret identifieras frågar klienten kontot för att lära sig den nya skrivregionen och fortsätter med att försöka utföra den aktuella åtgärden igen och permanent dirigera alla framtida skrivåtgärder till den nya regionen.
Regionalt avbrott
Om kontot är en enda skrivregion och det regionala avbrottet inträffar under en skrivåtgärd liknar beteendet en manuell redundansväxling. För läsbegäranden eller konton med flera skrivregioner liknar beteendet att ta bort en region.
Garantier för sessionskonsekvens
När du använder sessionskonsekvens måste klienten garantera att den kan läsa sina egna skrivningar. I konton med en enda skrivregion där inställningen för läsregion skiljer sig från skrivregionen kan det finnas fall där användaren utfärdar en skrivning och sedan gör en läsning från en lokal region. Den lokala regionen har ännu inte tagit emot datareplikeringen (hastighet för lätt begränsning). I sådana fall tar SDK emot ett specifikt fel från tjänsten vid läsåtgärden och försöker läsa i den primära regionen igen för att säkerställa sessionskonsekvens. För konton med flera skrivregioner gäller samma sessionssemantik, men eftersom det finns flera tillgängliga skrivregioner utfärdas återförsök med hjälp av listan över prioriterade regioner eller kontots regionordning.
Tillfälliga anslutningsproblem i TCP-protokollet
I scenarier där Azure Cosmos DB SDK-klienten är konfigurerad att använda TCP-protokollet kan det för en viss begäran finnas situationer där nätverksvillkoren tillfälligt påverkar kommunikationen med en viss slutpunkt. Dessa tillfälliga nätverksförhållanden kan visas som TCP-timeouter och http 503-fel (tjänsten är inte tillgänglig). Klienten försöker, om möjligt, begäran lokalt på samma slutpunkt i några sekunder.
Om användaren har konfigurerat en lista över prioriterade regioner med fler än en region och klienten har förbrukat alla lokala återförsök, kan den försöka utföra den enskilda åtgärden igen i nästa region från inställningslistan. Skrivåtgärder kan bara göras om i en annan region om flera skrivregioner är aktiverade för Azure Cosmos DB-kontot, medan läsåtgärder kan göras om i valfri tillgänglig region.
Nästa steg
- Granska serviceavtalen för tillgänglighet.
- Använd den senaste .NET SDK:en
- Använda den senaste Java SDK:t
- Använda den senaste Python-SDK:en
- Använda senaste Node SDK