Verwenden von Follower-Datenbanken

Mit der Funktion Follower-Datenbank können Sie eine Datenbank, die sich in einem anderen Cluster befindet, an Ihren Azure Data Explorer-Cluster anfügen. Die Follower-Datenbank wird im schreibgeschützten Modus angefügt, sodass Sie die Daten anzeigen und Abfragen für die Daten ausführen können, die in der Leader-Datenbank erfasst wurden. Die Follower-Datenbank synchronisiert Änderungen in den Leader-Datenbanken. Aufgrund der Synchronisierung gibt es bei der Datenverfügbarkeit eine Zeitverzögerung von einigen Sekunden bis zu einigen Minuten. Die Länge der Zeitverzögerung hängt von der Gesamtgröße der Metadaten in der Leader-Datenbank ab. Die Leader- und Follower-Datenbanken verwenden dasselbe Speicherkonto zum Abrufen der Daten. Der Speicher befindet sich im Besitz der Leader-Datenbank. Die Follower-Datenbank zeigt die Daten an, ohne sie erfassen zu müssen. Da die angefügte Datenbank eine schreibgeschützte Datenbank ist, können die Daten, Tabellen und Richtlinien in der Datenbank nicht geändert werden, mit Ausnahme der Cacherichtlinie, Prinzipale und Berechtigungen. Angefügte Datenbanken können nicht gelöscht werden. Zum Löschen müssen sie zunächst vom Leader- oder Follower-Cluster getrennt werden.

Das Anfügen einer Datenbank an einen anderen Cluster mithilfe der Follower-Funktion wird als Infrastruktur zum Freigeben von Daten zwischen Organisationen und Teams verwendet. Die Funktion ist nützlich, um Computeressourcen zu trennen und so eine Produktionsumgebung vor nicht produktionsbezogenen Anwendungsfällen zu schützen. Follower können auch verwendet werden, um die Kosten eines Azure Data Explorer-Clusters demjenigen zuzuordnen, der Abfragen für die Daten ausführt.

Codebeispiele, die auf früheren SDK-Versionen basieren, finden Sie im archivierten Artikel.

Welche Datenbanken wird gefolgt?

  • Ein Cluster kann einer Datenbank, mehreren Datenbanken oder allen Datenbanken eines Leader-Clusters folgen.
  • Ein einzelner Cluster kann Datenbanken von mehreren Leader-Clustern folgen.
  • Ein Cluster kann sowohl Follower- als auch Leader-Datenbanken enthalten.

Voraussetzungen

Anfügen einer Datenbank

Es gibt verschiedene Methoden zum Anfügen einer Datenbank. In diesem Artikel wird das Anfügen einer Datenbank mithilfe von C#, Python, PowerShell oder einer Azure Resource Manager-Vorlage beschrieben. Zum Anfügen einer Datenbank benötigen Sie einen Benutzer, eine Gruppe, einen Dienstprinzipal oder eine verwaltete Identität mit mindestens der Rolle „Mitwirkender“ für den Leader-Cluster und den Follower-Cluster. Sie können Rollenzuweisungen mit dem Azure-Portal, PowerShell, der Azure CLI und einer ARM-Vorlage hinzufügen oder entfernen. Weitere Informationen zur rollenbasierten Zugriffssteuerung in Azure (Role-Based Access Control, RBAC) und zu den verschiedenen Rollen finden Sie hier und hier.

Freigabe auf Tabellenebene

Beim Anfügen der Datenbank wird auch allen Tabellen, externen Tabellen und materialisierten Sichten gefolgt. Sie können bestimmte Tabellen/externe Tabellen/materialisierte Sichten freigeben, indem Sie TableLevelSharingProperties konfigurieren.

"TableLevelSharingProperties" enthält acht Arrays von Zeichenfolgen: tablesToInclude, , tablesToExclude, externalTablesToExcludeexternalTablesToInclude, materializedViewsToInclude, materializedViewsToExclude, functionsToIncludeund functionsToExclude. Die maximale Anzahl von Einträgen in allen Arrays zusammen beträgt 100.

Hinweis

  • Die Freigabe auf Tabellenebene wird nicht unterstützt, wenn die Notation „*“ (alle Datenbanken) verwendet wird.
  • Wenn materialisierte Sichten einbezogen werden, werden auch ihre Quelltabellen einbezogen.

Beispiele

  1. Schließen Sie alle Tabellen ein. „*“ ist nicht erforderlich, da standardmäßig allen Tabellen gefolgt wird:

    tablesToInclude = []
    
  2. Schließen Sie alle Tabellen mit Namen ein, die mit „Logs“ beginnen:

    tablesToInclude = ["Logs*"]
    
  3. Schließen Sie alle externen Tabellen aus:

    externalTablesToExclude = ["*"]
    
  4. Schließen Sie alle materialisierten Sichten aus:

    materializedViewsToExclude=["*"]
    

Datenbankname außer Kraft setzen

Optional können Sie den Datenbanknamen im Followercluster vom Leadercluster unterscheiden. Beispielsweise können Sie denselben Datenbanknamen aus mehreren Leaderclustern an einen Followercluster anfügen. Um einen anderen Datenbanknamen anzugeben, konfigurieren Sie die Eigenschaft "DatabaseNameOverride" oder "DatabaseNamePrefix".

Anfügen einer Datenbank mithilfe von C#

Erforderliche NuGet-Pakete

C#-Beispiel

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

Überprüfen, ob die Datenbank erfolgreich angehängt wurde

Um zu überprüfen, ob die Datenbank erfolgreich angefügt wurde, suchen Sie im Azure-Portal nach angefügten Datenbanken. Sie können das erfolgreiche Anfügen der Datenbanken im Follower- oder Leader-Cluster überprüfen.

Überprüfen des Follower-Clusters

  1. Navigieren Sie zum Followercluster, und wählen Sie Datenbanken aus.

  2. Suchen Sie in der Datenbankliste nach neuen schreibgeschützten Datenbanken.

    Screenshot der schreibgeschützten Followerdatenbanken im Portal.

    Sie können diese Liste auch auf der Übersichtsseite der Datenbank anzeigen:

    Screenshot der Übersichtsseite für Datenbanken mit einer Liste der Followercluster.

Überprüfen des Leader-Clusters

  1. Navigieren Sie zum Leadercluster, und wählen Sie Datenbanken aus.

  2. Überprüfen Sie, ob die relevanten Datenbanken unter FREIGEGEBEN FÜR WEITERE PERSONEN mit Ja gekennzeichnet sind.

  3. Schalten Sie den Beziehungslink um, um Details anzuzeigen.

    Screenshot: Datenbanken, die für andere Freigegeben wurden, um den Leadercluster zu überprüfen.

    Sie können dies auch auf der Übersichtsseite der Datenbank anzeigen:

    Screenshot der Übersicht mit einer Liste der Datenbanken, die für andere freigegeben wurden.

Trennen der Follower-Datenbank

Hinweis

Zum Trennen einer Datenbank auf Follower- oder Leader-Seite benötigen Sie einen Benutzer, eine Gruppe, einen Dienstprinzipal oder eine verwaltete Identität mit mindestens der Rolle „Mitwirkender“ für den Cluster, von dem Sie die Datenbank trennen. Im Beispiel unten wird ein Dienstprinzipal verwendet.

Trennen der angefügten Follower-Datenbank vom Follower-Cluster mit C#**

Vom Follower-Cluster kann jede angefügte Follower-Datenbank wie folgt getrennt werden:

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

Trennen der angefügten Follower-Datenbank vom Leader-Cluster mit C#

Vom Leader-Cluster kann jede angefügte Datenbank wie folgt getrennt werden:

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

Verwalten von Prinzipalen, Berechtigungen und Cacherichtlinie

Verwalten von Prinzipalen

Wenn Sie eine Datenbank anfügen, geben Sie die Standardänderungsart für Prinzipale an. Der Standardeinstellung besteht darin, die autorisierten Überschreibungsprinzipale mit der Leader-Datenbanksammlung von autorisierten Prinzipalen zu kombinieren.

Kind Beschreibung
Union Die angefügten Datenbankprinzipale umfassen immer die ursprünglichen Datenbankprinzipale und weitere neue Prinzipale, die der Follower-Datenbank hinzugefügt werden.
Replace Keine Vererbung von Prinzipalen aus der ursprünglichen Datenbank. Für die angefügte Datenbank müssen neue Prinzipale erstellt werden.
None Die angefügten Datenbankprinzipale umfassen nur die Prinzipale der ursprünglichen Datenbank ohne weitere Prinzipale.

Weitere Informationen zur Verwendung von Verwaltungsbefehlen zum Konfigurieren der autorisierten Prinzipale finden Sie unter Verwaltungsbefehle zum Verwalten eines Followerclusters.

Verwalten von Berechtigungen

Das Verwalten der Berechtigung für schreibgeschützte Datenbanken entspricht der Vorgehensweise bei allen Datenbanktypen. Informationen zum Zuweisen von Berechtigungen finden Sie unter Verwalten von Datenbankberechtigungen im Azure-Portal oder Verwenden von Verwaltungsbefehlen zum Verwalten von Datenbanksicherheitsrollen.

Konfigurieren der Cacherichtlinie

Der Administrator der Follower-Datenbank kann die Cacherichtlinie der angefügten Datenbank oder einer der zugehörigen Tabellen im Hostingcluster ändern. Die Standardeinstellung besteht darin, die Quelldatenbank in der Leaderclusterdatenbank und Zwischenspeicherungsrichtlinien auf Tabellenebene mit den Richtlinien zu kombinieren, die in den Überschreibungsrichtlinien auf Datenbank- und Tabellenebene definiert sind. Sie können beispielsweise über eine 30-Tage-Cacherichtlinie für die Leader-Datenbank zur monatlichen Berichterstellung und eine 3-Tage-Cacherichtlinie für die Follower-Datenbank zum ausschließlichen Abfragen der aktuellen Daten für die Problembehandlung verfügen. Weitere Informationen zur Verwendung von Verwaltungsbefehlen zum Konfigurieren der Zwischenspeicherungsrichtlinie für die Followerdatenbank oder -tabelle finden Sie unter Verwaltungsbefehle zum Verwalten eines Followerclusters.

Hinweise

  • Wenn allen Datenbanken vom Follower-Cluster gefolgt wird und Konflikte zwischen den Datenbanken von Leader-/Follower-Clustern auftreten, werden diese Konflikte wie folgt gelöst:
    • Eine im Follower-Cluster erstellte Datenbank mit dem Namen DB hat Vorrang vor einer Datenbank mit demselben Namen, die im Leader-Cluster erstellt wurde. Daher muss die Datenbank DB im Follower-Cluster entfernt oder umbenannt werden, damit der Follower-Cluster die Datenbank DB des Leaders beinhalten kann.
    • Eine Datenbank mit dem Namen DB, der mindestens zwei Leader-Cluster folgen, wird willkürlich aus einem Leader-Cluster ausgewählt, und ihr wird nicht mehr als einmal gefolgt.
  • Befehle zum Anzeigen der Clusteraktivitätsprotokolle und des Verlaufs, die in einem Follower-Cluster ausgeführt werden, zeigen die Aktivität und den Verlauf für den Follower-Cluster. Ihre Resultsets enthalten nicht die Ergebnisse der Leader-Cluster.
    • Beispiel: Mit einem Befehl vom Typ .show queries, der für den Follower-Cluster ausgeführt wird, werden nur Abfragen angezeigt, die für Datenbanken ausgeführt wurden, denen der Follower-Cluster folgt. Abfragen, die für die gleiche Datenbank im Leader-Cluster ausgeführt wurden, werden nicht angezeigt.

Einschränkungen

  • Die Leader- und Follower-Cluster müssen sich in derselben Region befinden.
  • Wenn die Streamingerfassung für eine als Leader fungierende Datenbank verwendet wird, muss die Streamingerfassung auch für den Follower-Cluster aktiviert sein, um Streamingerfassungsdaten folgen zu können.
  • Das Folgen eines Clusters mit Datenverschlüsselung mit kundenseitig verwalteten Schlüsseln (Customer Managed Keys , CMK) wird mit den folgenden Einschränkungen unterstützt:
    • Weder der Followercluster noch der Leader-Cluster folgen anderen Clustern.
    • Wenn ein Followercluster einem Leadercluster mit aktiviertem CMK folgt und der Zugriff des Leiters auf den Schlüssel widerrufen wird, werden sowohl der Leader- als auch der Followercluster angehalten. In diesem Fall können Sie entweder das CMK-Problem beheben und dann den Followercluster fortsetzen, oder Sie können die Followerdatenbanken vom Followercluster trennen und unabhängig vom Leadercluster fortsetzen.
  • Sie können eine Datenbank, die an einen anderen Cluster angefügt ist, erst nach dem Trennen löschen.
  • Sie können einen Cluster mit einer Datenbank, die an einen anderen Cluster angefügt ist, erst nach dem Trennen löschen.
  • Freigabeeigenschaften auf Tabellenebene werden beim Folgen aller Datenbanken nicht unterstützt.
  • In Followerdatenbanken muss die verwaltete Identität dem Followercluster hinzugefügt werden, um externe Tabellen abzufragen, die eine verwaltete Identität als Authentifizierungsmethode verwenden. Diese Funktion funktioniert nicht, wenn die Leader- und Followercluster in verschiedenen Mandanten bereitgestellt werden.

Nächster Schritt