Använda följardatabaser

Med följardatabasfunktionen 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 på de data som matades in i leader-databasen . Följardatabasen synkroniserar ändringar i ledande databaser. På grund av synkroniseringen finns det en datafördröjning på några sekunder till några minuter i datatillgänglighet. Längden på tidsfördröjning beror på den övergripande storleken på metadata för den ledande databasen. Databaserna för ledare och följare använder samma lagringskonto för att hämta data. Lagringen ägs av den ledande databasen. Följardatabasen visar data utan att behöva mata in dem. Eftersom den anslutna databasen är en skrivskyddade databas kan data, tabeller och principer i databasen inte ändras förutom cachelagringsprincipen ,huvudnamnenoch behörigheterna. Anslutna databaser kan inte tas bort. De måste vara frånkopplade av ledaren eller följare och först då kan de tas bort.

Att koppla en databas till ett annat kluster med hjälp av följarfunktion används som infrastruktur för att dela data mellan organisationer och team. Funktionen är användbar för att åtsega beräkningsresurser för att skydda en produktionsmiljö från icke-produktionsanvändningsfall. 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 ledande kluster.
  • Ett enskilt kluster kan följa databaser från flera ledande kluster.
  • Ett kluster kan innehålla både följardatabaser och ledande databaser.
  • EngineV3-kluster kan bara följa EngineV3-kluster, på liknande sätt kan EngineV2-kluster endast 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 C#, Python, PowerShell eller en Azure Resource Manager mall. Om du vill koppla en databas måste du ha användar-, grupp-, tjänsthuvudnamn eller hanterad identitet med minst deltagarroll i klustret för ledare och följarklustret. Lägg till eller ta bort rolltilldelningar med Azure Portal,PowerShell,Azure CLIoch ARM-mall. Läs mer om rollbaserad åtkomstkontroll i Azure (Azure RBAC) och de olika rollerna.

Delning på tabellnivå

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

TableLevelSharingPropertiesinnehåller sex matriser med strängar: , , , , och tablesToExcludeexternalTablesToIncludeexternalTablesToExcludematerializedViewsToIncludematerializedViewsToExclude . Det maximala antalet poster i alla matriser tillsammans är 100.

Anteckning

Delning på tabellnivå stöds inte när du använder "*" alla databas notation.

Anteckning

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

Exempel

  1. Inkludera alla tabeller. Nej "*" behövs eftersom alla tabeller följs av standard:

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

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

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

    materializedViewsToExclude=["*"]
    

Koppla en databas med C #

Nödvändiga NuGets

Exempel

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Application ID
var clientSecret = "xxxxxxxxxxxxxx";//Client secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";

var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(serviceCreds){
    SubscriptionId = followerSubscriptionId
};

var followerResourceGroupName = "followerResouceGroup";
var leaderResourceGroup = "leaderResouceGroup";
var leaderClusterName = "leader";
var followerClusterName = "follower";
var attachedDatabaseConfigurationName = "uniqueNameForAttachedDatabaseConfiguration";
var databaseName = "db"; // Can be specific database name or * for all databases
var defaultPrincipalsModificationKind = "Union"; 
var location = "North Central US";


TableLevelSharingProperties tls;
if (databaseName == "*")
{
    // Table level sharing properties are not supported when using '*' all databases notation.
    tls = null;
}
else
{
    // Set up the table level sharing properties - the following is just an example.
    var tablesToInclude = new List<string>
    {
        "table1",
        "table2",
        "table3"
    };
    var externalTablesToExclude = new List<string>
    {
        "Logs*"
    };
    var tls = new TableLevelSharingProperties(tablesToInclude: tablesToInclude, externalTablesToExclude: externalTablesToExclude);
}


AttachedDatabaseConfiguration attachedDatabaseConfigurationProperties = new AttachedDatabaseConfiguration()
{
    ClusterResourceId = $"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}",
    DatabaseName = databaseName,
    DefaultPrincipalsModificationKind = defaultPrincipalsModificationKind,
    Location = location,
    TableLevelSharingProperties = tls
};

var attachedDatabaseConfigurations = resourceManagementClient.AttachedDatabaseConfigurations.CreateOrUpdate(followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationName, attachedDatabaseConfigurationProperties);

Kontrollera att databasen har kopplats

Kontrollera att databasen har kopplats genom att leta upp de anslutna databaserna i Azure Portal. Du kan kontrollera att databaserna har kopplats i antingen följar- eller ledande kluster.

Kontrollera ditt följarkluster

  1. Gå till följarklustret och välj Databaser

  2. Sök efter nya skrivskyddade databaser i databaslistan.

    Databas med skrivskyddade följare.

Kontrollera ditt ledande kluster

  1. Gå till ledande kluster och välj Databaser

  2. Kontrollera att relevanta databaser är markerade som DELADE MED ANDRAJa

    Läsa och skriva bifogade databaser.

Koppla från följardatabasen

Anteckning

Om du vill koppla bort en databas från följare eller ledare måste du ha användar-, grupp-, tjänsthuvudnamn eller hanterad identitet med minst deltagarroll i klustret som du vill koppla från databasen från. I exemplet nedan använder vi tjänstens huvudnamn.

Koppla bort den anslutna följardatabasen från följarklustret med C #

Följarklustret kan koppla från alla anslutna följardatabaser 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 = "xxxxxxxxxxxxxx";//Client secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";

var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(serviceCreds){
    SubscriptionId = followerSubscriptionId
};

var followerResourceGroupName = "testrg";
//The cluster and database that are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "uniqueName";

resourceManagementClient.AttachedDatabaseConfigurations.Delete(followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationsName);

Koppla bort den anslutna följardatabasen från klustret med C #

Ledareklustret 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 = "xxxxxxxxxxxxxx";//Client secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";

var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(serviceCreds){
    SubscriptionId = leaderSubscriptionId
};

var leaderResourceGroupName = "testrg";
var followerResourceGroupName = "followerResouceGroup";
var leaderClusterName = "leader";
var followerClusterName = "follower";
//The cluster and database that are created as part of the Prerequisites
var followerDatabaseDefinition = new FollowerDatabaseDefinition()
    {
        AttachedDatabaseConfigurationName = "uniqueName",
        ClusterResourceId = $"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}"
    };

resourceManagementClient.Clusters.DetachFollowerDatabases(leaderResourceGroupName, leaderClusterName, followerDatabaseDefinition);

Hantera huvudnamn, behörigheter och cachelagringsprincip

Hantera huvudnamn

När du kopplar en databas anger du "standardändrings kind för huvudnamn". Standardvärdet är att behålla den ledande databassamlingen med auktoriserade huvudnamn

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

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

Hantera behörigheter

Hantering av skrivskyddade databasbehörigheter ä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 behålla den ledande databassamlingen med principer för databas- och cachelagring på tabellnivå. Du kan till exempel ha en 30-dagars cachelagringsprincip på leader-databasen för att köra månatlig rapportering och en tredagars cachelagringsprincip på den följardatabasen för att endast fråga efter de senaste data för felsökning. Mer information om hur du använder kontrollkommandon för att konfigurera cachelagringsprincipen på den följardatabasen eller -tabellen finns i Kontrollkommandon för att hantera ett följarkluster.

Kommentarer

  • Om det finns konflikter mellan databaser i leader-/följarkluster, när alla databaser följs av följarklustret, 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 ledareklustret. Det är därför databasdatabasen i följarklustret måste tas bort eller byta namn för att följarklustret ska inkludera ledarens databasdatabas.
    • En databas med namnet DB som följs av två eller flera ledande kluster väljs godtyckligt från ett av de ledande klustren och följs inte mer än en gång.
  • Kommandon för att visa aktivitetsloggen och historiken för kluster som körs i ett följarkluster visar aktiviteten och historiken i följarklustret, och deras resultatuppsättningar innehåller inte dessa resultat från ledareklustret eller -klustren.
    • Ett kommando som körs i klustret med följare visar till exempel bara frågor som körs på databaser följt av följarkluster och inte frågor som körs mot samma databas i .show queries ledareklustret.

Begränsningar

  • Följare och ledare måste finnas i samma region.
  • Strömningsinmatning kan inte användas på en databas som följs.
  • Datakryptering med kund hanterade nycklar stöds inte i både ledare och följarkluster.
  • Du kan inte ta bort en databas som är ansluten till ett annat kluster innan du tar bort den.
  • Du kan inte ta bort ett kluster som har en databas som är kopplad till ett annat kluster innan du frånkopplade det.
  • Delningsegenskaper på tabellnivå stöds inte när du följer alla databaser.

Nästa steg