Implementación de un servicio de división y combinación para mover datos entre bases de datos particionadas
Se aplica a: Azure SQL Database
La herramienta de división y combinación permite mover los datos entre bases de datos particionadas. Consulte Mover datos entre bases de datos en la nube escaladas horizontalmente.
Nota:
La herramienta de división y combinación está pensada para Azure Web Apps. El fin de la vida útil de Cloud Services (clásico) es el 31 de agosto de 2024. Si usaba la herramienta de división y combinación en Cloud Services (clásico), migre a Azure Web Apps antes del 31 de agosto de 2024.
Requisitos previos
Cree una base de datos SQL que se usará como la base de datos de estado de división y combinación. Vaya a Azure Portal. Cree una base de datos SQL. Asigne un nombre a la base de datos y cree un administrador y una contraseña. Asegúrese de anotar el nombre y la contraseña para usarlos más adelante.
Asegúrese de que el servidor lógico en Azure permita que los servicios de Azure se conecten a él. En Azure Portal, en Configuración de firewall, asegúrese de que el valor Permitir el acceso a servicios de Azure esté establecido en Activado. Seleccione el icono Save (Guardar).
Cree una cuenta de Azure Storage para la salida de diagnóstico.
Use las imágenes públicas de Docker split-merge o inserte imágenes de Docker split-merge en Azure Container Service o en el registro de Docker que prefiera.
Creación de dos aplicaciones web de Azure para el servicio
Cree dos aplicaciones web: worker
y una aplicación web UI
.
Aplicación web de trabajo
Cree una aplicación web en Azure Portal.
En el campo Publicar, seleccione Contenedor.
En Sistema operativo, seleccione Windows.
Continúe a la pestaña Docker.
Rellene la información siguiente:
Origen de imagen:Docker hub
Tipo de acceso:Public
Imagen y etiqueta:mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1
Seleccione Revisar y crear para crear la aplicación web.
Aplicación web de interfaz de usuario
Para crear la aplicación web de interfaz de usuario, siga los mismos pasos que ha usado para crear la aplicación web de trabajo con una diferencia:
- Otra imagen de Docker en el campo Imagen y etiqueta:
mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1
Configuración de las aplicaciones web Split-Merge
Configuración de seguridad
Para obtener instrucciones detalladas para configurar la seguridad del servicio, consulte Configuración de seguridad de división y combinación.
Para fines de una simple implementación de prueba para este tutorial, se realiza un conjunto mínimo de pasos de configuración para configurar y ejecutar el servicio. Estos pasos solo habilitan la máquina/cuenta que los ejecuta para comunicarse con el servicio.
Creación de un certificado autofirmado y un archivo PFX
Use PowerShell para crear un certificado autofirmado y un archivo PFX.
Primero, cree un directorio. Después, reemplace los valores insertados en consecuencia y ejecute los siguientes comandos de PowerShell desde el nuevo directorio:
$cert = New-SelfSignedCertificate -Subject "CN=*.cloudapp.net" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
$mypwd = ConvertTo-SecureString -String "{myPassword}" -Force -AsPlainText ## Replace {myPassword}
Export-PfxCertificate -Cert $cert -FilePath "C:\Users\admin\Desktop\$certname.pfx" -Password $mypwd ## Specify your preferred location
Carga del archivo PFX en las aplicaciones web y habilitación del uso de certificados
Repita los pasos siguientes para las aplicaciones web worker
y UI
.
- Vaya a Azure Portal.
- Seleccione App Services.
- Seleccione la aplicación web que ha creado antes para la herramienta de división y combinación.
- Seleccione Certificados en el menú.
- Seleccione Aportación de sus propios certificados (.pfx).
- Seleccione Agregar certificado en la barra.
- Seleccione el archivo PFX y escriba la misma contraseña anterior.
- Una vez realizado, copie la huella digital del certificado desde la entrada nueva en la lista.
- En el menú de la aplicación web, abra Configuración / Configuración.
- Establezca Modo de certificado de cliente en
Require
.
Configuración de la Aplicación web
Repita los pasos siguientes para las aplicaciones web worker
y UI
.
Abra la aplicación web implementada y vaya a Configuración>Variables de entorno>Configuración de la aplicación. Seleccione Agregar.
Agregue una variable con el nombre ElasticScaleMetadata y el valor con el cadena de conexión de la base de datos de estado implementada anteriormente.
Importante
En este momento, la base de datos de estado debe usar la intercalación latina (
SQL\_Latin1\_General\_CP1\_CI\_AS
). Para obtener más información, vea Nombre de intercalación de Windows.Con Azure SQL Database, la cadena de conexión suele tener este formato:
Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<userId>; Password=<password>; Encrypt=True; Connection Timeout=30
Agregue variables adicionales:
NOMBRE Valor WorkerRoleSynchronizationStorageAccountConnectionString Cadena de conexión válida en el almacenamiento de Azure creado anteriormente. DataEncryptionPrimaryCertificateThumbprint Huella digital del certificado generado antes. MetadataExpirationPeriodInMinutes 20160 MaxRetryCount 5 WEBSITE_LOAD_CERTIFICATES * WEBSITE_PULL_IMAGE_OVER_VNET 0 Seleccione Aplicar y reinicie la aplicación.
Repita los mismos pasos para la aplicación web
worker
yUI
.
Solución de problemas de la implementación
Si el rol web no puede ponerse en línea, probablemente haya un problema con la configuración de seguridad. Compruebe que TLS/SSL esté configurado como se describió anteriormente.
Si el rol de trabajo no puede ponerse en línea, pero el rol web sí, probablemente se trate de un problema al conectarse a la base de datos de estado que creó anteriormente.
Asegúrese de que la cadena de conexión es correcta.
Compruebe que existan el servidor y la base de datos y que el identificador de usuario y la contraseña estén correctos.
En el caso de Azure SQL Database, la cadena de conexión debe tener este formato:
Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<user>; Password=<password>; Encrypt=True; Connection Timeout=30
Asegúrese de que el nombre del servidor no comience por
https://
.Asegúrese de que el servidor permita que los servicios de Azure se conecten a él. Para ello, abra la base de datos en el portal y asegúrese de que el valor Permitir el acceso a servicios de Azure esté establecido en Activado.
Prueba de la implementación del servicio
Conexión con un explorador web
Vaya a la información general de la aplicación web UI
y seleccione Examinar. Elija el certificado correcto, si se le solicita.
Pruebas con scripts de PowerShell
Puede probar la implementación y su entorno si ejecuta los scripts de PowerShell de ejemplo incluidos.
Importante
Los scripts de ejemplo se ejecutan en PowerShell 5.1. No se ejecutan actualmente en PowerShell 6 o posterior.
Los archivos de script incluidos son:
SetupSampleSplitMergeEnvironment.ps1
: configura un nivel de datos de prueba para la división y combinación.- Crea una base de datos del administrador de mapa de particiones
- Crea dos bases de datos de particiones.
- Crea un mapa de particiones para esas bases de datos (elimina todo mapa de particiones existente en esas bases de datos).
- Crea una pequeña tabla de ejemplo en las particiones y rellena la tabla en una de las particiones.
- Declara la SchemaInfo para la tabla particionada.
ExecuteSampleSplitMerge.ps1
: ejecuta operaciones de prueba en el nivel de datos de prueba.- Envía una solicitud de división al front-end web del servicio división-combinación, que divide la mitad de los datos entre la primera partición y la segunda.
- Sondea el front-end web para ver el estado de la solicitud de división y espera hasta que se complete la solicitud.
- Envía una solicitud de combinación al front-end del servicio División y combinación, que mueve los datos desde la segunda partición de vuelta a la primera partición.
- Sondea el front-end web para ver el estado de la solicitud de combinación y espera hasta que se complete la solicitud.
GetMappings.ps1
: script de muestra de nivel superior que imprime el estado actual de las asignaciones de particiones.ShardManagement.psm1
: script auxiliar que incluye la API de ShardManagement.SqlDatabaseHelpers.psm1
: script auxiliar para crear y administrar bases de datos en SQL Database.
Uso de PowerShell para comprobar la implementación
Abra una nueva ventana de PowerShell y vaya al directorio al que descargó el paquete División y combinación y, a continuación, vaya al directorio "PowerShell".
Cree un servidor (o elija un servidor existente) en el que se crearán las particiones y el administrador de mapa de particiones.
Nota:
El script
SetupSampleSplitMergeEnvironment.ps1
crea todas estas bases de datos en el mismo servidor de manera predeterminada para que el script sea sencillo. Esta no es una restricción del servicio División y combinación mismo.Se requerirá un inicio de sesión de autenticación de SQL con acceso de lectura/escritura a las bases de datos para que el servicio División y combinación mueva los datos y actualice el mapa de particiones. Debido a que el servicio División y combinación se ejecuta en la nube, actualmente no es compatible con Autenticación integrada.
Asegúrese de que el servidor esté configurado para permitir el acceso desde la dirección IP de la máquina que ejecuta estos scripts. Puede encontrar esta configuración en SQL Server/Firewalls y redes virtuales/Direcciones IP de cliente.
Ejecute el script
SetupSampleSplitMergeEnvironment.ps1
para crear el entorno de ejemplo.Ejecutar este script elimina toda estructura de datos de administrador del mapa de particiones existente en la base de datos del administrador de mapa de particiones y las particiones. Puede ser útil volver a ejecutar el script si desea volver a inicializar las particiones o el mapa de particiones.
Línea de comandos de ejemplo:
.\SetupSampleSplitMergeEnvironment.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
Ejecute el script Getmappings.ps1 para ver las asignaciones que existen actualmente en el entorno de ejemplo.
.\GetMappings.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
Ejecute el script
ExecuteSampleSplitMerge.ps1
para ejecutar una operación de división (moviendo la mitad de los datos de la primera partición a la segunda partición) y luego una operación Merge (moviendo los datos de vuelta a la primera partición). Si configuró TLS y dejó deshabilitado el punto de conexión http, asegúrese de usar el punto de conexión https://.Línea de comandos de ejemplo:
.\ExecuteSampleSplitMerge.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' ^ -ShardMapManagerServerName 'abcdefghij.database.windows.net' ^ -SplitMergeServiceEndpoint 'https://mysplitmergeservice.cloudapp.net' ^ -CertificateThumbprint '0123456789abcdef0123456789abcdef01234567'
Si recibe el siguiente error, es muy probable que se trate de un problema con el certificado del punto de conexión web. Intente conectarse al extremo web con el explorador web de su preferencia y revise si hay un error en el certificado.
Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLSsecure channel.
Si se realiza correctamente, la salida debe tener un aspecto similar al siguiente:
.\ExecuteSampleSplitMerge.ps1 -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net' -SplitMergeServiceEndpoint 'http://mysplitmergeservice.cloudapp.net' -CertificateThumbprint 0123456789abcdef0123456789abcdef01234567 Sending split request Began split operation with id dc68dfa0-e22b-4823-886a-9bdc903c80f3 Polling split-merge request status. Press Ctrl-C to end Progress: 0% | Status: Queued | Details: [Informational] Queued request Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request. Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target shards. Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from source to target shard. Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Waiting for reference tables copy completion. Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from source to target shard. Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of Sharded tables Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range [100:110) for table [dbo].[MyShardedTable] ... ... Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table [dbo].[MyShardedTable]. Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created while processing the request. Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request. Sending merge request Began merge operation with id 6ffc308f-d006-466b-b24e-857242ec5f66 Polling request status. Press Ctrl-C to end Progress: 0% | Status: Queued | Details: [Informational] Queued request Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request. Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target shards. Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from source to target shard. Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of Sharded tables Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range [100:110) for table [dbo].[MyShardedTable] ... ... Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table [dbo].[MyShardedTable]. Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created while processing the request. Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request.
Experimente con otros tipos de datos. Todos estos scripts tienen un parámetro -ShardKeyType opcional que le permite especificar el tipo de clave. El valor predeterminado es Int32, pero también puede especificar Int64, Guid o Binary.
Creación de solicitudes
El servicio se puede utilizar mediante la interfaz de usuario web o importando y utilizando el módulo de PowerShell SplitMerge.psm1
que envía sus solicitudes a través del rol web.
El servicio puede mover los datos de las tablas particionadas y de las tablas de referencia. Una tabla particionada tiene una columna de clave de particionamiento y distintos datos de fila en cada partición. Una tabla de referencia no está particionada, por lo que contiene los mismos datos de fila en cada partición. Las tablas de referencia son útiles para los datos que no cambian con frecuencia y que se usan para UNIRSE con tablas particionadas en consultas.
Para realizar una operación de división y combinación, debe declarar las tablas particionadas y las tablas de referencia que desea mover. Esto se realiza con la API SchemaInfo . Esta API se encuentra en el espacio de nombres Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema
.
- Para cada tabla particionada, cree un objeto ShardedTableInfo que describa el nombre del esquema principal de la tabla (opcional, se define de manera predeterminada en "dbo"), el nombre de la tabla y el nombre de la columna de esa tabla que contiene la clave de particionamiento.
- Para cada tabla de referencia, cree un objeto ReferenceTableInfo que describa el nombre del esquema principal de la tabla (opcional, se define de manera predeterminada en "dbo") y el nombre de la tabla.
- Agregue los objetos TableInfo anteriores a un nuevo objeto SchemaInfo.
- Obtenga una referencia a un objeto ShardMapManager y llame a GetSchemaInfoCollection.
- Agregue SchemaInfo a SchemaInfoCollection y proporcione el nombre del mapa de particiones.
Es posible ver un ejemplo de esto en el script SetupSampleSplitMergeEnvironment.ps1.
El servicio División y combinación no crea la base de datos de destino (o esquema para cualquier tabla de la base de datos) por usted. Deben crearse previamente antes de enviar una solicitud al servicio.
Errores conocidos
Es posible que, cuando ejecute los scripts de PowerShell de ejemplo, vea el siguiente mensaje:
Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
Este error significa que el certificado TLS/SSL no está configurado correctamente. Siga las instrucciones que aparecen en la sección Conexión con un explorador web.
Si no se pueden enviar solicitudes, es posible que vea lo siguiente:
[Exception] System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'dbo.InsertRequest'.
En este caso, compruebe el archivo de configuración, en particular la configuración de WorkerRoleSynchronizationStorageAccountConnectionString
. Este error normalmente indica que el rol de trabajo no pudo inicializar correctamente la base de datos de metadatos la primera vez.
Contenido relacionado
¿Aún no ha usado las herramientas de base de datos elástica? Consulte la Guía de introducción. Si tiene alguna pregunta, póngase en contacto con nosotros en la Página de preguntas y respuestas de Microsoft sobre SQL Database y, para efectuar solicitudes de características, agregue nuevas ideas o vote por las ideas existentes en el foro de comentarios sobre SQL Database.