Utilize a base de dados de seguidores para anexar bases de dados no Azure Data ExplorerUse follower database to attach databases in Azure Data Explorer

A funcionalidade de base de dados de acompanhamento permite-lhe anexar uma base de dados localizada num cluster diferente do seu cluster Azure Data Explorer.The follower database feature allows you to attach a database located in a different cluster to your Azure Data Explorer cluster. A base de dados de seguidores é anexada apenas no modo de leitura, possibilitando visualizar os dados e executar consultas sobre os dados que foram ingeridos na base de dadosdo líder .The follower database is attached in read-only mode, making it possible to view the data and run queries on the data that was ingested into the leader database. A base de dados de seguidores sincroniza as alterações nas bases de dados dos líderes.The follower database synchronizes changes in the leader databases. Devido à sincronização, há um atraso de dados de alguns segundos a alguns minutos na disponibilidade de dados.Due to the synchronization, there's a data lag of a few seconds to a few minutes in data availability. O comprimento do tempo desfasado depende do tamanho total dos metadados da base de dados líder.The length of the time lag depends on the overall size of the leader database metadata. As bases de dados do líder e dos seguidores usam a mesma conta de armazenamento para recolher os dados.The leader and follower databases use the same storage account to fetch the data. O armazenamento é propriedade da base de dados do líder.The storage is owned by the leader database. A base de dados de acompanhamento vê os dados sem precisar de os ingerir.The follower database views the data without needing to ingest it. Uma vez que a base de dados anexa é uma base de dados só de leitura, os dados, tabelas e políticas na base de dados não podem ser modificados, exceto para a política de caching, principais,e permissões.Since the attached database is a read-only database, the data, tables, and policies in the database can't be modified except for caching policy, principals, and permissions. Bases de dados anexas não podem ser eliminadas.Attached databases can't be deleted. Devem ser destacados pelo líder ou seguidor e só assim podem ser apagados.They must be detached by the leader or follower and only then they can be deleted.

A anexação de uma base de dados a um cluster diferente utilizando a capacidade de seguidor é usada como infraestrutura para partilhar dados entre organizações e equipas.Attaching a database to a different cluster using the follower capability is used as the infrastructure to share data between organizations and teams. A funcionalidade é útil para segregar recursos computacional para proteger um ambiente de produção de casos de utilização não produtivo.The feature is useful to segregate compute resources to protect a production environment from non-production use cases. O seguidor também pode ser usado para associar o custo do cluster Azure Data Explorer ao partido que executa consultas sobre os dados.Follower can also be used to associate the cost of Azure Data Explorer cluster to the party that runs queries on the data.

Que bases de dados são seguidas?Which databases are followed?

  • Um cluster pode seguir uma base de dados, várias bases de dados ou todas as bases de dados de um cluster de líderes.A cluster can follow one database, several databases, or all databases of a leader cluster.
  • Um único cluster pode seguir bases de dados de vários clusters de líderes.A single cluster can follow databases from multiple leader clusters.
  • Um cluster pode conter bases de dados de seguidores e bases de dados de líderesA cluster can contain both follower databases and leader databases

Pré-requisitosPrerequisites

  1. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.If you don't have an Azure subscription, create a free account before you begin.
  2. Criar cluster e DB para o líder e seguidor.Create cluster and DB for the leader and follower.
  3. Ingerir dados para liderar a base de dados utilizando um dos vários métodos discutidos na visão geral da ingestão.Ingest data to leader database using one of various methods discussed in ingestion overview.

Anexar uma base de dadosAttach a database

Existem vários métodos que pode usar para anexar uma base de dados.There are various methods you can use to attach a database. Neste artigo, discutimos anexar uma base de dados usando c#, Python ou um modelo de Gestor de Recursos Azure.In this article, we discuss attaching a database using C#, Python or an Azure Resource Manager template. Para anexar uma base de dados, deve ter o utilizador, o grupo, o principal de serviço ou a identidade gerida com pelo menos o papel de contribuinte no cluster líder e no cluster de seguidores.To attach a database, you must have user, group, service principal, or managed identity with at least contributor role on the leader cluster and the follower cluster. Pode adicionar ou remover atribuições de funções utilizando o portal Azure, PowerShell, Azure CLI e ARM.You can add or remove role assignments using Azure Portal, PowerShell, Azure CLI and ARM template. Você pode saber mais sobre o controlo de acesso baseado em funções Azure (Azure RBAC) e as diferentes funções.You can learn more about Azure role-based access control (Azure RBAC) and the different roles.

Anexar uma base de dados usando C #Attach a database using C#

NuGets necessáriosNeeded NuGets

Exemplo de códigoCode Example

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Application ID
var clientSecret = "xxxxxxxxxxxxxx";//Client secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";

var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(serviceCreds){
    SubscriptionId = followerSubscriptionId
};

var followerResourceGroupName = "followerResouceGroup";
var leaderResourceGroup = "leaderResouceGroup";
var leaderClusterName = "leader";
var followerClusterName = "follower";
var attachedDatabaseConfigurationName = "uniqueNameForAttachedDatabaseConfiguration";
var databaseName = "db"; // Can be specific database name or * for all databases
var defaultPrincipalsModificationKind = "Union"; 
var location = "North Central US";

AttachedDatabaseConfiguration attachedDatabaseConfigurationProperties = new AttachedDatabaseConfiguration()
{
    ClusterResourceId = $"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}",
    DatabaseName = databaseName,
    DefaultPrincipalsModificationKind = defaultPrincipalsModificationKind,
    Location = location
};

var attachedDatabaseConfigurations = resourceManagementClient.AttachedDatabaseConfigurations.CreateOrUpdate(followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationName, attachedDatabaseConfigurationProperties);

Anexar uma base de dados usando PythonAttach a database using Python

Módulos NecessáriosNeeded Modules

pip install azure-common
pip install azure-mgmt-kusto

Exemplo de códigoCode Example

from azure.mgmt.kusto import KustoManagementClient
from azure.mgmt.kusto.models import AttachedDatabaseConfiguration
from azure.common.credentials import ServicePrincipalCredentials
import datetime

#Directory (tenant) ID
tenant_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Application ID
client_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Client Secret
client_secret = "xxxxxxxxxxxxxx"
follower_subscription_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
leader_subscription_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
credentials = ServicePrincipalCredentials(
        client_id=client_id,
        secret=client_secret,
        tenant=tenant_id
    )
kusto_management_client = KustoManagementClient(credentials, follower_subscription_id)

follower_resource_group_name = "followerResouceGroup"
leader_resouce_group_name = "leaderResouceGroup"
follower_cluster_name = "follower"
leader_cluster_name = "leader"
attached_database_Configuration_name = "uniqueNameForAttachedDatabaseConfiguration"
database_name  = "db" # Can be specific database name or * for all databases
default_principals_modification_kind  = "Union"
location = "North Central US"
cluster_resource_id = "/subscriptions/" + leader_subscription_id + "/resourceGroups/" + leader_resouce_group_name + "/providers/Microsoft.Kusto/Clusters/" + leader_cluster_name

attached_database_configuration_properties = AttachedDatabaseConfiguration(cluster_resource_id = cluster_resource_id, database_name = database_name, default_principals_modification_kind = default_principals_modification_kind, location = location)

#Returns an instance of LROPoller, see https://docs.microsoft.com/python/api/msrest/msrest.polling.lropoller?view=azure-python
poller = kusto_management_client.attached_database_configurations.create_or_update(follower_resource_group_name, follower_cluster_name, attached_database_Configuration_name, attached_database_configuration_properties)

Anexar uma base de dados usando um modelo de Gestor de Recursos AzureAttach a database using an Azure Resource Manager template

Nesta secção, aprende-se a anexar uma base de dados a um recluso existente utilizando um modelo de Gestor de Recursos Azure.In this section, you learn to attach a database to an existing cluser by using an Azure Resource Manager template.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "followerClusterName": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "Name of the cluster to which the database will be attached."
            }
        },
        "attachedDatabaseConfigurationsName": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "Name of the attached database configurations to create."
            }
        },
        "databaseName": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The name of the database to follow. You can follow all databases by using '*'."
            }
        },
        "leaderClusterResourceId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The resource ID of the leader cluster."
            }
        },
        "defaultPrincipalsModificationKind": {
            "type": "string",
            "defaultValue": "Union",
            "metadata": {
                "description": "The default principal modification kind."
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "Location for all resources."
            }
        }
    },
    "variables": {},
    "resources": [
        {
            "name": "[concat(parameters('followerClusterName'), '/', parameters('attachedDatabaseConfigurationsName'))]",
            "type": "Microsoft.Kusto/clusters/attachedDatabaseConfigurations",
            "apiVersion": "2020-02-15",
            "location": "[parameters('location')]",
            "properties": {
                "databaseName": "[parameters('databaseName')]",
                "clusterResourceId": "[parameters('leaderClusterResourceId')]",
                "defaultPrincipalsModificationKind": "[parameters('defaultPrincipalsModificationKind')]"
            }
        }
    ]
}

Implementar o modeloDeploy the template

Pode implementar o modelo do Gestor de Recursos Azure utilizando o portal Azure ou utilizando a powershell.You can deploy the Azure Resource Manager template by using the Azure portal or using powershell.

implementação do modelo

DefiniçãoSetting DescriçãoDescription
Nome do cluster de seguidoresFollower Cluster Name O nome do agrupamento de seguidores; onde o modelo será implantado.The name of the follower cluster; where the template will be deployed.
Nome das configurações da base de dados anexasAttached Database Configurations Name O nome das configurações da base de dados anexas é objeto.The name of the attached database configurations object. O nome pode ser qualquer cadeia que seja única ao nível do cluster.The name can be any string that is unique at the cluster level.
Nome da Base de DadosDatabase Name O nome da base de dados a ser seguido.The name of the database to be followed. Se quiser seguir todas as bases de dados do líder, use '*'.If you want to follow all the leader's databases, use '*'.
ID de recursos de cluster líderLeader Cluster Resource ID A identificação de recursos do cluster líder.The resource ID of the leader cluster.
Tipo de modificação de principais predefinidosDefault Principals Modification Kind O tipo de modificação principal padrão.The default principal modification kind. Pode Union ser, Replace ou None . .Can be Union, Replace or None. Para obter mais informações sobre o tipo de modificação principal predefinido, consulte o comando principal de controlo do tipo de modificação.For more information about default principal modification kind, see principal modification kind control command.
LocalizaçãoLocation A localização de todos os recursos.The location of all the resources. O líder e o seguidor devem estar no mesmo local.The leader and the follower must be in the same location.

Verifique se a base de dados foi anexada com sucessoVerify that the database was successfully attached

Para verificar se a base de dados foi anexada com sucesso, encontre as bases de dados anexas no portal Azure.To verify that the database was successfully attached, find your attached databases in the Azure portal.

  1. Navegue para o cluster de seguidores e selecione Bases de DadosNavigate to the follower cluster and select Databases

  2. Procure novas bases de dados apenas para leitura na lista de bases de dados.Search for new Read-only databases in the database list.

    Base de dados de seguidores apenas de leitura

Em alternativa:Alternatively:

  1. Navegue para o cluster de líderes e selecione Bases de DadosNavigate to the leader cluster and select Databases

  2. Verifique se as bases de dados relevantes estão marcadas como PARTILHADAS COM OUTROS > SimCheck that the relevant databases are marked as SHARED WITH OTHERS > Yes

    Ler e escrever bases de dados anexas

Desprender a base de dados de seguidores usando C #Detach the follower database using C#

Retire a base de dados de seguidores anexada do cluster de seguidoresDetach the attached follower database from the follower cluster

O cluster de seguidores pode separar qualquer base de dados anexa da seguinte forma:The follower cluster can detach any attached database as follows:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Application ID
var clientSecret = "xxxxxxxxxxxxxx";//Client secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";

var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(serviceCreds){
    SubscriptionId = followerSubscriptionId
};

var followerResourceGroupName = "testrg";
//The cluster and database that are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "uniqueName";

resourceManagementClient.AttachedDatabaseConfigurations.Delete(followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationsName);

Para separar uma base de dados do lado do seguidor, deve ter o utilizador, o grupo, o principal de serviço ou a identidade gerida com, pelo menos, o papel do colaborador no cluster de seguidores.To detach a database from the follower side, you must have user, group, service principal, or managed identity with at least contributor role on the follower cluster. No exemplo acima usamos o principal de serviço.In the example above we use service principal.

Retire a base de dados de seguidores anexada do cluster líderDetach the attached follower database from the leader cluster

O cluster líder pode separar qualquer base de dados anexa da seguinte forma:The leader cluster can detach any attached database as follows:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Application ID
var clientSecret = "xxxxxxxxxxxxxx";//Client secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";

var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(serviceCreds){
    SubscriptionId = leaderSubscriptionId
};

var leaderResourceGroupName = "testrg";
var followerResourceGroupName = "followerResouceGroup";
var leaderClusterName = "leader";
var followerClusterName = "follower";
//The cluster and database that are created as part of the Prerequisites
var followerDatabaseDefinition = new FollowerDatabaseDefinition()
    {
        AttachedDatabaseConfigurationName = "uniqueName",
        ClusterResourceId = $"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}"
    };

resourceManagementClient.Clusters.DetachFollowerDatabases(leaderResourceGroupName, leaderClusterName, followerDatabaseDefinition);

Para separar uma base de dados do lado principal, deve ter o utilizador, o grupo, o principal do serviço ou a identidade gerida com pelo menos o papel de contribuinte no cluster líder.To detach a database from the leader side, you must have user, group, service principal, or managed identity with at least contributor role on the leader cluster. No exemplo acima usamos o principal de serviço.In the example above we use service principal.

Desprender a base de dados de seguidores usando PythonDetach the follower database using Python

Retire a base de dados de seguidores anexada do cluster de seguidoresDetach the attached follower database from the follower cluster

O cluster de seguidores pode separar qualquer base de dados anexa da seguinte forma:The follower cluster can detach any attached database as follows:

from azure.mgmt.kusto import KustoManagementClient
from azure.common.credentials import ServicePrincipalCredentials
import datetime

#Directory (tenant) ID
tenant_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Application ID
client_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Client Secret
client_secret = "xxxxxxxxxxxxxx"
follower_subscription_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
credentials = ServicePrincipalCredentials(
        client_id=client_id,
        secret=client_secret,
        tenant=tenant_id
    )
kusto_management_client = KustoManagementClient(credentials, follower_subscription_id)

follower_resource_group_name = "followerResouceGroup"
follower_cluster_name = "follower"
attached_database_configurationName = "uniqueName"

#Returns an instance of LROPoller, see https://docs.microsoft.com/python/api/msrest/msrest.polling.lropoller?view=azure-python
poller = kusto_management_client.attached_database_configurations.delete(follower_resource_group_name, follower_cluster_name, attached_database_configurationName)

Para separar uma base de dados do lado do seguidor, deve ter o utilizador, o grupo, o principal de serviço ou a identidade gerida com, pelo menos, o papel do colaborador no cluster de seguidores.To detach a database from the follower side, you must have user, group, service principal, or managed identity with at least contributor role on the follower cluster. No exemplo acima usamos o principal de serviço.In the example above we use service principal.

Retire a base de dados de seguidores anexada do cluster líderDetach the attached follower database from the leader cluster

O cluster líder pode separar qualquer base de dados anexa da seguinte forma:The leader cluster can detach any attached database as follows:


from azure.mgmt.kusto import KustoManagementClient
from azure.mgmt.kusto.models import FollowerDatabaseDefinition
from azure.common.credentials import ServicePrincipalCredentials
import datetime

#Directory (tenant) ID
tenant_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Application ID
client_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Client Secret
client_secret = "xxxxxxxxxxxxxx"
follower_subscription_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
leader_subscription_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
credentials = ServicePrincipalCredentials(
        client_id=client_id,
        secret=client_secret,
        tenant=tenant_id
    )
kusto_management_client = KustoManagementClient(credentials, follower_subscription_id)

follower_resource_group_name = "followerResourceGroup"
leader_resource_group_name = "leaderResourceGroup"
follower_cluster_name = "follower"
leader_cluster_name = "leader"
attached_database_configuration_name = "uniqueName"
location = "North Central US"
cluster_resource_id = "/subscriptions/" + follower_subscription_id + "/resourceGroups/" + follower_resource_group_name + "/providers/Microsoft.Kusto/Clusters/" + follower_cluster_name


#Returns an instance of LROPoller, see https://docs.microsoft.com/python/api/msrest/msrest.polling.lropoller?view=azure-python
poller = kusto_management_client.clusters.detach_follower_databases(resource_group_name = leader_resource_group_name, cluster_name = leader_cluster_name, cluster_resource_id = cluster_resource_id, attached_database_configuration_name = attached_database_configuration_name)

Para separar uma base de dados do lado principal, deve ter o utilizador, o grupo, o principal do serviço ou a identidade gerida com pelo menos o papel de contribuinte no cluster líder.To detach a database from the leader side, you must have user, group, service principal, or managed identity with at least contributor role on the leader cluster. No exemplo acima usamos o principal de serviço.In the example above we use service principal.

Gerir os principais, permissões e política de cachingManage principals, permissions, and caching policy

Gerir os principaisManage principals

Ao anexar uma base de dados, especifique o tipo de modificação de "modificação de princípios predefinidos".When attaching a database, specify the "default principals modification kind". O padrão é manter a recolha de bases de dados líder de principais autorizadosThe default is keeping the leader database collection of authorized principals

TipoKind DescriçãoDescription
UniãoUnion Os principais da base de dados anexados incluirão sempre os principais da base de dados originais, bem como novos principais adicionais adicionados à base de dados de seguidores.The attached database principals will always include the original database principals plus additional new principals added to the follower database.
SubstituirReplace Nenhuma herança de princípios da base de dados original.No inheritance of principals from the original database. Devem ser criados novos princípios para a base de dados anexa.New principals must be created for the attached database.
NenhumaNone Os principais da base de dados anexas incluem apenas os principais da base de dados original sem princípios adicionais.The attached database principals include only the principals of the original database with no additional principals.

Para obter mais informações sobre a utilização de comandos de controlo para configurar os principais autorizados, consulte os comandos de Controlo para gerir um cluster de seguidores.For more information about using control commands to configure the authorized principals, see Control commands for managing a follower cluster.

Gerir permissõesManage permissions

Gerir a permissão de base de dados apenas de leitura é o mesmo que para todos os tipos de bases de dados.Managing read-only database permission is the same as for all database types. Consulte permissões de gestão no portal Azure.See manage permissions in the Azure portal.

Política de caching configurarConfigure caching policy

O administrador da base de dados de acompanhamento pode modificar a política de caching da base de dados anexa ou de qualquer uma das suas tabelas no cluster de hospedagem.The follower database administrator can modify the caching policy of the attached database or any of its tables on the hosting cluster. O padrão é manter a recolha de bases de dados líder de bases de dados e políticas de caching ao nível da tabela.The default is keeping the leader database collection of database and table-level caching policies. Pode, por exemplo, ter uma política de caching de 30 dias na base de dados de líderes para a execução de relatórios mensais e uma política de três dias na base de dados de seguidores para consultar apenas os dados recentes para a resolução de problemas.You can, for example, have a 30 day caching policy on the leader database for running monthly reporting and a three day caching policy on the follower database to query only the recent data for troubleshooting. Para obter mais informações sobre a utilização de comandos de controlo para configurar a política de caching na base de dados ou tabela do seguidor, consulte os comandos de Controlo para gerir um cluster de seguidores.For more information about using control commands to configure the caching policy on the follower database or table, see Control commands for managing a follower cluster.

LimitaçõesLimitations

  • O seguidor e os aglomerados líderes devem estar na mesma região.The follower and the leader clusters must be in the same region.
  • A ingestão de streaming não pode ser usada numa base de dados que está a ser seguida.Streaming ingestion can't be used on a database that is being followed.
  • A encriptação de dados utilizando as chaves geridas pelo cliente não é suportada tanto em clusters de líderes como de seguidores.Data encryption using customer managed keys is not supported on both leader and follower clusters.
  • Não é possível eliminar uma base de dados que esteja ligada a um cluster diferente antes de a desvincular.You can't delete a database that is attached to a different cluster before detaching it.
  • Não é possível eliminar um cluster que tenha uma base de dados anexada a um cluster diferente antes de o desconectar.You can't delete a cluster that has a database attached to a different cluster before detaching it.

Próximos passosNext steps