Compartilhar via


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.

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.
  • Os clusters EngineV3 só podem seguir clusters EngineV3; da mesma forma, clusters EngineV2 só podem seguir clusters V2.

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, , externalTablesToExcludematerializedViewsToInclude, 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.

Observação

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 do banco de dados

Opcionalmente, você pode tornar o nome do banco de dados no cluster 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 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 = 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
);

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

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

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 controle para configurar as entidades de segurança autorizadas, confira Comandos de controle para gerenciar um cluster 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. Confira Gerenciar permissões no portal do Azure.

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 controle a fim de configurar a política de cache no banco de dados seguidor ou em uma tabela dele, confira Comandos de controle para gerenciar um cluster 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.
  • Não há suporte para a criptografia de dados usando chaves gerenciadas pelo cliente nos clusters líder e seguidor.
  • 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 as propriedades de compartilhamento no nível da tabela quando todos os bancos de dados são seguidos.

Próximas etapas