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.
Zie het gearchiveerde artikel voor codevoorbeelden op basis van eerdere SDK-versies.
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.
Vereisten
- Een Azure-abonnement. Maak een gratis Azure-account.
- Een Azure Data Explorer cluster en database voor de leider en volger. Maak een cluster en database.
- De leader-database moet gegevens bevatten. U kunt gegevens opnemen met behulp van een van de methoden die worden besproken in het overzicht van opname.
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
, functionsToInclude
en functionsToExclude
. Het maximum aantal vermeldingen in alle matrices samen is 100.
Notitie
- Delen op tabelniveau wordt niet ondersteund bij het gebruik van de notatie *.
- Wanneer gerealiseerde weergaven worden opgenomen, worden de brontabellen ook opgenomen.
Voorbeelden
Alle tabellen opnemen. Er is geen *nodig, omdat alle tabellen standaard worden gevolgd:
tablesToInclude = []
Neem alle tabellen op met namen die beginnen met 'Logboeken':
tablesToInclude = ["Logs*"]
Alle externe tabellen uitsluiten:
externalTablesToExclude = ["*"]
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
- Installeer Azure.ResourceManager.Kusto.
- Installeer Azure.Identity voor verificatie.
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 = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfigurations = cluster.GetKustoAttachedDatabaseConfigurations();
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new KustoAttachedDatabaseConfigurationData
{
ClusterResourceId = new ResourceIdentifier($"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}"),
DatabaseName = "<databaseName>", // Can be a specific database name in a leader cluster or * for all databases
DefaultPrincipalsModificationKind = KustoDatabaseDefaultPrincipalsModificationKind.Union,
Location = AzureLocation.NorthCentralUS
};
// 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 KustoDatabaseTableLevelSharingProperties();
attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToInclude.Add("table1");
attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToExclude.Add("table2");
attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToExclude.Add("exTable1");
attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToInclude.Add("exTable2");
attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToInclude.Add("matTable1");
attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToExclude.Add("matTable2");
attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToInclude.Add("func1");
attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToExclude.Add("func2");
}
await attachedDatabaseConfigurations.CreateOrUpdateAsync(WaitUntil.Completed, 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
Blader naar het volgcluster en selecteer Databases.
Zoek in de databaselijst naar nieuwe alleen-lezen databases.
U kunt deze lijst ook weergeven op de overzichtspagina van de database:
Uw leidercluster controleren
Blader naar het leadercluster en selecteer Databases
Controleer of de relevante databases zijn gemarkeerd als GEDEELD MET ANDEREN>Ja
Schakel de koppeling naar de relatie in om details weer te geven.
U kunt dit ook bekijken op de overzichtspagina van de database:
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 = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfiguration = (await cluster.GetKustoAttachedDatabaseConfigurationAsync(attachedDatabaseConfigurationsName)).Value;
await attachedDatabaseConfiguration.DeleteAsync(WaitUntil.Completed);
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 = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, leaderSubscriptionId);
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(leaderResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(leaderClusterName)).Value;
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 KustoFollowerDatabaseDefinition(
clusterResourceId: new ResourceIdentifier($"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}"),
attachedDatabaseConfigurationName: attachedDatabaseConfigurationsName
);
await cluster.DetachFollowerDatabasesAsync(WaitUntil.Completed, 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 Beheeropdrachten voor het beheren van een volgercluster voor meer informatie over het gebruik van beheeropdrachten voor het configureren van de geautoriseerde principals.
Machtigingen beheren
Het beheren van alleen-lezen databasemachtigingen is hetzelfde als voor alle databasetypen. Als u machtigingen wilt toewijzen, raadpleegt u Databasemachtigingen beheren in de Azure Portal of gebruikt u beheeropdrachten om databasebeveiligingsrollen te beheren.
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 Beheeropdrachten voor het beheren van een volgcluster voor meer informatie over het gebruik van beheeropdrachten voor het configureren van het cachebeleid voor de volgerdatabase 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.
- Bijvoorbeeld: een
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.
- Het volgen van een cluster met gegevensversleuteling met behulp van door de klant beheerde sleutels (CMK) wordt ondersteund met de volgende beperkingen:
- Noch het volgcluster noch het leadercluster volgt andere clusters.
- Als een volgercluster een leadercluster volgt waarvoor CMK is ingeschakeld en de toegang van de leider tot de sleutel wordt ingetrokken, worden zowel de leader- als de volgerclusters opgeschort. In dit geval kunt u het CMK-probleem oplossen en vervolgens het volgcluster hervatten, of u kunt de volgdatabases loskoppelen van het volgcluster en onafhankelijk van het leadercluster hervatten.
- 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.
- Als u in volgdatabases query's wilt uitvoeren op externe tabellen die een beheerde identiteit als verificatiemethode gebruiken, moet de beheerde identiteit worden toegevoegd aan het volgcluster. Deze mogelijkheid werkt niet wanneer de leader- en volgerclusters zijn ingericht in verschillende tenants.