Sdílet prostřednictvím


Použití následných databází

Funkce následných databází umožňuje připojit k clusteru Azure Data Exploreru databázi umístěnou v jiném clusteru. Následující databáze je připojena v režimu jen pro čtení, takže je možné zobrazit data a spouštět dotazy na data, která byla ingestována do databáze vedoucí databáze. Následující databáze synchronizuje změny v databázích vedoucího serveru. Kvůli synchronizaci dochází k prodlevě dat o několika sekundách až o několik minut v dostupnosti dat. Délka časové prodlevy závisí na celkové velikosti metadat databáze vedoucího serveru. Databáze vedoucího a následníka používají k načtení dat stejný účet úložiště. Úložiště vlastní databáze vedoucího serveru. Sledující databáze zobrazí data, aniž by je potřebovala ingestovat. Vzhledem k tomu, že připojená databáze je databáze určená jen pro čtení, data, tabulky a zásady v databázi nelze upravovat s výjimkou zásad ukládání do mezipaměti, objektů zabezpečení a oprávnění. Připojené databáze nelze odstranit. Musí být odpojeni vedoucím nebo následníky a teprve potom je možné je odstranit.

Připojení databáze k jinému clusteru pomocí následující funkce se používá jako infrastruktura ke sdílení dat mezi organizacemi a týmy. Tato funkce je užitečná k oddělení výpočetních prostředků za účelem ochrany produkčního prostředí před neprodukčními případy použití. Následníci je také možné použít k přidružení nákladů na cluster Azure Data Exploreru ke straně, která spouští dotazy na data.

Ukázky kódu založené na předchozích verzích sady SDK najdete v archivovaného článku.

Které databáze se následují?

  • Cluster může sledovat jednu databázi, několik databází nebo všechny databáze vedoucího clusteru.
  • Jeden cluster může sledovat databáze z několika clusterů leaderů.
  • Cluster může obsahovat databáze sledujících i vedoucí databáze.

Požadavky

Připojení databáze

K připojení databáze můžete použít různé metody. V tomto článku probereme připojení databáze pomocí C#, Pythonu, PowerShellu nebo šablony Azure Resource Manageru. Pokud chcete připojit databázi, musíte mít uživatele, skupinu, instanční objekt nebo spravovanou identitu s alespoň rolí přispěvatele v clusteru vedoucího serveru a clusteru sledujících. Přidání nebo odebrání přiřazení rolí pomocí webu Azure Portal, PowerShellu, Azure CLI a šablony ARM Přečtěte si další informace o řízení přístupu na základě role v Azure (Azure RBAC) a různých rolích.

Poznámka:

Před vytvořením následující databáze není potřeba, protože se vytvoří během procesu přílohy.

Sdílení na úrovni tabulky

Při připojování databáze jsou také sledovány externí tabulky a materializovaná zobrazení. Konkrétní tabulky, externí tabulky nebo materializovaná zobrazení můžete sdílet konfigurací TableLevelSharingProperties.

TableLevelSharingProperties obsahuje osm polí řetězců: tablesToInclude, , tablesToExclude, externalTablesToExcludeexternalTablesToInclude, materializedViewsToInclude, , materializedViewsToExcludea functionsToIncludefunctionsToExclude. Maximální počet položek ve všech polích je 100.

Poznámka:

  • Sdílení na úrovni tabulky není podporováno při použití zápisu *všech databází.
  • Při zahrnutí materializovaných zobrazení jsou zahrnuté i jejich zdrojové tabulky.

Příklady

Následující příklad obsahuje všechny tabulky. Ve výchozím nastavení se za všemi tabulkami postupuje bez použití notace *:

tablesToInclude = []

Následující příklad obsahuje všechny funkce. Ve výchozím nastavení následují všechny funkce bez použití notace *:

functionsToInclude = []

Následující příklad obsahuje všechny tabulky s názvy, které začínají na "Logs":

tablesToInclude = ["Logs*"]

Následující příklad obsahuje všechny externí tabulky:

externalTablesToExclude = ["*"]

Následující příklad obsahuje všechna materializovaná zobrazení:

materializedViewsToExclude=["*"]

Přepsání názvu databáze

Volitelně můžete nastavit název databáze v clusteru sledujících, který se liší od vedoucího clusteru. Můžete například chtít připojit stejný název databáze z několika clusterů leaderů ke clusteru sledujících. Pokud chcete zadat jiný název databáze, nakonfigurujte vlastnost DatabaseNameOverride nebo DatabaseNamePrefix.

Připojení databáze pomocí jazyka C#

Požadované balíčky NuGet

Příklad jazyka C#

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

Ověření úspěšného připojení databáze

Pokud chcete ověřit, že se databáze úspěšně připojila, najděte připojené databáze na webu Azure Portal. Můžete ověřit, že databáze byly úspěšně připojeny buď v následných clusterech , nebo v clusterech vedoucích serverů.

Kontrola clusteru pro sledování

  1. Přejděte do clusteru sledujících a vyberte Databáze.

  2. V seznamu databází vyhledejte nové databáze jen pro čtení.

    Snímek obrazovky s databázemi sledujících jen pro čtení na portálu

    Tento seznam můžete zobrazit také na stránce přehledu databáze:

    Snímek obrazovky se stránkou s přehledem databází se seznamem následných clusterů

Kontrola clusteru vedoucího serveru

  1. Přejděte do clusteru vedoucího serveru a vyberte Databáze.

  2. Zkontrolujte, jestli jsou příslušné databáze označené jako sdílené s ostatními>ano.

  3. Přepněte odkaz na relaci a zobrazte podrobnosti.

    Snímek obrazovky s databázemi sdílenými s ostatními za účelem kontroly clusteru vedoucího serveru

    Můžete si to také prohlédnout na stránce přehledu databáze:

    Snímek obrazovky s přehledem se seznamem databází sdílených s ostatními

Odpojení následných databází

Poznámka:

Pokud chcete odpojit databázi od sledujícího nebo vedoucího serveru, musíte mít uživatele, skupinu, instanční objekt nebo spravovanou identitu s alespoň rolí přispěvatele v clusteru, ze kterého databázi odpojili. V následujícím příkladu používáme instanční objekt.

Odpojte připojenou následnou databázi z clusteru pro sledování pomocí jazyka C#**

Cluster followerů může odpojit jakoukoli připojenou následnou databázi následujícím způsobem:

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

Odpojte připojenou následnou databázi od clusteru vedoucího serveru pomocí jazyka C.#

Vedoucí cluster může odpojit jakoukoli připojenou databázi následujícím způsobem:

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

Správa zásad zabezpečení, oprávnění a ukládání do mezipaměti

Správa objektů zabezpečení

Při připojování databáze zadejte "výchozí druh úpravy objektů zabezpečení". Výchozí možností je kombinovat autorizované objekty zabezpečení přepsání s kolekcí databáze leader autorizovaných objektů zabezpečení.

Kind Popis
Svaz Připojené objekty zabezpečení databáze budou vždy zahrnovat původní objekty zabezpečení databáze a další nové objekty zabezpečení přidané do následující databáze.
Nahradit Žádná dědičnost objektů zabezpečení z původní databáze. Pro připojenou databázi je nutné vytvořit nové objekty zabezpečení.
Nic Připojené objekty zabezpečení databáze zahrnují pouze objekty zabezpečení původní databáze bez dalších objektů zabezpečení.

Další informace o použití příkazů pro správu ke konfiguraci autorizovaných objektů zabezpečení naleznete v tématu Příkazy pro správu pro správu následný cluster.

Spravovat oprávnění

Správa oprávnění databáze jen pro čtení je stejná jako u všech typů databází. Pokud chcete přiřadit oprávnění, přečtěte si téma Správa oprávnění k databázi na webu Azure Portal nebo použití příkazů pro správu ke správě rolí zabezpečení databáze.

Konfigurace zásad ukládání do mezipaměti

Správce následných databází může upravit zásady ukládání do mezipaměti připojené databáze nebo některé z jejích tabulek v hostitelském clusteru. Výchozí možností je kombinovat zdrojovou databázi v databázi vedoucího clusteru a zásady ukládání do mezipaměti na úrovni tabulky se zásadami definovanými v zásadách přepsání na úrovni databáze a tabulky. Můžete mít například 30denní zásadu ukládání do mezipaměti v databázi vedoucího serveru pro spouštění měsíčních sestav a zásady ukládání do mezipaměti v následující databázi za účelem dotazování pouze na nedávná data pro účely řešení potíží. Další informace o použití příkazů pro správu ke konfiguraci zásad ukládání do mezipaměti v následující databázi nebo tabulce naleznete v tématu Příkazy pro správu pro správu následných clusterů.

Notes

  • Pokud dojde ke konfliktům mezi databázemi clusterů leader/followerů, jsou-li za všemi databázemi následovat následující clustery, budou vyřešeny následujícím způsobem:
    • Databáze s názvem DATABÁZE vytvořená v clusteru sledujících má přednost před databází se stejným názvem, který byl vytvořen v clusteru vedoucího serveru. Proto je potřeba databázi databáze v následujícím clusteru odebrat nebo přejmenovat, aby následující cluster zahrnoval databázi vedoucí databáze.
    • Databáze s názvem DB , po které následují dva nebo více hlavních clusterů, bude libovolně vybrána z jednoho z hlavních clusterů a nebude následovat více než jednou.
  • Příkazy pro zobrazení protokolu aktivit clusteru a historie spuštěné v clusteru sledujících zobrazí aktivitu a historii v clusteru sledujících a jejich sady výsledků nebudou zahrnovat tyto výsledky vedoucího clusteru nebo clusterů.
    • Příklad: Příkaz spuštěný .show queries v následujícím clusteru zobrazí pouze dotazy spuštěné v databázích následovaných následným clusterem a ne dotazy spuštěné ve stejné databázi v clusteru leader.

Omezení

  • Sledující a vedoucí clustery musí být ve stejné oblasti.
  • Pokud se příjem streamu používá v sledované databázi, měl by být pro příjem streamovaných dat povolený následující cluster pro příjem dat streamování.
  • Sledování clusteru s šifrováním dat pomocí klíčů spravovaných zákazníkem (CMK) se podporuje s následujícími omezeními:
    • Cluster sledujících ani cluster vedoucího serveru nesleduje jiné clustery.
    • Pokud se sledující cluster sleduje vedoucí cluster s povoleným klíčem CMK a přístup vedoucího uživatele ke klíči bude odvolán, vedoucí i následníci se pozastaví. V takovém případě můžete problém s CMK vyřešit a pak pokračovat v následném clusteru, nebo můžete odpojit databáze sledujících z clusteru sledujících a pokračovat nezávisle na clusteru vedoucího clusteru.
  • Před odpojením nemůžete odstranit databázi, která je připojená k jinému clusteru.
  • Před odpojením clusteru nemůžete odstranit cluster, který má databázi připojenou k jinému clusteru.
  • Při sledování všech databází nejsou podporovány vlastnosti sdílení na úrovni tabulky.
  • Pokud chcete v následných databázích dotazovat externí tabulky, které jako metodu ověřování používají spravovanou identitu, musí být spravovaná identita přidána do clusteru sledujících. Tato funkce nefunguje, když jsou clustery vedoucího a následníka zřízené v různých tenantech.

Další krok