Sdílet prostřednictvím


Použití databází sledujících

Funkce databáze followerů umožňuje připojit databázi umístěnou v jiném clusteru ke clusteru Azure Data Explorer. Databáze sledujících je připojena v režimu jen pro čtení, což umožňuje zobrazit data a spouštět dotazy na data, která byla ingestovaná do vodicí databáze. Databáze sledujících synchronizuje změny v vodicích databázích. Kvůli synchronizaci dochází k prodlevě dat od několika sekund do několika minut v dostupnosti dat. Délka časové prodlevy závisí na celkové velikosti metadat databáze leader. Databáze leaderů a sledujících používají k načtení dat stejný účet úložiště. Vlastníkem úložiště je databáze leader. Databáze sledující data zobrazí, aniž by je bylo nutné ingestovat. Vzhledem k tomu, že připojená databáze je databáze jen pro čtení, data, tabulky a zásady v databázi se nedají 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 odpojeny vedoucím nebo sledující a teprve potom mohou být odstraněny.

Připojení databáze k jinému clusteru pomocí funkce follower se používá jako infrastruktura pro 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í. Sledování je také možné použít k přidružení nákladů na cluster Azure Data Explorer straně, která spouští dotazy na data.

Které databáze se používají?

  • 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 vedoucích clusterů.
  • Cluster může obsahovat databáze sledujících i vedoucí databáze.
  • Clustery se strojem v3 můžou sledovat pouze clustery se strojem v3 a podobně clustery se strojem v2 můžou sledovat pouze clustery se strojem v2.

Požadavky

Připojení databáze

Existují různé metody, které můžete použít k připojení databáze. V tomto článku probereme připojení databáze pomocí C#, Pythonu, PowerShellu nebo šablony Azure Resource Manager. Pokud chcete připojit databázi, musíte mít identitu uživatele, skupiny, instančního objektu nebo spravované identity s alespoň rolí přispěvatele ve vedoucím clusteru a clusteru sledujících. Přidání nebo odebrání přiřazení rolí pomocí 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.

Sdílení na úrovni tabulky

Při připojování databáze se dodržují také všechny tabulky, externí tabulky a materializovaná zobrazení. Můžete sdílet konkrétní tabulky, externí tabulky nebo materializovaná zobrazení konfigurací TableLevelSharingProperties.

TableLevelSharingProperties obsahuje osm polí řetězců: tablesToInclude, tablesToExclude, externalTablesToInclude, externalTablesToExclude, materializedViewsToInclude, , materializedViewsToExclude, , functionsToIncludea functionsToExclude. Maximální počet položek ve všech polích dohromady je 100.

Poznámka

Sdílení na úrovni tabulky není podporováno při použití notace "*" všech databází.

Poznámka

Při zahrnutí materializovaných zobrazení jsou zahrnuté i jejich zdrojové tabulky.

Příklady

  1. Zahrnout všechny tabulky. Není potřeba žádný znak *, protože všechny tabulky jsou ve výchozím nastavení následovány:

    tablesToInclude = []
    
  2. Zahrňte všechny tabulky s názvy, které začínají na "Logs":

    tablesToInclude = ["Logs*"]
    
  3. Vyloučit všechny externí tabulky:

    externalTablesToExclude = ["*"]
    
  4. Vyloučit všechna materializovaná zobrazení:

    materializedViewsToExclude=["*"]
    

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

Volitelně můžete nastavit, aby se název databáze v clusteru sledujících lišit od vedoucího clusteru. Můžete například chtít připojit stejný název databáze z několika vedoucích clusterů 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 = 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
);

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

Pokud chcete ověřit úspěšné připojení databáze, vyhledejte připojené databáze v Azure Portal. Můžete ověřit, že databáze byly úspěšně připojeny v clusteru sledujících nebo vedoucích clusterů.

Kontrola clusteru followerů

  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 přehledu databází se seznamem clusterů sledujících

Kontrola vedoucího clusteru

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

  2. Zkontrolujte, jestli jsou příslušné databáze označené jako SDÍLENÉ S OSTATNÍMI.>Ano.

  3. Přepnutím odkazu na relaci zobrazíte podrobnosti.

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

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

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

Odpojení databáze followerů

Poznámka

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

Odpojení připojené databáze sledujích od clusteru sledování pomocí C#**

Cluster followerů může libovolnou připojenou databázi sledování odpojit 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 = 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
);

Odpojení připojené databáze sledujících od vedoucího clusteru pomocí jazyka C #

Vedoucí cluster může libovolnou připojenou databázi odpojit 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 = 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
);

Správa objektů zabezpečení, oprávnění a zásad 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í". Ve výchozím nastavení se zkombinují přepsání autorizovaných objektů zabezpečení s kolekcí autorizovaných objektů zabezpečení vedoucí databáze.

Druh Popis
Unie Připojené objekty zabezpečení databáze budou vždy obsahovat původní objekty databáze a další nové objekty zabezpečení přidané do databáze sledujících.
Nahrazení Žádná dědičnost objektů zabezpečení z původní databáze. Pro připojenou databázi se musí vytvořit nové objekty zabezpečení.
Žádný 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í řídicích příkazů ke konfiguraci autorizovaných objektů zabezpečení najdete v tématu Řídicí příkazy pro správu clusteru sledujících.

Správa oprávnění

Správa oprávnění databáze jen pro čtení je stejná jako u všech typů databází. Viz správa oprávnění v Azure Portal.

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

Správce databáze, který následuje, může upravit zásady ukládání do mezipaměti připojené databáze nebo kterékoli z jejích tabulek v hostitelském clusteru. Ve výchozím nastavení se zdrojová databáze v databázi vedoucího clusteru a zásady ukládání do mezipaměti na úrovni tabulky zkombinují 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 pro databázi leader pro spouštění měsíčních sestav a třídenní zásadu ukládání do mezipaměti pro databázi sledujících, aby se při řešení potíží dotazovaly pouze na poslední data. Další informace o použití řídicích příkazů ke konfiguraci zásad ukládání do mezipaměti v databázi nebo tabulce sledování najdete v tématu Řídicí příkazy pro správu clusteru sledující.

Poznámky

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

Omezení

  • Sledující a vedoucí clustery musí být ve stejné oblasti.
  • Pokud se u databáze, kterou sledujete, používá ingestování streamování , měl by být v clusteru sledující povolený příjem streamů, aby bylo možné sledovat streamovaná data příjmu dat.
  • Šifrování dat pomocí klíčů spravovaných zákazníkem se nepodporuje v clusterech vedoucích i sledujících.
  • Databázi, která je připojená k jinému clusteru, nemůžete před odpojením odstranit.
  • Před odpojením clusteru, který má databázi připojenou k jinému clusteru, není možné odstranit.
  • Vlastnosti sdílení na úrovni tabulky nejsou podporovány při sledování všech databází.

Další kroky