Delen via


Volgdatabases gebruiken

Met de volgdatabasefunctie kunt u een database in een ander cluster koppelen aan uw Azure Data Explorer-cluster. De volgdatabase is gekoppeld in de modus Alleen-lezen , waardoor het mogelijk is om de gegevens te bekijken en query's uit te voeren op de gegevens die zijn opgenomen in de leader-database. De volgdatabase synchroniseert wijzigingen in de leader-databases. Vanwege de synchronisatie is er een gegevensvertraging van enkele seconden tot enkele minuten in de beschikbaarheid van gegevens. De duur van de tijdsvertraging is afhankelijk van de totale grootte van de metagegevens van de leader-database. De leader- en volgdatabases gebruiken hetzelfde opslagaccount om de gegevens op te halen. De opslag is eigendom van de leader-database. De volgdatabase bekijkt de gegevens zonder deze op te nemen. Omdat de gekoppelde database een alleen-lezendatabase is, kunnen de gegevens, tabellen en beleidsregels in de database niet worden gewijzigd, met uitzondering van cachebeleid, principals en machtigingen. Gekoppelde databases kunnen niet worden verwijderd. Ze moeten worden losgekoppeld door de leider of volger en alleen dan kunnen ze worden verwijderd.

Het koppelen van een database aan een ander cluster met behulp van de volgfunctie wordt gebruikt als de infrastructuur voor het delen van gegevens tussen organisaties en teams. De functie is handig om rekenresources te scheiden om een productieomgeving te beschermen tegen niet-productiegebruiksscenario's. Volger kan ook worden gebruikt om de kosten van Azure Data Explorer-cluster te koppelen aan de partij die query's uitvoert op de gegevens.

Welke databases worden gevolgd?

  • Een cluster kan één database, meerdere databases of alle databases van een leadercluster volgen.
  • Eén cluster kan databases van meerdere leaderclusters volgen.
  • Een cluster kan zowel volgdatabases als leaderdatabases bevatten.
  • EngineV3-clusters kunnen alleen EngineV3-clusters volgen, net zoals EngineV2-clusters alleen V2-clusters kunnen volgen.

Vereisten

Een database koppelen

Er zijn verschillende methoden die u kunt gebruiken om een database te koppelen. In dit artikel bespreken we het koppelen van een database met behulp van C#, Python, PowerShell of een Azure Resource Manager-sjabloon. Als u een database wilt koppelen, moet u een gebruiker, groep, service-principal of beheerde identiteit hebben met ten minste de rol Inzender voor het leidercluster en het volgcluster. Roltoewijzingen toevoegen of verwijderen met behulp van Azure Portal, PowerShell, Azure CLI en ARM-sjabloon. Meer informatie over op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) en de verschillende rollen.

Delen op tabelniveau

Bij het koppelen van de database worden alle tabellen, externe tabellen en gerealiseerde weergaven ook gevolgd. U kunt specifieke tabellen/externe tabellen/gerealiseerde weergaven delen door de 'TableLevelSharingProperties' te configureren.

'TableLevelSharingProperties' bevat acht matrices met tekenreeksen: tablesToInclude, tablesToExclude, externalTablesToInclude, externalTablesToExclude, materializedViewsToInclude, materializedViewsToExclude, functionsToIncludeen functionsToExclude. Het maximum aantal vermeldingen in alle matrices samen is 100.

Notitie

Delen op tabelniveau wordt niet ondersteund bij het gebruik van de notatie *.

Notitie

Wanneer gerealiseerde weergaven worden opgenomen, worden de brontabellen ook opgenomen.

Voorbeelden

  1. Alle tabellen opnemen. Er is geen *nodig, omdat alle tabellen standaard worden gevolgd:

    tablesToInclude = []
    
  2. Neem alle tabellen op met namen die beginnen met 'Logboeken':

    tablesToInclude = ["Logs*"]
    
  3. Alle externe tabellen uitsluiten:

    externalTablesToExclude = ["*"]
    
  4. Alle gerealiseerde weergaven uitsluiten:

    materializedViewsToExclude=["*"]
    

Databasenaam overschrijven

U kunt de databasenaam in het volgcluster desgewenst anders maken dan het leadercluster. U kunt bijvoorbeeld dezelfde databasenaam van meerdere leader-clusters koppelen aan een volgcluster. Als u een andere databasenaam wilt opgeven, configureert u de eigenschap 'DatabaseNameOverride' of 'DatabaseNamePrefix'.

Een database koppelen met behulp van C #

Vereiste NuGet-pakketten

C#-voorbeeld

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
);

Controleer of de database is gekoppeld

Als u wilt controleren of de database is gekoppeld, zoekt u de gekoppelde databases in de Azure Portal. U kunt controleren of de databases zijn gekoppeld in de volger - of leaderclusters .

Uw volgercluster controleren

  1. Blader naar het volgcluster en selecteer Databases.

  2. Zoek in de databaselijst naar nieuwe alleen-lezen databases.

    Schermopname van alleen-lezenvolgerdatabases in de portal.

    U kunt deze lijst ook weergeven op de overzichtspagina van de database:

    Schermopname van de overzichtspagina van databases met een lijst met volgclusters.

Uw leidercluster controleren

  1. Blader naar het leadercluster en selecteer Databases

  2. Controleer of de relevante databases zijn gemarkeerd als GEDEELD MET ANDEREN>Ja

  3. Schakel de koppeling naar de relatie in om details weer te geven.

    Schermopname van databases die met anderen zijn gedeeld om het leadercluster te controleren.

    U kunt dit ook bekijken op de overzichtspagina van de database:

    Schermopname van een overzicht met een lijst met databases die met anderen zijn gedeeld.

De volgdatabase loskoppelen

Notitie

Als u een database wilt loskoppelen van de zijde van de volger of leider, moet u een gebruiker, groep, service-principal of beheerde identiteit hebben met ten minste de rol van inzender voor het cluster waaruit u de database loskoppelt. In het onderstaande voorbeeld gebruiken we een service-principal.

Koppel de gekoppelde volgvolgerdatabase los van het volgcluster met behulp van C#**

Het volgcluster kan als volgt elke gekoppelde volgerdatabase loskoppelen:

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
);

Koppel de gekoppelde volgvolgerdatabase los van het leadercluster met behulp van C #

Het leader-cluster kan elke gekoppelde database als volgt loskoppelen:

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
);

Principals, machtigingen en cachebeleid beheren

Principals beheren

Wanneer u een database koppelt, geeft u het 'wijzigingstype standaardprincipals' op. De standaardinstelling is om de override geautoriseerde principals te combineren met de leader-databaseverzameling van geautoriseerde principals

Soort Beschrijving
Unie De gekoppelde database-principals bevatten altijd de oorspronkelijke database-principals plus andere nieuwe principals die zijn toegevoegd aan de volgdatabase.
Vervangen Geen overname van principals uit de oorspronkelijke database. Er moeten nieuwe principals worden gemaakt voor de gekoppelde database.
Geen De gekoppelde database-principals bevatten alleen de principals van de oorspronkelijke database zonder andere principals.

Zie Besturingsopdrachten voor het beheren van een volgcluster voor meer informatie over het gebruik van besturingsopdrachten voor het configureren van de geautoriseerde principals.

Machtigingen beheren

Het beheren van alleen-lezen databasemachtigingen is hetzelfde als voor alle databasetypen. Zie Machtigingen beheren in de Azure Portal.

Cachebeleid configureren

De beheerder van de volgdatabase kan het cachebeleid van de gekoppelde database of een van de tabellen in het hostcluster wijzigen. De standaardinstelling is om de brondatabase in de leaderclusterdatabase en cachebeleid op tabelniveau te combineren met de beleidsregels die zijn gedefinieerd in het beleid voor database- en overschrijving op tabelniveau. U kunt bijvoorbeeld een cachebeleid van 30 dagen hebben voor de leader-database voor het uitvoeren van maandelijkse rapportage en een cachebeleid van drie dagen voor de volgerdatabase om alleen de recente gegevens op te vragen voor probleemoplossing. Zie Besturingsopdrachten voor het beheren van een volgcluster voor meer informatie over het gebruik van besturingsopdrachten voor het configureren van het cachebeleid voor de volgdatabase of tabel.

Notities

  • Als er conflicten zijn tussen databases van leader-/volgerclusters en alle databases worden gevolgd door het volgcluster, worden deze als volgt opgelost:
    • Een database met de naam DB die op het volgcluster is gemaakt, heeft voorrang op een database met dezelfde naam die is gemaakt op het leadercluster. Daarom moet de databasedatabase in het volgcluster worden verwijderd of de naam ervan worden gewijzigd, zodat het volgcluster de databaseDATABASE van de leider kan opnemen.
    • Een database met de naam DB die wordt gevolgd uit twee of meer leaderclusters, wordt willekeurig gekozen uit een van de leiderclusters en wordt niet meer dan één keer gevolgd.
  • Opdrachten voor het weergeven van het activiteitenlogboek en de geschiedenis van het cluster die worden uitgevoerd op een volgcluster, tonen de activiteit en geschiedenis op het volgcluster en de resultatensets bevatten niet die resultaten van het leidercluster of de clusters.
    • Bijvoorbeeld: een .show queries opdracht die wordt uitgevoerd op het volgcluster toont alleen query's die worden uitgevoerd op databases gevolgd door volgcluster, en geen query's worden uitgevoerd op dezelfde database in het leader-cluster.

Beperkingen

  • De volger- en leiderclusters moeten zich in dezelfde regio bevinden.
  • Als streamingopname wordt gebruikt voor een database die wordt gevolgd, moet het volgcluster worden ingeschakeld voor streamingopname om het volgen van streamingopnamegegevens mogelijk te maken.
  • Gegevensversleuteling met door de klant beheerde sleutels wordt niet ondersteund op zowel leader- als volgerclusters.
  • U kunt een database die is gekoppeld aan een ander cluster niet verwijderen voordat u deze loskoppelt.
  • U kunt een cluster waaraan een database is gekoppeld aan een ander cluster niet verwijderen voordat u het loskoppelt.
  • Eigenschappen voor delen op tabelniveau worden niet ondersteund bij het volgen van alle databases.

Volgende stappen