Usare i database follower

La funzionalità di database follower consente di collegare un database che si trova in un cluster diverso al cluster Esplora dati di Azure. 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 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. Lo spazio di archiviazione è di proprietà del database leader. Il database follower visualizza i dati senza doverlo inserire. 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. Non è possibile eliminare i database collegati. Devono essere scollegati dal leader o dai follower 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 Esplora dati di Azure all'entità che esegue query sui dati.

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

Quali database sono 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 follower che database leader.

Prerequisiti

Collegare un database

Esistono vari 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 arm. Altre informazioni sul controllo degli accessi in base al ruolo di Azure e sui diversi ruoli.

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 specifica configurando "TableLevelSharingProperties".

'TableLevelSharingProperties' contiene otto matrici di stringhe: tablesToInclude, tablesToExclude, externalTablesToInclude, externalTablesToExclude, materializedViewsToIncludematerializedViewsToExclude, 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 tabelle di origine.

Esempio

  1. Includere tutte le tabelle. Non è necessario '*', poiché tutte le tabelle sono seguite per impostazione predefinita:

    tablesToInclude = []
    
  2. Includere tutte le tabelle con nomi che iniziano con "Logs":

    tablesToInclude = ["Logs*"]
    
  3. Escludere tutte le tabelle esterne:

    externalTablesToExclude = ["*"]
    
  4. Escludere 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 tramite 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 follower o leader .

Controllare il cluster 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 di cluster 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 di database condivisi con altri utenti.

Scollegare il database dei follower

Nota

Per scollegare un database dal lato follower o leader, è necessario avere un utente, un gruppo, un'entità servizio o un'identità 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 follower collegato dal cluster follower usando C#**

Il cluster follower può scollegare qualsiasi database 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 follower collegato dal cluster leader usando C#

Il cluster leader può scollegare qualsiasi database collegato nel modo seguente:

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 associate includono sempre le entità di database originali e altre nuove entità aggiunte al database follower.
Replace Nessuna ereditarietà delle entità dal database originale. È necessario creare nuove entità per il database collegato.
Nessuna Le entità di database associate 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.

Gestione autorizzazioni

La gestione delle autorizzazioni di database di sola lettura è uguale a quella per 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 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 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 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à del cluster e l'esecuzione della cronologia in un cluster follower mostreranno l'attività e la cronologia nel cluster follower e i relativi set di risultati non includeranno tali risultati del cluster leader o dei cluster.
    • Ad esempio, un .show queries comando eseguito nel cluster follower mostrerà solo le query eseguite nei database seguiti dal cluster follower e non le query vengono eseguite sullo stesso database nel cluster leader.

Limitazioni

  • I follower e i cluster leader devono trovarsi nella stessa area.
  • Se l'inserimento in streaming viene usato in un database seguito, il cluster follower deve essere abilitato per l'inserimento in streaming per consentire di seguire i dati di inserimento in streaming.
  • L'uso di un cluster con crittografia dei dati tramite chiavi gestite dal cliente (CMK) è supportato con le limitazioni seguenti:
    • Né il cluster follower né il cluster leader seguono altri cluster.
    • Se un cluster follower segue un cluster leader con CMK abilitato e l'accesso del leader alla chiave viene revocato, i cluster leader e follower verranno sospesi. In questo caso, è possibile risolvere il problema di 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