Dela via


Använda efterföljardatabaser

Med funktionen för uppföljningsdatabas kan du koppla en databas som finns i ett annat kluster till ditt Azure-Data Explorer kluster. Följardatabasen är ansluten i skrivskyddat läge, vilket gör det möjligt att visa data och köra frågor om de data som matades in i leader-databasen. Uppföljningsdatabasen synkroniserar ändringar i leaderdatabaserna. På grund av synkroniseringen finns det en datafördröjning på några sekunder till några minuter i datatillgängligheten. Längden på tidsfördröjningen beror på den totala storleken på metadata för leaderdatabasen. Databaserna leader och follower använder samma lagringskonto för att hämta data. Lagringen ägs av leaderdatabasen. Efterföljardatabasen visar data utan att behöva mata in dem. Eftersom den anslutna databasen är en skrivskyddad databas kan data, tabeller och principer i databasen inte ändras förutom cachelagringsprincip, huvudnamn och behörigheter. Anslutna databaser kan inte tas bort. De måste kopplas från av ledaren eller följaren och först då kan de tas bort.

Att koppla en databas till ett annat kluster med hjälp av uppföljningsfunktionen används som infrastruktur för att dela data mellan organisationer och team. Funktionen är användbar för att separera beräkningsresurser för att skydda en produktionsmiljö från användningsfall utanför produktion. Följare kan också användas för att associera kostnaden för Azure Data Explorer kluster till den part som kör frågor på data.

Vilka databaser följs?

  • Ett kluster kan följa en databas, flera databaser eller alla databaser i ett leaderkluster.
  • Ett enda kluster kan följa databaser från flera leader-kluster.
  • Ett kluster kan innehålla både efterföljardatabaser och ledardatabaser.
  • EngineV3-kluster kan bara följa EngineV3-kluster och EngineV2-kluster bara kan följa V2-kluster.

Förutsättningar

Ansluta en databas

Det finns olika metoder som du kan använda för att koppla en databas. I den här artikeln diskuterar vi hur du kopplar en databas med hjälp av C#, Python, PowerShell eller en Azure Resource Manager-mall. Om du vill koppla en databas måste du ha användare, grupp, tjänstens huvudnamn eller hanterad identitet med minst deltagarroll i leader-klustret och uppföljningsklustret. Lägg till eller ta bort rolltilldelningar med hjälp av mallen Azure Portal, PowerShell, Azure CLI och ARM. Läs mer om rollbaserad åtkomstkontroll i Azure (Azure RBAC) och de olika rollerna.

Delning på tabellnivå

När alla tabeller kopplas till databasen följs även externa tabeller och materialiserade vyer. Du kan dela specifika tabeller/externa tabeller/materialiserade vyer genom att konfigurera TableLevelSharingProperties.

TableLevelSharingProperties innehåller åtta matriser med strängar: tablesToInclude, , tablesToExcludeexternalTablesToInclude, externalTablesToExclude, materializedViewsToInclude, , materializedViewsToExclude, functionsToIncludeoch functionsToExclude. Det maximala antalet poster i alla matriser tillsammans är 100.

Anteckning

Delning på tabellnivå stöds inte när du använder notationen *.

Anteckning

När materialiserade vyer ingår ingår även deras källtabeller.

Exempel

  1. Inkludera alla tabeller. Ingen *- krävs eftersom alla tabeller följs som standard:

    tablesToInclude = []
    
  2. Inkludera alla tabeller med namn som börjar med "Loggar":

    tablesToInclude = ["Logs*"]
    
  3. Undanta alla externa tabeller:

    externalTablesToExclude = ["*"]
    
  4. Undanta alla materialiserade vyer:

    materializedViewsToExclude=["*"]
    

Åsidosättning av databasnamn

Du kan också göra databasnamnet i följeklustret annorlunda än leaderklustret. Du kanske till exempel vill koppla samma databasnamn från flera leader-kluster till ett uppföljningskluster. Om du vill ange ett annat databasnamn konfigurerar du egenskapen DatabaseNameOverride eller DatabaseNamePrefix.

Koppla en databas med C #

Nödvändiga NuGet-paket

C#-exempel

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = followerSubscriptionId };
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new AttachedDatabaseConfiguration
{
    ClusterResourceId = $"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}",
    DatabaseName = "<databaseName>", // Can be specific database name or * for all databases
    DefaultPrincipalsModificationKind = "Union",
    Location = "North Central US"
};
// Table level sharing properties are not supported when using '*' all databases notation.
if (attachedDatabaseConfigurationData.DatabaseName != "*")
{
    // Set up the table level sharing properties - the following is just an example.
    attachedDatabaseConfigurationData.TableLevelSharingProperties = new TableLevelSharingProperties(
        tablesToInclude:new List<string> { "table1" },
        tablesToExclude:new List<string> { "table2" },
        externalTablesToInclude:new List<string> { "exTable1" },
        externalTablesToExclude:new List<string> { "exTable2" },
        materializedViewsToInclude:new List<string> { "matTable1" },
        materializedViewsToExclude:new List<string> { "matTable2" }
    );
}
await resourceManagementClient.AttachedDatabaseConfigurations.CreateOrUpdateAsync(
    followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData
);

Kontrollera att databasen har kopplats

Du kan kontrollera att databasen har kopplats genom att leta rätt på de kopplade databaserna i Azure Portal. Du kan kontrollera att databaserna har kopplats i antingen följar - eller ledarklustren .

Kontrollera ditt följarkluster

  1. Bläddra till följarklustret och välj Databaser.

  2. I databaslistan söker du efter nya skrivskyddade databaser.

    Skärmbild av skrivskyddade uppföljningsdatabaser i portalen.

    Du kan också visa den här listan på översiktssidan för databasen:

    Skärmbild av översiktssidan för databaser med en lista över följarkluster.

Kontrollera ditt ledarkluster

  1. Bläddra till ledarklustret och välj Databaser

  2. Kontrollera att de relevanta databaserna har markerats som DELADE MED ANDRA>Ja

  3. Växla relationslänken för att visa information.

    Skärmbild av databaser som delas med andra för att kontrollera leader-klustret.

    Du kan också visa detta på översiktssidan för databasen:

    Skärmbild av översikt med en lista över databaser som delas med andra.

Koppla från uppföljningsdatabasen

Anteckning

Om du vill koppla från en databas från följaren eller ledaren måste du ha användare, grupp, tjänstens huvudnamn eller hanterad identitet med minst deltagarroll i klustret som du kopplar från databasen från. I exemplet nedan använder vi tjänstens huvudnamn.

Koppla från den anslutna uppföljningsdatabasen från följarklustret med C#**

Följeklustret kan koppla från alla anslutna uppföljningsdatabaser på följande sätt:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = followerSubscriptionId };
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
await resourceManagementClient.AttachedDatabaseConfigurations.DeleteAsync(
    followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationsName
);

Koppla från den anslutna uppföljningsdatabasen från leaderklustret med hjälp av C #

Leader-klustret kan koppla från alla anslutna databaser på följande sätt:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = leaderSubscriptionId };
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerResourceGroupName = "followerResourceGroup";
//The cluster and attached database configuration that are created as part of the Prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var followerDatabaseDefinition = new FollowerDatabaseDefinition
{
    ClusterResourceId = $"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}",
    AttachedDatabaseConfigurationName = attachedDatabaseConfigurationsName
};
await resourceManagementClient.Clusters.DetachFollowerDatabasesAsync(
    leaderResourceGroupName, leaderClusterName, followerDatabaseDefinition
);

Hantera principer för huvudkonton, behörigheter och cachelagring

Hantera huvudkonton

När du kopplar en databas anger du ändringstypen "standardhuvudkonton". Standardinställningen är att kombinera åsidosättningsauktoriserade huvudkonton med leader-databassamlingen av auktoriserade huvudkonton

Variant Beskrivning
Unionen De kopplade databashuvudkontona innehåller alltid de ursprungliga databashuvudkontona plus andra nya huvudkonton som läggs till i den följande databasen.
Ersätt Inget arv av huvudkonton från den ursprungliga databasen. Nya huvudkonton måste skapas för den anslutna databasen.
Ingen De kopplade databashuvudkontona innehåller endast huvudnamnen för den ursprungliga databasen utan några andra huvudkonton.

Mer information om hur du använder kontrollkommandon för att konfigurera auktoriserade huvudkonton finns i Kontrollkommandon för att hantera ett följarkluster.

Hantera behörigheter

Hantering av skrivskyddad databasbehörighet är samma som för alla databastyper. Se Hantera behörigheter i Azure Portal.

Konfigurera cachelagringsprincip

Den följande databasadministratören kan ändra cachelagringsprincipen för den anslutna databasen eller någon av dess tabeller i värdklustret. Standardinställningen är att kombinera källdatabasen i leader-klusterdatabasen och cachelagringsprinciper på tabellnivå med de principer som definierats i principerna för åsidosättning på databas- och tabellnivå. Du kan till exempel ha en 30-dagars cachelagringsprincip på ledardatabasen för att köra månatlig rapportering och en tre dagars cachelagringsprincip på uppföljningsdatabasen för att endast köra frågor mot de senaste data för felsökning. Mer information om hur du använder kontrollkommandon för att konfigurera cachelagringsprincipen i följande databas eller tabell finns i Kontrollkommandon för att hantera ett uppföljningskluster.

Kommentarer

  • Om det finns konflikter mellan databaser med leader/follower-kluster, och när alla databaser följs av det efterföljande klustret, löses de på följande sätt:
    • En databas med namnet DB som skapats i följarklustret har företräde framför en databas med samma namn som skapades i leaderklustret. Därför måste databasdatabasen i uppföljningsklustret tas bort eller byta namn för att följarklustret ska inkludera ledarens databasdatabas.
    • En databas med namnet DB följt av två eller flera ledarkluster väljs godtyckligt från ett av ledarkluster och följs inte mer än en gång.
  • Kommandon för att visa klusteraktivitetsloggen och historiken som körs på ett följarkluster visar aktiviteten och historiken i det följande klustret, och deras resultatuppsättningar inkluderar inte dessa resultat från leaderklustret eller klustren.
    • Till exempel: ett .show queries kommando som körs på följarklustret visar bara frågor som körs på databaser följt av följarkluster och inte frågor som körs mot samma databas i leader-klustret.

Begränsningar

  • Följaren och ledarklustren måste finnas i samma region.
  • Om inmatning av direktuppspelning används på en databas som följs, bör följarklustret aktiveras för strömningsinmatning för att tillåta följande data för strömmande inmatning.
  • Datakryptering med kundhanterade nycklar stöds inte i både ledar- och uppföljningskluster.
  • Du kan inte ta bort en databas som är kopplad till ett annat kluster innan du kopplar från den.
  • Du kan inte ta bort ett kluster som har en databas kopplad till ett annat kluster innan du kopplar från det.
  • Delningsegenskaper på tabellnivå stöds inte när du följer alla databaser.

Nästa steg