Uso de base de datos de seguidores

La característica follower permite adjuntar una base de datos ubicada en un clúster diferente 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. La base de datos líder posee el almacenamiento. 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. El líder o el seguidor deben desasociar las bases de datos antes de la eliminación.

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 Follower 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.

Nota:

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

¿Qué bases de datos se siguen?

Lo siguiente se aplica a los clústeres:

  • 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 principales.
  • 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 adjuntar 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, CLI de Azure y ARM. Obtenga más información sobre Azure control de acceso basado en roles (Azure RBAC) y los roles diferentes.

Nota:

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

Uso compartido de nivel de tabla

Al adjuntar bases de datos, también se incluyen 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 la compartición a nivel de tabla al utilizar la notación '*' para 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 se siguen 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 followerClusterId = KustoClusterResource.CreateResourceIdentifier(subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "followerResourceGroup", clusterName: "follower");
var leaderClusterId = KustoClusterResource.CreateResourceIdentifier(subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "leaderResourceGroup", clusterName: "leader");
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration";

var credentials = new ManagedIdentityCredential();
var resourceManagementClient = new ArmClient(credentials);
var followerCluster = resourceManagementClient.GetKustoClusterResource(followerClusterId);
var attachedDatabaseConfigurations = followerCluster.GetKustoAttachedDatabaseConfigurations();
var attachedDatabaseConfigurationData = new KustoAttachedDatabaseConfigurationData
{
    ClusterResourceId = leaderClusterId,
    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 adjuntó correctamente, busque las bases de datos adjuntas en el portal Azure. Puede comprobar que las bases de datos se han conectado correctamente en los clústeres seguidor o líder.

Verifica tu clúster de seguidores

  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 seguidoras 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.

Comprueba tu 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.

Desconectar la base de datos del seguidor

Nota:

Para desvincular una base de datos desde el lado del seguidor o líder, debe tener una identidad de usuario, grupo, principal de servicio o identidad administrada con, como mínimo, el rol de colaborador en el clúster desde el que va a desvincular la base de datos. En el ejemplo a continuación, usamos el principal de servicio.

Desasociar la base de datos de seguidor adjunta del clúster de seguidores usando C#**

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

var attachedDatabaseConfigurationId = KustoAttachedDatabaseConfigurationResource.CreateResourceIdentifier(
    subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "testrg", clusterName: "follower",
    attachedDatabaseConfigurationName: "attachedDatabaseConfiguration");
var credentials = new ManagedIdentityCredential();
var resourceManagementClient = new ArmClient(credentials);
var attachedDatabaseConfiguration = resourceManagementClient.GetKustoAttachedDatabaseConfigurationResource(attachedDatabaseConfigurationId);
await attachedDatabaseConfiguration.DeleteAsync(WaitUntil.Completed);

Desasocia la base de datos de réplicas conectada del clúster líder usando C#

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

var leaderClusterId = KustoClusterResource.CreateResourceIdentifier(subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "testrg", clusterName: "leader");
var followerClusterId = KustoClusterResource.CreateResourceIdentifier(subscriptionId: "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx", resourceGroupName: "followerResourceGroup", clusterName: "follower");
var followerDatabaseDefinition = new KustoFollowerDatabaseDefinition(
    clusterResourceId: followerClusterId,
    attachedDatabaseConfigurationName: "attachedDatabaseConfiguration"
);
var credentials = new ManagedIdentityCredential();
var resourceManagementClient = new ArmClient(credentials);
var leaderCluster = resourceManagementClient.GetKustoClusterResource(leaderClusterId);
await leaderCluster.DetachFollowerDatabasesAsync(WaitUntil.Completed, followerDatabaseDefinition);

Administración de principales, permisos y política de caché

Gestión de entidades principales

Al adjuntar una base de datos, especifique el "tipo de modificación de los responsables predeterminados". 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.

Tipo 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 los principios de seguridad de la base de datos original. Se deben crear nuevos principales para la base de datos adjunta.
Ninguno 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 los principales autorizados, vea Comandos de administración para gestionar un clúster 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 Administrar permisos de base de datos en el portal de Azure o use 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

Revise las notas siguientes:

  • 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 del clúster y el historial que se ejecutan en un clúster seguidor muestran la actividad y el historial en el clúster seguidor, y sus conjuntos de resultados no incluyen esos resultados del clúster líder o clústeres líderes.
    • Por ejemplo: un .show queries comando ejecutado en el clúster seguidor muestra solo las consultas que se ejecutan en las bases de datos seguidas por el clúster seguidor, y no las consultas que se ejecutan contra la misma base de datos en el clúster líder.

Limitaciones

Revise las siguientes limitaciones:

  • Los clústeres del seguidor y del líder deben estar en la misma región.
  • Si Streaming ingestion se usa en una base de datos que se está siguiendo, el clúster del seguidor debe estar habilitado para Streaming Ingestion, permitiendo el seguimiento de los datos de ingesta de streaming.
  • El seguimiento de un clúster con cifrado de datos mediante claves administradas por el cliente (CMK) es compatible con las siguientes limitaciones:
    • El clúster seguidor o el clúster líder no sigue 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 de nivel de tabla para el uso compartido 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.
  • No se pueden almacenar los resultados de la consulta en una base de datos seguida y de solo lectura.

Paso siguiente