Usar bancos de dados seguidores

O recurso de banco de dados seguidor permite anexar um banco de dados localizado em outro cluster ao cluster do Azure Data Explorer. O banco de dados seguidor é anexado no modo somente leitura, possibilitando exibir os dados e executar consultas sobre os dados que foram ingeridos no banco de dados líder. O banco de dados seguidor sincroniza as alterações nos bancos de dados líderes. Devido à sincronização, há um atraso de dados de alguns segundos a alguns minutos na disponibilidade dos dados. O tamanho do atraso depende do tamanho geral dos metadados do banco de dados líder. Os bancos de dados líder e seguidor usam a mesma conta de armazenamento para buscar os dados. O armazenamento pertence ao banco de dados líder. O banco de dados seguidor visualiza os dados sem precisar ingeri-los. Como o banco de dados anexado é um banco de dados somente leitura, os dados, as tabelas e as políticas do banco de dados não podem ser modificados, exceto a política de cache, as entidades de segurança e as permissões. Bancos de dados anexados não podem ser excluídos. Eles devem ser desanexados pelo líder ou pelo seguidor e, somente depois disso, podem ser excluídos.

Anexar um banco de dados a um cluster diferente empregando a funcionalidade de seguidor é usado como a infraestrutura para compartilhar dados entre as organizações e as equipes. O recurso é útil para separar recursos de computação a fim de proteger um ambiente de produção contra casos de uso que não são de produção. O seguidor também pode ser usado para associar o custo do cluster do Azure Data Explorer à parte que executa consultas sobre os dados.

Para obter exemplos de código com base em versões anteriores do SDK, consulte o artigo arquivado.

Quais bancos de dados são seguidos?

  • Um cluster pode seguir um banco de dados, vários bancos de dados ou todos os bancos de dados de um cluster líder.
  • Apenas um cluster pode seguir bancos de dados de vários clusters líderes.
  • Um cluster pode conter bancos de dados seguidores e líderes.

Pré-requisitos

Anexar um banco de dados

Há vários métodos que você pode usar para anexar um banco de dados. Neste artigo, discutiremos a anexação de um banco de dados usando C#, Python, PowerShell ou um modelo do Azure Resource Manager. Para anexar um banco de dados, você deve ter identidade de usuário, grupo, entidade de serviço ou identidade gerenciada com pelo menos função de colaborador sobre o cluster líder e o cluster seguidor. Adicione ou remova atribuições de função usando o portal do Azure, o PowerShell, a CLI do Azure e o modelo do ARM. Saiba mais sobre o RBAC do Azure (controle de acesso baseado em função do Azure) e as diferentes funções disponíveis.

Compartilhamento no nível da tabela

Ao anexar o banco de dados a todas as tabelas, as tabelas externas e as exibições materializadas também são seguidas. Você pode compartilhar tabelas específicas/tabelas externas/exibições materializadas configurando a propriedade 'TableLevelSharingProperties'.

'TableLevelSharingProperties' contém oito matrizes de cadeias de caracteres: tablesToInclude, tablesToExclude, externalTablesToInclude, , externalTablesToExclude, materializedViewsToInclude, materializedViewsToExclude, functionsToIncludee functionsToExclude. O número máximo de entradas em todas as matrizes juntas é 100.

Observação

  • O compartilhamento de nível de tabela não tem suporte ao usar a seguinte notação: '*' todos os bancos de dados.
  • Quando as exibições materializadas são incluídas, suas tabelas de origem também são incluídas.

Exemplos

  1. Inclui todas as tabelas. Não é necessário usar '*', pois todas as tabelas são seguidas por padrão:

    tablesToInclude = []
    
  2. Inclui todas as tabelas com nomes que começam com "Logs":

    tablesToInclude = ["Logs*"]
    
  3. Exclui todas as tabelas externas:

    externalTablesToExclude = ["*"]
    
  4. Exclui todas as exibições materializadas:

    materializedViewsToExclude=["*"]
    

Substituição de nome de banco de dados

Opcionalmente, você pode tornar o nome do banco de dados no cluster de seguidor diferente do cluster líder. Por exemplo, talvez você queira anexar o mesmo nome de banco de dados de vários clusters líderes a um cluster de seguidor. Para especificar um nome de banco de dados diferente, configure a propriedade 'DatabaseNameOverride' ou 'DatabaseNamePrefix'.

Anexar um banco de dados usando C#

Pacotes NuGet necessários

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

Verificar se o banco de dados foi anexado com sucesso

Para verificar se o banco de dados foi anexado com sucesso, encontre seus bancos de dados anexados no portal do Azure. Você pode verificar se os bancos de dados foram anexados com sucesso nos clusters seguidor ou líder.

Verifique seu cluster seguidor

  1. Navegue até o cluster de seguidor e selecione Bancos de dados.

  2. Na lista de banco de dados, pesquise novos bancos de dados somente leitura.

    Captura de tela dos bancos de dados de seguidor somente leitura no portal.

    Você também pode exibir essa lista na página de visão geral do banco de dados:

    Captura de tela da página de visão geral de bancos de dados com a lista de clusters de seguidor.

Verificar o cluster do seu líder

  1. Navegue até o cluster líder e selecione Bancos de Dados

  2. Verifique se os bancos de dados relevantes estão marcados como COMPARTILHADO COM OS OUTROSSim

  3. Alterne o link de relação para exibir detalhes.

    Captura de tela de bancos de dados compartilhados com outras pessoas para marcar cluster líder.

    Você também pode exibir isso na página de visão geral do banco de dados:

    Captura de tela da visão geral com a lista de bancos de dados compartilhados com outras pessoas.

Desanexar o banco de dados seguidor

Observação

Para desanexar um banco de dados do lado do seguidor ou do líder, você deve ter identidade de usuário, grupo, entidade de serviço ou identidade gerenciada com pelo menos função de colaborador sobre o cluster do qual você está desanexando o banco de dados. No exemplo a seguir, usamos a entidade de serviço.

Desanexar o banco de dados seguidor anexado do cluster seguidor usando C#**

O cluster seguidor pode desanexar qualquer banco de dados seguidor anexado da seguinte maneira:

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

Desanexar o banco de dados seguidor anexado do cluster líder usando C#

O cluster líder pode desanexar qualquer banco de dados anexado da seguinte maneira:

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

Gerenciar entidades de segurança, permissões e política de cache

Gerenciar entidades de segurança

Ao anexar um banco de dados, especifique o "tipo de modificação padrão das entidades de segurança" . O padrão é combinar as entidades de segurança autorizadas de substituição com a coleção do banco de dados líder de entidades de segurança autorizadas

Tipo Descrição
Union As entidades de segurança do banco de dados anexado sempre incluirão as entidades de segurança do banco de dados original, além de outras novas entidades de segurança adicionadas ao banco de dados seguidor.
Substituir Nenhuma herança das entidades de segurança do banco de dados original. Novas entidades de segurança devem ser criadas para o banco de dados anexado.
Nenhuma As entidades de segurança do banco de dados anexado incluem apenas as entidades de segurança do banco de dados original, sem nenhuma outra.

Para obter mais informações sobre como usar comandos de gerenciamento para configurar as entidades de segurança autorizadas, consulte Comandos de gerenciamento para gerenciar um cluster de seguidor.

Gerenciar permissões

O gerenciamento da permissão de banco de dados somente leitura é o mesmo que para todos os tipos de banco de dados. Para atribuir permissões, consulte Gerenciar permissões de banco de dados no portal do Azure ou usar comandos de gerenciamento para Gerenciar funções de segurança de banco de dados.

Configurar política de cache

O administrador de banco de dados seguidor pode modificar a política de cache do banco de dados anexado ou qualquer uma das tabelas dele no cluster de hospedagem. O padrão é combinar o banco de dados de origem no banco de dados do cluster líder e as políticas de cache no nível da tabela com as políticas definidas nas políticas de substituição de nível de tabela e de banco de dados. Você pode, por exemplo, ter uma política de cache de 30 dias no banco de dados líder para executar relatórios mensais e uma política de cache de três dias no banco de dados seguidor a fim de consultar somente os dados recentes para solucionar problemas. Para obter mais informações sobre como usar comandos de gerenciamento para configurar a política de cache no banco de dados ou tabela do seguidor, consulte Comandos de gerenciamento para gerenciar um cluster de seguidor.

Observações

  • Se houver conflitos entre bancos de dados de clusters líderes/seguidores, quando todos os bancos de dados forem seguidos pelo cluster seguidor, esses conflitos serão resolvidos da seguinte maneira:
    • Um banco de dados chamado DB, criado no cluster seguidor, tem precedência sobre um banco de dados com o mesmo nome que foi criado no cluster líder. É por isso que o banco de dados DB no cluster seguidor precisa ser removido ou renomeado para o cluster seguidor incluir o banco de dados DB do líder.
    • Um banco de dados chamado DB, seguido de dois ou mais clusters líderes, será escolhido arbitrariamente de um dos clusters líderes e não será seguido mais de uma vez.
  • Os comandos para mostrar o log de atividades e o histórico do cluster executados em um cluster seguidor mostrarão as atividades e o histórico no cluster seguidor, e seus conjuntos de resultados não incluirão os resultados do(s) cluster(s) líder(es).
    • Por exemplo: um comando .show queries executado no cluster seguidor só vai mostrar consultas executadas em bancos de dados seguidos pelo cluster seguidor, e não as consultas executadas no mesmo banco de dados no cluster líder.

Limitações

  • Os clusters seguidor e líder devem estar na mesma região.
  • Se a ingestão de streaming for usada em um banco de dados que está sendo seguido, o cluster de seguidores deverá ser habilitado para Ingestão de Streaming para permitir o acompanhamento dos dados de ingestão de streaming.
  • Há suporte para seguir um cluster com criptografia de dados usando CMK (chaves gerenciadas pelo cliente ) com as seguintes limitações:
    • Nem o cluster de seguidor nem o cluster líder estão seguindo outros clusters.
    • Se um cluster seguidor estiver seguindo um cluster líder com o CMK habilitado e o acesso do líder à chave for revogado, os clusters líder e seguidor serão suspensos. Nessa situação, você pode resolve o problema do CMK e, em seguida, retomar o cluster de seguidor ou desanexar os bancos de dados de seguidor do cluster seguidor e retomar independentemente do cluster líder.
  • Você não pode excluir um banco de dados que está anexado a outro cluster antes de desanexá-lo.
  • Você não pode excluir um cluster que tem um banco de dados anexado a outro cluster antes de desanexá-lo.
  • Não há suporte para propriedades de compartilhamento no nível da tabela ao seguir todos os bancos de dados.
  • Em bancos de dados de seguidor, para consultar tabelas externas que usam uma Identidade Gerenciada como o método de autenticação, a Identidade Gerenciada deve ser adicionada ao cluster de seguidor. Essa funcionalidade não funciona quando os clusters líder e seguidor são provisionados em locatários diferentes.

Próxima etapa