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.
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.
- EngineV3-Cluster können nur EngineV3-Clustern und EngineV2-Cluster nur EngineV2-Clustern folgen.
Voraussetzungen
- Ein Azure-Abonnement. Erstellen Sie ein kostenloses Azure-Konto.
- Ein Azure Data Explorer Cluster und eine Datenbank für den Leader und Follower. Erstellen eines Clusters und einer Datenbank
- Die Leader-Datenbank sollte Daten enthalten. Sie können Daten mithilfe einer der Methoden erfassen, die in der Übersicht über die Erfassung erläutert werden.
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
, externalTablesToInclude
, externalTablesToExclude
, materializedViewsToInclude
, materializedViewsToExclude
functionsToInclude
und 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.
Hinweis
Wenn materialisierte Sichten einbezogen werden, werden auch ihre Quelltabellen einbezogen.
Beispiele
Schließen Sie alle Tabellen ein. „*“ ist nicht erforderlich, da standardmäßig allen Tabellen gefolgt wird:
tablesToInclude = []
Schließen Sie alle Tabellen mit Namen ein, die mit „Logs“ beginnen:
tablesToInclude = ["Logs*"]
Schließen Sie alle externen Tabellen aus:
externalTablesToExclude = ["*"]
Schließen Sie alle materialisierten Sichten aus:
materializedViewsToExclude=["*"]
Außerkraftsetzung des Datenbanknamens
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
- Installieren Sie Microsoft.Azure.Management.kusto.
- Installieren Sie Microsoft.Rest.ClientRuntime.Azure.Authentication für die Authentifizierung.
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 = 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
);
Ü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
Navigieren Sie zum Followercluster, und wählen Sie Datenbanken aus.
Suchen Sie in der Datenbankliste nach neuen schreibgeschützten Datenbanken.
Sie können diese Liste auch auf der Übersichtsseite der Datenbank anzeigen:
Überprüfen des Leader-Clusters
Navigieren Sie zum Leadercluster, und wählen Sie Datenbanken aus.
Überprüfen Sie, ob die relevanten Datenbanken unter FREIGEGEBEN FÜR WEITERE PERSONEN mit Ja gekennzeichnet sind.
Schalten Sie den Beziehungslink um, um Details anzuzeigen.
Sie können dies auch auf der Übersichtsseite der Datenbank anzeigen:
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 = 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
);
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 = 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
);
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 Steuerungsbefehlen zum Konfigurieren der autorisierten Prinzipale finden Sie unter Steuerungsbefehle zum Verwalten eines Follower-Clusters.
Verwalten von Berechtigungen
Das Verwalten der Berechtigung für schreibgeschützte Datenbanken entspricht der Vorgehensweise bei allen Datenbanktypen. Informationen dazu finden Sie unter Verwalten von Berechtigungen im Azure-Portal.
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 Steuerungsbefehlen zum Konfigurieren der Cacherichtlinie für die Follower-Datenbank oder -Tabelle finden Sie unter Steuerungsbefehle zum Verwalten eines Follower-Clusters.
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.
- Beispiel: Mit einem Befehl vom Typ
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.
- Datenverschlüsselung mithilfe von kundenseitig verwalteten Schlüsseln wird in Leader- und Follower-Clustern nicht unterstützt.
- 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.
- Eigenschaften für die Freigabe auf Tabellenebene werden nicht unterstützt, wenn allen Datenbanken gefolgt wird.
Nächste Schritte
- Informationen zur Konfiguration von Follower-Clustern finden Sie unter Steuerungsbefehle zum Verwalten eines Follower-Clusters.