Déployer un service de fractionnement et de fusion pour déplacer des données entre bases de données partitionnées
S’applique à : base de données Azure SQL
L’outil de fractionnement et de fusion vous permet de déplacer les données entre les différentes bases de données partitionnées. Consultez Déplacement de données entre des bases de données cloud mises à l’échelle.
Remarque
L’outil de fractionnement et de fusion est destiné à Azure Web Apps. La fin de vie de Cloud Services (classique) est prévue le 31 août 2024. Si vous utilisiez l’outil de fractionnement et de fusion sur Cloud Services (classique), migrez vers Azure Web Apps avant le 31 août 2024.
Prérequis
Créez une base de données SQL qui servira de base de données d’état de fractionnement/fusion. Accédez au portail Azure. Créez une base de données SQL. Nommez la base de données et créez un administrateur ainsi qu’un mot de passe. Veillez à enregistrer le nom et le mot de passe pour une utilisation ultérieure.
Vérifiez que votre serveur logique dans Azure autorise la connexion des services Azure. Dans le Portail Azure, dans les Paramètres du pare-feu de votre serveur logique, vérifiez que le paramètre Autoriser l’accès aux services Azure a la valeur Activé. Sélectionnez l’icône Enregistrer.
Créez un compte de Stockage Azure pour les sorties de diagnostics.
Utilisez les images Docker de fractionnement et de fusion publiques, ou envoyez (push) des images Docker de fractionnement et de fusion vers Azure Container Service ou le registre Docker de votre choix.
Créer deux Azure Web Apps pour votre service
Créez deux applications web : un worker
et un UI
.
Application web worker
Créez une application web dans le portail Azure.
Dans le champ Publier, sélectionnez Conteneur.
Pour Système d’exploitation, sélectionnez Windows.
Passez à l’onglet Docker.
Indiquez les informations suivantes pour remplir le formulaire :
Source d’image :Docker hub
Type d’accès :Public
Image et étiquette :mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1
Utilisez Vérifier + créer pour créer l’application web.
Interface utilisateur (application web)
Pour créer l’application web d’interface utilisateur, suivez les mêmes étapes que celles que vous avez utilisées pour créer l’application web worker à une différence près :
- Une image Docker différente dans le champ Image et étiquette :
mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1
Configurer vos applications web de fractionnement et de fusion
Configurer la sécurité
Pour obtenir des instructions détaillées permettant de configurer la sécurité du service, reportez-vous à la configuration de la sécurité de la fusion et du fractionnement.
Dans le cadre d’un simple déploiement de test pour ce didacticiel, le bon fonctionnement du service nécessite d’effectuer un nombre minimum d’étapes de configuration. Ces dernières permettent uniquement à l’ordinateur/au compte qui les exécute de communiquer avec le service.
Créer un certificat auto-signé et un fichier PFX
Utilisez PowerShell pour créer un certificat auto-signé et un fichier PFX.
Créez d’abord d’un nouveau répertoire. Remplacez ensuite les valeurs inline en conséquence et exécutez les commandes PowerShell suivantes à partir du nouveau répertoire :
$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
Charger le fichier PFX dans les applications web et activer l’utilisation des certificats
Répétez les étapes suivantes pour les applications web worker
et UI
.
- Accédez au portail Azure.
- Sélectionnez App Services.
- Sélectionnez l’application web que vous avez créée ci-dessus pour l’outil de fractionnement et de fusion.
- Sélectionnez Certificats dans le menu.
- Sélectionnez Apportez votre propre certificat (.pfx).
- Sélectionnez Ajouter un certificat dans la barre.
- Sélectionnez le fichier PFX et entrez le même mot de passe que ci-dessus.
- Lorsque vous avez terminé, copiez l’empreinte de certificat à partir de la nouvelle entrée dans la liste.
- Dans le menu de l’application web, ouvrez Paramètres / Configuration.
- Définissez Mode de certificat client sur
Require
.
Configuration de l’application web
Répétez les étapes suivantes pour les applications web worker
et UI
.
Ouvrez l’application web déployée et accédez à Paramètres>Variables d’environnement>Paramètres de l’application. Sélectionnez Ajouter.
Ajoutez une variable avec le nom ElasticScaleMetadata et pour valeur la chaîne de connexion à la base de données d’état précédemment déployée.
Important
À ce stade, la base de données de l’état doit utiliser le classement Latin (
SQL\_Latin1\_General\_CP1\_CI\_AS
). Pour plus d’informations, consultez Nom de classement Windows.Dans Azure SQL Database, la chaîne de connexion se présente généralement sous la forme suivante :
Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<userId>; Password=<password>; Encrypt=True; Connection Timeout=30
Ajoutez des variables supplémentaires :
Nom Valeur WorkerRoleSynchronizationStorageAccountConnectionString Chaîne de connexion valide pour le stockage Azure créé précédemment. DataEncryptionPrimaryCertificateThumbprint Empreinte numérique précédemment générée pour le certificat. MetadataExpirationPeriodInMinutes 20160 MaxRetryCount 5 WEBSITE_LOAD_CERTIFICATES * WEBSITE_PULL_IMAGE_OVER_VNET 0 Sélectionnez Appliquer et redémarrez l’application.
Répétez les mêmes étapes pour les applications web
worker
etUI
.
Résolution des problèmes de déploiement
Si votre rôle web ne parvient pas à être en ligne, il s’agit probablement d’un problème avec la configuration de sécurité. Vérifiez que le protocole TLS/SSL est configuré comme décrit précédemment.
Si votre rôle de travail ne parvient pas à être en ligne, mais que votre rôle web réussit, il s’agit probablement d’un problème de connexion à la base de données d’états que vous avez créée précédemment.
Vérifiez que la chaîne de connexion ne contient aucune erreur.
Vérifiez que le serveur et la base de données existent et que l’identifiant utilisateur et le mot de passe sont corrects.
Dans Azure SQL Database, la chaîne de connexion doit se présenter sous la forme suivante :
Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<user>; Password=<password>; Encrypt=True; Connection Timeout=30
Assurez-vous que le nom du serveur ne commence pas par
https://
.Vérifiez que votre serveur autorise la connexion des services Azure. Pour ce faire, ouvrez votre base de données dans le portail et vérifiez que le paramètre Autoriser l’accès aux services Azure est défini sur Activé.
Tester le déploiement du service
Se connecter avec un navigateur Web
Accédez à la Vue d’ensemble de votre application web UI
, puis sélectionnez Parcourir. Choisissez le bon certificat, si vous y êtes invité.
Effectuer des tests avec des scripts PowerShell
Le déploiement et votre environnement peuvent être testés en exécutant les exemples de scripts PowerShell fournis.
Important
Les exemples de scripts s’exécutent sur PowerShell 5.1. Ils ne s’exécutent actuellement pas sur PowerShell 6 ou version ultérieure.
Les fichiers de script inclus sont les suivants :
SetupSampleSplitMergeEnvironment.ps1
: configure un niveau de données de test pour le fractionnement et la fusion.- Crée une base de données pour le Gestionnaire de cartes de partitions.
- Crée deux bases de données de partition.
- Crée une carte de partitions pour les bases de données concernées (supprime les cartes de partitions existantes sur ces dernières).
- Crée un petit exemple de table dans les deux partitions et remplit la table dans l’une des partitions.
- Déclare le SchemaInfo pour la table partitionnée.
ExecuteSampleSplitMerge.ps1
: exécute des opérations de test sur la couche données de test.- Envoie une demande de fractionnement vers le serveur web frontal du service de fractionnement/fusion, qui fractionne la moitié des données de la première partition et les envoie vers la deuxième partition.
- Interroge le serveur Web frontal sur l’état de la demande de fractionnement et attend jusqu’à ce que la demande soit terminée.
- Envoie une demande de fusion vers le serveur Web frontal du service de fractionnement/fusion, qui déplace les données de la deuxième partition vers la première partition.
- Interroge le serveur web frontal sur l’état de la demande de fusion et attend jusqu’à ce que la demande soit terminée.
GetMappings.ps1
: exemple de script de niveau supérieur qui imprime l’état actuel des mappages de partitions.ShardManagement.psm1
: script d’assistance qui encapsule l’API ShardManagement.SqlDatabaseHelpers.psm1
: script d’assistance pour la création et la gestion des bases de données dans SQL Database.
Utiliser PowerShell pour vérifier le déploiement
Ouvrez une nouvelle fenêtre PowerShell et accédez au répertoire dans lequel vous avez téléchargé le package de fractionnement/fusion, puis accédez à l’annuaire « PowerShell. »
Créez un serveur (ou choisissez un serveur existant) dans lequel le manager des cartes de partitions et les partitions seront créés.
Remarque
Par défaut, le script
SetupSampleSplitMergeEnvironment.ps1
crée toutes ces bases de données sur le même serveur pour que le script reste simple. Il ne s’agit pas d’une restriction du service de fractionnement/fusion.Une connexion d’authentification SQL avec un accès en lecture/écriture aux bases de données est requis pour le service de fractionnement/fusion afin de déplacer les données et de mettre à jour la carte de partitions. Le service de fractionnement/fusion s’exécutant dans le cloud, il ne prend pas actuellement en charge l’authentification intégrée.
Assurez-vous que le serveur est configuré pour autoriser l’accès à partir de l’adresse IP de l’ordinateur exécutant les scripts. Ce paramètre se trouve sous SQL Server/pare-feux et réseaux virtuels/adresses IP du client.
Exécutez le script
SetupSampleSplitMergeEnvironment.ps1
pour créer l’exemple d’environnement.L’exécution de ce script efface toutes les structures de données de gestion des cartes de partitions existantes dans la base de données du Gestionnaire des cartes de partitions et dans les partitions. Il peut être utile de réexécuter le script si vous souhaitez réinitialiser la carte de partitions ou les partitions.
Exemple de ligne de commande :
.\SetupSampleSplitMergeEnvironment.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
Exécutez le script Getmappings.ps1 pour afficher les mappages qui existent actuellement dans l’exemple d’environnement.
.\GetMappings.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
Exécutez le script
ExecuteSampleSplitMerge.ps1
pour exécuter une opération de fractionnement (la moitié des données sont déplacées de la première partition vers la deuxième), puis une opération de fusion (les données sont redéplacées vers la première partition). Si vous avez configuré TLS et laissé le point de terminaison http désactivé, veillez à utiliser le point de terminaison https:// à la place.Exemple de ligne de commande :
.\ExecuteSampleSplitMerge.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' ^ -ShardMapManagerServerName 'abcdefghij.database.windows.net' ^ -SplitMergeServiceEndpoint 'https://mysplitmergeservice.cloudapp.net' ^ -CertificateThumbprint '0123456789abcdef0123456789abcdef01234567'
Si vous recevez l’erreur suivante, il s’agit probablement d’un problème avec le certificat de votre point de terminaison Web. Essayez de vous connecter au point de terminaison web avec votre navigateur web préféré et vérifiez s’il existe une erreur de certificat.
Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLSsecure channel.
En cas de succès, la sortie doit ressembler au bloc suivant :
.\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.
Faites des essais avec d’autres types de données. Tous ces scripts nécessitent un paramètre -ShardKeyType facultatif qui vous permet de spécifier le type de clé. La valeur par défaut est Int32, mais vous pouvez également spécifier Int64, Guid ou Binary.
Créer des requêtes
Le service peut être utilisé à l’aide de l’interface utilisateur Web ou par l’importation et l’utilisation du module PowerShell SplitMerge.psm1
qui envoie vos demandes via le rôle Web.
Ce service peut déplacer les données dans les tables partitionnées et les tables de référence. Une table partitionnée possède une colonne de clés de partitionnement et comporte des données de ligne différentes sur chaque partition. Une table de référence n’est pas partitionnée. De ce fait, elle comporte les mêmes données de ligne sur chaque partition. Les tables de référence sont utiles pour les données qui ne changent pas souvent et qui sont utilisées pour S’ASSOCIER à des tables partitionnées dans les requêtes.
Pour effectuer une opération de fractionnement/fusion, vous devez déclarer les tables partitionnées et les tables de référence que vous souhaitez déplacer. Cette opération est effectuée avec l’API SchemaInfo . Cette API se trouve dans l’espace de noms Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema
.
- Pour chaque table partitionnée, créez un objet ShardedTableInfo décrivant le nom du schéma parent de la table (facultatif, la valeur par défaut est « dbo »), le nom de la table et le nom de la colonne de cette table qui comporte la clé de partitionnement.
- Pour chaque table de référence, créez un objet ReferenceTableInfo décrivant le nom du schéma parent de la table (facultatif, la valeur par défaut est « dbo ») et le nom de la table.
- Ajoutez les objets TableInfo précédents à un nouvel objet SchemaInfo .
- Obtenez une référence à un objet ShardMapManager et appelez GetSchemaInfoCollection.
- Ajoutez SchemaInfo à SchemaInfoCollection, en fournissant le nom du mappage de partitions.
Le script SetupSampleSplitMergeEnvironment.ps1 contient un exemple de cette opération.
Le service de fractionnement/fusion ne crée pas la base de données cible (ou le schéma pour les tables de la base de données) à votre place. Ils doivent être créés au préalable avant d’envoyer une demande au service.
Erreurs connues
Le message suivant peut apparaître lors de l’exécution des exemples de scripts PowerShell :
Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
Cette erreur signifie que votre certificat TLS/SSL n’est pas correctement configuré. Suivez les instructions de la section Connexion avec un navigateur web.
Si vous ne pouvez pas soumettre les demandes, vous pourriez voir ceci :
[Exception] System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'dbo.InsertRequest'.
Dans ce cas, vérifiez votre fichier de configuration, en particulier le paramètre pour WorkerRoleSynchronizationStorageAccountConnectionString
. Cette erreur indique généralement que le rôle de travail n’a pas pu initialiser avec succès la base de données de métadonnées à la première utilisation.
Contenu connexe
Vous n’utilisez pas encore d’outils de base de données élastique ? Consultez notre Guide de prise en main. Pour toute question, contactez-nous par le biais de la page de questions Microsoft Q&A sur SQL Database et, pour vos demandes de fonctionnalités, ajoutez de nouvelles idées ou votez pour les idées existantes sur le forum de commentaires SQL Database.