Usar bancos de dados de 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 exemplos de código baseados 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
- Uma assinatura do Azure. Criar uma conta gratuita do Azure.
- Um cluster do Azure Data Explorer e um banco de dados para o líder e o seguidor. Criar um cluster e um banco de dados.
- O banco de dados líder deve conter dados. Você pode ingerir dados usando um dos métodos discutidos na visão geral da ingestão.
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.
Observação
A criação prévia de um banco de dados seguidor não é necessária, pois uma é criada durante o processo para anexar.
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'.
A propriedade 'TableLevelSharingProperties' contém oito matrizes de cadeias de caracteres: tablesToInclude
, tablesToExclude
, externalTablesToInclude
, externalTablesToExclude
, materializedViewsToInclude
, materializedViewsToExclude
, functionsToInclude
e 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
O exemplo a seguir inclui todas as tabelas. Por padrão, todas as tabelas são seguidas sem usar a notação "*":
tablesToInclude = []
O exemplo a seguir inclui todas as funções. Por padrão, todas as funções são seguidas sem usar a notação "*":
functionsToInclude = []
O exemplo a seguir inclui todas as tabelas com nomes que começam com "Logs":
tablesToInclude = ["Logs*"]
O exemplo a seguir inclui todas as tabelas externas:
externalTablesToExclude = ["*"]
O exemplo a seguir inclui 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 seguidor diferente do cluster líder. Por exemplo, você pode 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
- Instale o Azure.ResourceManager.Kusto.
- Instale o Azure.Identity para autenticação.
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
Navegue até o cluster seguidor e selecione Bancos de dados.
Na lista de banco de dados, pesquise novos bancos de dados somente leitura.
Você também pode exibir essa lista na página de visão geral do banco de dados:
Verificar o cluster do seu líder
Navegue até o cluster líder e selecione Bancos de dados
Verifique se os bancos de dados relevantes estão marcados como COMPARTILHADO COM OS OUTROS>Sim
Ative o link de relação para exibir detalhes.
Você também pode exibir isso na página de visão geral do banco de dados:
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
Kind | 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. |
Replace | 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, confira Comandos de gerenciamento 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. 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 a fim de configurar a política de cache no banco de dados seguidor ou em uma tabela dele, confira Comandos de gerenciamento 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.
- Por exemplo: um comando
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:
- O cluster seguidor e o cluster líder não podem estar 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 resolver o problema do CMK e, em seguida, retomar o cluster seguidor ou desanexar os bancos de dados seguidores 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 quando todos os bancos de dados são seguidos.
- Em bancos de dados seguidores, para consultar tabelas externas que usam uma Identidade gerenciada como o método de autenticação, a Identidade gerenciada deve ser adicionada ao cluster seguidor. Essa funcionalidade não funciona quando os clusters líder e seguidor são provisionados em locatários diferentes.