Usare i database di follower

La funzionalità database follower consente di collegare al proprio cluster di Esplora dati di Azure un database che si trova in un cluster diverso. Il database follower è collegato in modalità di sola lettura, consentendo di visualizzare i dati ed eseguire query sui dati inseriti nel database leader. Il database follower sincronizza le modifiche nei database leader. A causa della sincronizzazione, è previsto un ritardo dei dati di alcuni secondi fino a pochi minuti nella disponibilità dei dati. L'intervallo di tempo dipende dalle dimensioni complessive dei metadati del database leader. I database leader e follower usano lo stesso account di archiviazione per recuperare i dati. L'archiviazione è di proprietà del database leader. Il database follower visualizza i dati senza dover inserirli. Poiché il database collegato è un database di sola lettura, i dati, le tabelle e i criteri nel database non possono essere modificati, ad eccezione dei criteri di memorizzazione nella cache, delle entità e delle autorizzazioni. I database collegati non possono essere eliminati. Devono essere scollegati dal leader o dal seguace e solo successivamente possono essere eliminati.

Il collegamento di un database a un cluster diverso tramite la funzionalità follower viene usato come infrastruttura per condividere i dati tra organizzazioni e team. La funzionalità è utile per separare le risorse di calcolo per proteggere un ambiente di produzione da casi d'uso non di produzione. I follower possono anche essere usati per associare il costo del cluster di Azure Esplora dati all'entità che esegue query sui dati.

Per esempi di codice basati sulle versioni precedenti dell'SDK, vedere l'articolo archiviato.

Quali database vengono seguiti?

  • Un cluster può seguire un database, diversi database o tutti i database di un cluster leader.
  • Un singolo cluster può seguire i database di più cluster leader.
  • Un cluster può contenere sia database di follower che database leader.

Prerequisiti

Collegare un database

Esistono diversi metodi che è possibile usare per collegare un database. In questo articolo viene illustrato come collegare un database usando C#, Python, PowerShell o un modello di Azure Resource Manager. Per collegare un database, è necessario avere un utente, un gruppo, un'entità servizio o un'identità gestita con almeno il ruolo collaboratore nel cluster leader e nel cluster follower. Aggiungere o rimuovere assegnazioni di ruolo usando portale di Azure, PowerShell, l'interfaccia della riga di comando di Azure e il modello di Resource Manager. Altre informazioni sul controllo degli accessi in base al ruolo di Azure e sui diversi ruoli.

Nota

La creazione preliminare di un database di follower non è necessaria perché ne viene creata una durante il processo di allegato.

Condivisione a livello di tabella

Quando si collega il database a tutte le tabelle, vengono seguite anche tabelle esterne e viste materializzate. È possibile condividere tabelle,tabelle esterne/viste materializzate specifiche configurando 'TableLevelSharingProperties'.

'TableLevelSharingProperties' contiene otto matrici di stringhe: tablesToInclude, externalTablesToIncludetablesToExclude, externalTablesToExclude, materializedViewsToInclude, materializedViewsToExclude, functionsToInclude, e functionsToExclude. Il numero massimo di voci in tutte le matrici è 100.

Nota

  • La condivisione a livello di tabella non è supportata quando si usa la notazione di tutti i database '*'.
  • Quando vengono incluse viste materializzate, vengono incluse anche le relative tabelle di origine.

Esempi

Nell'esempio seguente sono incluse tutte le tabelle. Per impostazione predefinita, tutte le tabelle vengono seguite senza usare la notazione '*':

tablesToInclude = []

Nell'esempio seguente sono incluse tutte le funzioni. Per impostazione predefinita, tutte le funzioni vengono seguite senza usare la notazione '*':

functionsToInclude = []

L'esempio seguente include tutte le tabelle con nomi che iniziano con "Logs":

tablesToInclude = ["Logs*"]

L'esempio seguente include tutte le tabelle esterne:

externalTablesToExclude = ["*"]

L'esempio seguente include tutte le viste materializzate:

materializedViewsToExclude=["*"]

Override del nome del database

Facoltativamente, è possibile rendere il nome del database nel cluster follower diverso dal cluster leader. Ad esempio, è possibile collegare lo stesso nome di database da più cluster leader a un cluster follower. Per specificare un nome di database diverso, configurare la proprietà 'DatabaseNameOverride' o 'DatabaseNamePrefix'.

Collegare un database usando C#

Pacchetti NuGet necessari

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

Verificare che il database sia stato collegato correttamente

Per verificare che il database sia stato collegato correttamente, trovare i database collegati nel portale di Azure. È possibile verificare che i database siano stati collegati correttamente nei cluster di follower o leader .

Controllare il cluster di follower

  1. Passare al cluster follower e selezionare Database.

  2. Nell'elenco di database cercare nuovi database di sola lettura.

    Screenshot dei database follower di sola lettura nel portale.

    È anche possibile visualizzare questo elenco nella pagina di panoramica del database:

    Screenshot della pagina di panoramica dei database con l'elenco dei cluster di follower.

Controllare il cluster leader

  1. Passare al cluster leader e selezionare Database

  2. Verificare che i database pertinenti siano contrassegnati come SHARED WITH OTHERS>

  3. Attivare o disattivare il collegamento alla relazione per visualizzare i dettagli.

    Screenshot dei database condivisi con altri utenti per controllare il cluster leader.

    È anche possibile visualizzare questo valore nella pagina di panoramica del database:

    Screenshot della panoramica con l'elenco dei database condivisi con altri utenti.

Scollegare il database dei follower

Nota

Per scollegare un database dal lato follower o leader, è necessario disporre di un'identità utente, gruppo, entità servizio o gestita con almeno il ruolo collaboratore nel cluster da cui si sta scollegando il database. Nell'esempio seguente viene usata l'entità servizio.

Scollegare il database di follower collegato dal cluster follower usando C#**

Il cluster follower può scollegare qualsiasi database di follower collegato come segue:

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

Scollegare il database di follower collegato dal cluster leader usando C#

Il cluster leader può scollegare qualsiasi database collegato come segue:

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

Gestire entità, autorizzazioni e criteri di memorizzazione nella cache

Gestire le entità

Quando si collega un database, specificare il tipo di modifica delle entità predefinite. L'impostazione predefinita consiste nel combinare le entità autorizzate di override con la raccolta di database leader di entità autorizzate

Tipologia Descrizione
Union Le entità di database collegate includono sempre le entità di database originali e altre nuove entità aggiunte al database follower.
Sostituzione Nessuna ereditarietà delle entità dal database originale. È necessario creare nuove entità per il database collegato.
Nessuno Le entità di database collegate includono solo le entità del database originale senza altre entità.

Per altre informazioni sull'uso dei comandi di gestione per configurare le entità autorizzate, vedere Comandi di gestione per la gestione di un cluster follower.

Gestisci autorizzazioni

La gestione delle autorizzazioni di database di sola lettura è identica a quella di tutti i tipi di database. Per assegnare le autorizzazioni, vedere Gestire le autorizzazioni del database nel portale di Azure o usare i comandi di gestione per gestire i ruoli di sicurezza del database.

Configurare i criteri di memorizzazione nella cache

L'amministratore del database follower può modificare i criteri di memorizzazione nella cache del database collegato o di una delle relative tabelle nel cluster di hosting. L'impostazione predefinita consiste nel combinare il database di origine nel database del cluster leader e i criteri di memorizzazione nella cache a livello di tabella con i criteri definiti nei criteri di override a livello di database e a livello di tabella. È ad esempio possibile avere un criterio di memorizzazione nella cache di 30 giorni nel database leader per l'esecuzione di report mensili e un criterio di memorizzazione nella cache di tre giorni nel database follower per eseguire una query solo sui dati recenti per la risoluzione dei problemi. Per altre informazioni sull'uso dei comandi di gestione per configurare i criteri di memorizzazione nella cache nel database o nella tabella follower, vedere Comandi di gestione per la gestione di un cluster follower.

Note

  • Se sono presenti conflitti tra i database dei cluster leader/follower, quando tutti i database sono seguiti dal cluster follower, vengono risolti come segue:
    • Un database denominato DB creato nel cluster follower ha la precedenza su un database con lo stesso nome creato nel cluster leader. Ecco perché il database del database nel cluster follower deve essere rimosso o rinominato per il cluster follower per includere il database del leader.
    • Un database denominato DB seguito da due o più cluster leader verrà scelto arbitrariamente da uno dei cluster leader e non verrà seguito più di una volta.
  • I comandi per visualizzare il log attività e la cronologia del cluster eseguiti in un cluster follower mostreranno l'attività e la cronologia nel cluster follower e i relativi set di risultati non includeranno i risultati del cluster leader o dei cluster.
    • Ad esempio, un .show queries comando eseguito nel cluster follower mostrerà solo le query eseguite sui database seguiti dal cluster follower e non le query eseguite sullo stesso database nel cluster leader.

Limiti

  • I follower e i cluster leader devono trovarsi nella stessa area.
  • Se l'inserimento di streaming viene usato in un database seguito, il cluster follower deve essere abilitato per l'inserimento in streaming per consentire l'inserimento in streaming dei dati di inserimento.
  • Dopo un cluster con crittografia dei dati usando chiavi gestite dal cliente (CMK) è supportato con le limitazioni seguenti:
    • Né il cluster follower né il cluster leader seguono altri cluster.
    • Se un cluster di follower segue un cluster leader con cmk abilitato e l'accesso del leader alla chiave viene revocato, verranno sospesi sia il leader che i cluster di follower. In questo caso, è possibile risolvere il problema cmk e quindi riprendere il cluster follower oppure scollegare i database dei follower dal cluster follower e riprendere indipendentemente dal cluster leader.
  • Non è possibile eliminare un database collegato a un cluster diverso prima di scollegarlo.
  • Non è possibile eliminare un cluster con un database collegato a un cluster diverso prima di scollegarlo.
  • Le proprietà di condivisione a livello di tabella non sono supportate quando si seguono tutti i database.
  • Nei database follower, per eseguire query su tabelle esterne che usano un'identità gestita come metodo di autenticazione, è necessario aggiungere l'identità gestita al cluster follower. Questa funzionalità non funziona quando viene effettuato il provisioning dei cluster leader e follower in tenant diversi.

Passaggio successivo