Compartir a través de


Uso de base de datos de seguidores

La característica de base de datos de seguidor le permite adjuntar una base de datos ubicada en otro clúster al clúster de Azure Data Explorer. La base de datos del seguidor se adjunta en modo de solo lectura, lo que permite ver los datos y ejecutar consultas en los datos que se han ingerido en la base de datos del responsable. La base de datos del seguidor sincroniza los cambios en las bases de datos del responsable. Debido a la sincronización, hay un retraso de datos que va de unos segundos a unos minutos en la disponibilidad de los datos. La duración del retraso depende del tamaño total de los metadatos de la base de datos del responsable. Las bases de datos del responsable y el seguidor usan la misma cuenta de almacenamiento para capturar los datos. El almacenamiento pertenece a la base de datos del responsable. La base de datos del seguidor ve los datos sin necesidad de ingerirlos. Dado que la base de datos adjunta es de solo lectura, los datos, las tablas y las directivas de la base de datos no se pueden modificar, excepto en el caso de la directiva de almacenamiento en caché, las entidades de seguridad y los permisos. Las bases de datos adjuntas no se pueden eliminar. Para poder eliminarlas, el responsable o el seguidor deben desasociarlas primero.

Se adjunta una base de datos a otro clúster mediante la funcionalidad del seguidor como infraestructura para compartir datos entre organizaciones y equipos. La característica es útil para separar los recursos de proceso a fin de proteger un entorno de producción de los casos de uso que no son de producción. El seguidor también se puede usar para asociar el costo del clúster de Azure Data Explorer a la entidad que ejecuta consultas en los datos.

Para ver ejemplos de código basados en versiones anteriores del SDK, consulte el artículo archivado.

¿Qué bases de datos se siguen?

  • Un clúster puede seguir una base de datos, varias o todas las del clúster del responsable.
  • Un solo clúster puede seguir bases de datos de varios clústeres de responsables.
  • Un clúster puede contener bases de datos del seguidor y del responsable.

Requisitos previos

Adjuntar una base de datos

Puede usar varios métodos para adjuntar una base de datos. En este artículo, se describe cómo conectar una base de datos mediante C#, Python, PowerShell o una plantilla de Azure Resource Manager. Para adjuntar una base de datos, el usuario, el grupo, la entidad de servicio o la identidad administrada debe tener al menos el rol de colaborador en el clúster líder y en el clúster seguidor. Agregue o quite asignaciones de roles mediante Azure Portal, PowerShell, la CLI de Azure y una plantilla de ARM. Más información sobre el control de acceso basado en roles de Azure (Azure RBAC) y los diferentes roles.

Nota:

La creación previa de una base de datos seguidora no es necesaria, ya que se crea una durante el proceso de datos adjuntos.

Uso compartido de nivel de tabla

Al adjuntar la base de datos, también se siguen todas las tablas, tablas externas y vistas materializadas. Para compartir tablas, tablas externas o vistas materializadas específicas, configure "TableLevelSharingProperties".

'TableLevelSharingProperties' contiene ocho matrices de cadenas: tablesToInclude, tablesToExclude, externalTablesToInclude, externalTablesToExclude, materializedViewsToInclude, materializedViewsToExclude, functionsToInclude y functionsToExclude. El número máximo de entradas entre todas las matrices es 100 en total.

Nota:

  • No se admite el uso compartido de nivel de tabla cuando se usa la notación "*" de todas las bases de datos.
  • Cuando se incluyen vistas materializadas, también se incluyen sus tablas de origen.

Ejemplos

En el ejemplo siguiente se incluyen todas las tablas. De forma predeterminada, todas las tablas continúan sin usar la notación '*':

tablesToInclude = []

En el ejemplo siguiente se incluyen todas las funciones. De forma predeterminada, todas las funciones continúan sin usar la notación '*':

functionsToInclude = []

En el ejemplo siguiente se incluyen todas las tablas con nombres que comienzan por "Logs":

tablesToInclude = ["Logs*"]

En el ejemplo siguiente se incluyen todas las tablas externas:

externalTablesToExclude = ["*"]

En el ejemplo siguiente se incluyen todas las vistas materializadas:

materializedViewsToExclude=["*"]

Invalidación del nombre de la base de datos

Opcionalmente, puede hacer que el nombre de la base de datos en el clúster del seguidor sea diferente del clúster líder. Por ejemplo, puede asociar el mismo nombre de base de datos de varios clústeres líderes a un clúster de seguidor. Para especificar un nombre de base de datos diferente, configure la propiedad "DatabaseNameOverride" o "DatabaseNamePrefix".

Adjunción de una base de datos mediante C#

Paquetes de NuGet necesarios

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

Comprobación de que la base de datos se ha adjuntado correctamente

Para comprobar que la base de datos se ha adjuntado correctamente, busque las bases de datos adjuntas en Azure Portal. Puede comprobar que las bases de datos se han conectado correctamente en los clústeres seguidor o líder.

Comprobación del clúster seguidor

  1. Vaya al clúster del seguidor y seleccione Bases de datos.

  2. En la lista de bases de datos, busque nuevas bases de datos de solo lectura.

    Captura de pantalla de las bases de datos de seguidor de solo lectura en el portal.

    También puede ver esta lista en la página de información general de la base de datos:

    Captura de pantalla de la página de información general de bases de datos con la lista de clústeres de seguidor.

Comprobación del clúster líder

  1. Vaya al clúster del responsable y seleccione Bases de datos

  2. Compruebe que las bases de datos relevantes estén marcadas como COMPARTIDO CON OTROS>.

  3. Cambie el vínculo de relación para ver los detalles.

    Captura de pantalla de las bases de datos compartidas con otros usuarios para comprobar el clúster líder.

    También puede verlo en la página de información general de la base de datos:

    Captura de pantalla de información general con la lista de bases de datos compartidas con otros usuarios.

Desasociación de la base de datos del seguidor

Nota:

Para desasociar una base de datos del seguidor o el líder, el usuario, el grupo, la entidad de servicio o la identidad administrada deben tener al menos el rol Colaborador en el clúster del que va a desasociar la base de datos. En el ejemplo anterior, usamos la entidad de servicio.

Desasociación de la base de datos conectada al seguidor desde el clúster seguidor mediante C#**

El clúster seguidor puede desasociar cualquier base de datos conectada de la siguiente manera:

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

Desasociación de la base de datos conectada al seguidor desde el clúster líder mediante C#

El clúster del responsable puede desasociar cualquier base de datos adjunta de la siguiente manera:

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

Administración de entidades de seguridad, permisos y directiva de almacenamiento en caché

Administración de entidades de seguridad

Al adjuntar una base de datos, especifique el valor del "tipo de modificación de las entidades de seguridad predeterminadas". El valor predeterminado es combinar las entidades de seguridad autorizadas de invalidación con la colección de bases de datos líder de entidades de seguridad autorizadas.

Variante Descripción
Unión Las entidades de seguridad de las bases de datos conectadas incluirán siempre las entidades de seguridad de las bases de datos originales, además de otras nuevas entidades de seguridad agregadas a la base de datos del seguidor.
Reemplazar No se heredan las entidades de seguridad de la base de datos original. Se deben crear nuevas entidades de seguridad para la base de datos adjunta.
None Las entidades de seguridad de las bases de datos conectadas incluyen solo las entidades de seguridad de la base de datos original sin otras entidades de seguridad.

Para obtener más información sobre el uso de comandos de administración para configurar las entidades de seguridad autorizadas, vea Comandos de administración para administrar el clúster de un seguidor.

Administración de permisos

La administración de los permisos de bases de datos de solo lectura es igual que para todos los tipos de base de datos. Para asignar permisos, consulte Administración de permisos de base de datos en Azure Portal o uso de comandos de administración para administrar roles de seguridad de base de datos.

Configuración de la directiva de almacenamiento en caché

El administrador de la base de datos del seguidor puede modificar la directiva de almacenamiento en caché de la base de datos adjunta o de cualquiera de sus tablas en el clúster de hospedaje. El valor predeterminado es combinar la base de datos de origen en la base de datos del clúster líder y las directivas de almacenamiento en caché en el nivel de tabla con las directivas definidas en la base de datos y las directivas de invalidación en el nivel de tabla. Por ejemplo, puede tener una directiva de almacenamiento en caché de 30 días en la base de datos del responsable para realizar informes mensuales y una directiva de almacenamiento en caché de tres días en la base de datos del seguidor para consultar solo los datos recientes si necesita solucionar problemas. Para obtener más información sobre el uso de comandos de administración para configurar la directiva de almacenamiento en caché en la tabla o la base de datos del seguidor, vea Comandos de administración para administrar el clúster de un seguidor.

Notas

  • Si hay conflictos entre las bases de datos de los clústeres líderes y los seguidores, cuando el clúster seguidor sigue todas las bases de datos, se resuelven de la siguiente manera:
    • Una base de datos llamada DB creada en el clúster seguidor tiene prioridad sobre una base de datos con el mismo nombre creada en el clúster líder. Este es el motivo por el que se debe quitar o cambiar el nombre de la base de datos DB en el clúster seguidor para que el clúster seguidor incluya la base de datos DB del líder.
    • Una base de datos llamada DB que es seguida desde dos o más clústeres líderes se elegirá arbitrariamente desde uno de los clústeres líderes y no se seguirá más de una vez.
  • Los comandos para mostrar el registro de actividad y el historial del clúster que se ejecutan en un clúster seguidor mostrarán la actividad y el historial del clúster seguidor, y sus conjuntos de resultados no incluirán los resultados del clúster o clústeres líder.
    • Por ejemplo: un comando .show queries que se ejecuta en el clúster seguidor solo mostrará las consultas que se ejecutan en las bases de datos seguidas por el clúster seguidor y no mostrará las consultas que se ejecutan en la misma base de datos del clúster líder.

Limitaciones

  • Los clústeres del seguidor y el responsable deben estar en la misma región.
  • Si la ingesta de streaming se usa en una base de datos que se está siguiendo, el clúster del seguidor debe estar habilitado para la ingesta de streaming para permitir el seguimiento de los datos de esta.
  • Después de un clúster con cifrado de datos mediante claves administradas por el cliente (CMK) se admite con las siguientes limitaciones:
    • Ni el clúster de seguidor ni el clúster líder siguen a otros clústeres.
    • Si un clúster de seguidor sigue un clúster líder con CMK habilitado y se revoca el acceso del líder a la clave, se suspenderán tanto el líder como los clústeres del seguidor. En esta situación, puede resolver el problema de CMK y, a continuación, reanudar el clúster del seguidor, o bien puede desasociar las bases de datos del seguidor del clúster del seguidor y reanudar independientemente del clúster líder.
  • No puede eliminar una base de datos que esté asociada a otro clúster antes de desasociarla.
  • No puede eliminar un clúster que tenga una base de datos asociada a otro clúster antes de desasociarla.
  • Las propiedades del uso compartido de nivel de tabla no se admiten cuando se siguen todas las bases de datos.
  • En las bases de datos del seguidor, para consultar tablas externas que usan una identidad administrada como método de autenticación, se debe agregar la identidad administrada al clúster del seguidor. Esta funcionalidad no funciona cuando los clústeres líder y seguidor se aprovisionan en distintos inquilinos.

Paso siguiente