Migrez les index d'Amazon OpenSearch Service vers Alibaba Cloud Elasticsearch à l'aide de snapshots. Ce guide utilise des clusters Elasticsearch version 7.1.0.0.
Fonctionnement
Cette solution indépendante du cloud repose sur le mécanisme de snapshot d'Elasticsearch. Utilisez l'outil Implémentation de la migration d'Alibaba Cloud pour migrer les index depuis AWS ES ou les données de snapshot depuis Tencent Cloud COS vers Alibaba Cloud OSS, puis restaurez-les depuis le référentiel OSS. Pour plus de détails, consultez la rubrique Sauvegarde et restauration manuelles.
Vous ne pouvez restaurer les snapshots que sur des clusters de même version ou d'une version ultérieure. Pour plus d'informations, consultez la page Compatibilité des snapshots.
Contexte
Architecture de référence pour cette migration :

Concepts
Elasticsearch : moteur de recherche et d'analyse distribué reposant sur REST. Cœur de la pile Elastic, il centralise le stockage des données destinées à la recherche et à l'analyse.
Kibana : outil de visualisation permettant de rechercher et d'analyser les données Elasticsearch.
Amazon OpenSearch Service : service géré par AWS qui fournit des API Elasticsearch et des fonctions d'analyse en temps réel.
Alibaba Cloud Elasticsearch : service géré basé sur la version open source d'Elasticsearch, conçu pour les scénarios d'analyse de données et de recherche. Il offre un contrôle d'accès de niveau entreprise, une surveillance de sécurité avec alertes ainsi que des rapports automatisés.
-
Snapshot et restauration : permet de créer des snapshots d'index individuels ou d'un cluster entier dans un référentiel distant (système de fichiers partagé, Amazon S3 ou HDFS) afin de les restaurer sur une version compatible d'Elasticsearch.
Un snapshot d'index créé en version 5.x peut être restauré en version 6.x.
Un snapshot d'index créé en version 2.x peut être restauré en version 5.x.
Un snapshot d'index créé en version 1.x peut être restauré en version 2.x.
Présentation de la solution
Étapes de migration :
-
Créez un index de référence.
Créez un référentiel de snapshot et associez-le à un compartiment Amazon Simple Storage Service (Amazon S3).
-
Prenez le premier snapshot complet des index que vous souhaitez migrer.
Ce snapshot est automatiquement stocké dans le compartiment Amazon S3 créé à l'étape précédente.
Sur Alibaba Cloud, créez un compartiment Object Storage Service (OSS) et enregistrez-le en tant que référentiel de snapshot pour votre cluster Alibaba Cloud Elasticsearch.
Utilisez ossimport pour transférer les données du compartiment Amazon S3 vers le compartiment Alibaba Cloud OSS.
Restaurez ce snapshot complet sur le cluster Alibaba Cloud Elasticsearch.
-
Traitez régulièrement les snapshots incrémentiels.
Répétez les étapes précédentes pour traiter et restaurer les snapshots incrémentiels.
-
Créez le dernier snapshot et effectuez le basculement du service.
Arrêtez tous les services susceptibles de modifier les données de l'index.
Prenez un dernier snapshot incrémentiel du domaine source Amazon OpenSearch Service.
Migrez le dernier snapshot incrémentiel vers OSS, puis restaurez-le sur le cluster Alibaba Cloud Elasticsearch.
Basculez vos services vers le cluster Alibaba Cloud Elasticsearch et vérifiez la migration.
Prérequis
Vérifiez les points suivants :
-
Un domaine Amazon OpenSearch Service avec Elasticsearch 7.1.0.0 est créé dans la région Singapour.
Consultez la page Création d'un domaine Amazon OpenSearch Service.
-
Un cluster Alibaba Cloud Elasticsearch version 7.1.0.0 est créé dans la région Chine (Hangzhou).
Consultez la rubrique Création d'un cluster Alibaba Cloud Elasticsearch.
-
Un compartiment OSS est créé.
Ce guide utilise un compartiment situé dans la région Chine (Hangzhou), avec une classe de stockage Standard et une liste de contrôle d'accès (ACL) privée. Tous les autres paramètres conservent leurs valeurs par défaut. Consultez la rubrique Création de compartiments.
Préparez l'index que vous souhaitez migrer. Cette rubrique utilise l'index nommé
moviesà titre d'exemple.
Prérequis pour les snapshots manuels sur AWS
Amazon OpenSearch Service crée automatiquement des snapshots quotidiens des shards d'index principaux, stockés dans un compartiment S3 préconfiguré pendant 14 jours sans frais supplémentaires. Ces snapshots permettent de restaurer un domaine, mais pas de migrer des données vers un nouveau domaine. Pour effectuer une migration, vous devez créer des snapshots manuels dans votre propre compartiment S3. Les frais de stockage S3 standard s'appliquent.
Pour créer et restaurer manuellement des snapshots d'index, vous avez besoin d'IAM et d'Amazon S3. Vérifiez que les prérequis suivants sont satisfaits avant de prendre un snapshot.
|
Prérequis |
Description |
|
Créer un compartiment Amazon S3 |
Stocke les snapshots manuels du domaine Amazon OpenSearch Service. |
|
Créer un rôle IAM |
Accorde des autorisations à Amazon OpenSearch Service. Spécifiez Amazon OpenSearch Service dans l'instruction |
|
Créer une stratégie IAM |
Spécifie les actions que le rôle IAM peut effectuer sur le compartiment S3. Attachez cette stratégie au rôle IAM. L'instruction Resource doit spécifier l'ARN du compartiment S3. |
-
Créer un compartiment Amazon S3
Créez un compartiment S3 pour stocker les snapshots manuels. Notez son ARN, car vous devrez l'utiliser dans :
L'instruction Resource de la stratégie IAM attachée au rôle IAM.
Le client Python utilisé pour enregistrer le référentiel de snapshot.
Exemple d'ARN de compartiment S3 :
arn:aws:s3:::eric-es-index-backups -
Créer un rôle IAM
Assurez-vous que le rôle IAM spécifie Amazon OpenSearch Service (
es.amazonaws.com) dans l'instructionServicede sa relation d'approbation :{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }Affichez les détails de la relation d'approbation dans la console IAM.
Dans la console IAM, sélectionnez Roles dans le volet de navigation de gauche, repérez le rôle cible, cliquez sur l'onglet Trust relationships, puis cliquez sur Edit trust relationship pour afficher et modifier la stratégie d'approbation.
RemarqueAmazon OpenSearch Service n'est pas disponible dans la liste déroulante Select role type lors de la création d'un rôle pour un service AWS. Sélectionnez AWS EC2, créez le rôle, puis modifiez la relation d'approbation pour remplacer
ec2.amazonaws.compares.amazonaws.com. -
Créer une stratégie IAM
Créez une stratégie IAM et attachez-la au rôle IAM. L'exemple suivant spécifie l'ARN du compartiment
eric-es-index-backups:{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::eric-es-index-backups" ] }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::eric-es-index-backups/*" ] } ] }Copiez le contenu de la stratégie dans l'éditeur de stratégies. Dans la console IAM, sélectionnez Policies dans le volet de navigation de gauche, cliquez sur le nom de la stratégie pour ouvrir la page des détails, choisissez l'onglet Permissions pour afficher le document JSON de la stratégie, et confirmez que la stratégie correspond à l'exemple précédent. Cliquez sur Edit policy pour apporter des modifications.
Vérifiez la stratégie. Une fois la stratégie créée, le résumé Policy summary indique que la stratégie eric-s3-policy accorde un accès limité (List, Read, Write) au service S3, que la ressource est Multiple et qu'il n'y a aucune condition de requête.
Attachez la stratégie IAM au rôle IAM. Dans la console IAM, sélectionnez Roles dans le volet de navigation de gauche, choisissez le rôle eric-iam-role-es, et vérifiez dans l'onglet Permissions que la stratégie eric-s3-policy est bien attachée.
Étape 1 : Enregistrement d'un référentiel de snapshot manuel
Enregistrez un référentiel de snapshot auprès d'Amazon OpenSearch Service avant de créer des snapshots manuels. Signez la demande d'enregistrement à l'aide des identifiants de l'utilisateur ou du rôle spécifié dans la relation d'approbation du rôle IAM. Consultez les Prérequis pour les snapshots manuels sur AWS.
Vous ne pouvez pas utiliser curl pour enregistrer un référentiel de snapshot, car cet outil ne prend pas en charge la signature des requêtes AWS. Utilisez plutôt l'exemple de client Python (register_snapshot_repository.py).
Téléchargez le fichier register_snapshot_repository.py.
-
Modifiez le fichier exemple du client Python.
Mettez à jour les valeurs mises en évidence pour qu'elles correspondent à votre configuration, puis enregistrez le fichier sous le nom snapshot.py.
Paramètres du fichier exemple du client Python :
Paramètre
Description
region
Région AWS où le référentiel de snapshot est créé.
host
Endpoint du domaine Amazon OpenSearch Service.
aws_access_key_id
ID de clé d'accès de votre identifiant IAM.
aws_secret_access_key
Clé d'accès secrète de votre identifiant IAM.
path
Chemin d'accès au référentiel de snapshot.
data
Doit inclure le nom et l'ARN du compartiment S3 créé pour le rôle IAM. Prérequis pour les snapshots manuels sur AWS.
Important-
Pour activer le chiffrement côté serveur avec des clés gérées par S3 pour le référentiel de snapshot, ajoutez
"server_side_encryption": trueau JSON des paramètres. -
Si le compartiment Amazon S3 se trouve dans la région ap-southeast-1, utilisez
"endpoint": "s3.amazonaws.com"au lieu de"region": "ap-southeast-1".
-
-
Installez boto-2.48.0.
L'exemple de client Python nécessite boto 2.x :
# wget https://pypi.python.org/packages/66/e7/fe1db6a5ed53831b53b8a6695a8f134a58833cadb5f2740802bc3730ac15/boto-2.48.0.tar.gz#md5=ce4589dd9c1d7f5d347363223ae1b970 # tar zxvf boto-2.48.0.tar.gz # cd boto-2.48.0 # sudo python setup.py install -
Exécutez le client Python pour enregistrer le référentiel de snapshot.
# python snapshot.py -
Dans la console Kibana de votre domaine Amazon OpenSearch Service, accédez à Dev Tools > Console et exécutez :
GET _snapshotLa réponse suivante est renvoyée :
{ "eric-snapshot-repository" : { "type" : "s3", "settings" : { "bucket" : "eric-es-index-backups", "region" : "ap-southeast-1", "role_arn" : "arn:aws:iam:::role/eric-iam-role-es" } } }
Étape 2 : Création et restauration du snapshot initial
-
Créez manuellement un snapshot sur Amazon OpenSearch Service.
RemarqueExécutez les commandes suivantes dans la console Kibana ou via curl depuis une ligne de commande Linux ou macOS.
-
Créez un snapshot nommé
snapshot_movies_1pour l'indexmoviesdans le référentieleric-snapshot-repository.PUT _snapshot/eric-snapshot-repository/snapshot_movies_1 { "indices": "movies" } -
Vérifiez l'état du snapshot.
GET _snapshot/eric-snapshot-repository/snapshot_movies_1La réponse suivante est renvoyée :
{ "snapshots" : [ { "snapshot" : "snapshot_movies_1", "uuid" : "BlgKLvgoSpSgwBhbD4hTWg", "version_id" : 7010099, "version" : "7.1.0", "indices" : [ "movies" ], "include_global_state" : true, "state" : "SUCCESS", "start_time" : "2019-02-28T02:20:44.591Z", "start_time_in_millis" : 1519786844591, "end_time" : "2019-02-28T02:20:46.236Z", "end_time_in_millis" : 1519786846236, "duration_in_millis" : 1645, "failures" : [], "shards" : { "total" : 5, "failed" : 0, "successful" : 5 } } ] } Dans la console Amazon S3, affichez les fichiers de snapshot. Une fois le snapshot créé, le compartiment S3 eric-es-index-backups contient les fichiers de snapshot, notamment le dossier indices, index-0, index.latest, meta-BlgKLvgoSpSgwBhbD4hTWg.dat et snap-BlgKLvgoSpSgwBhbD4hTWg.dat.
-
-
Transférez les données de snapshot d'Amazon S3 vers Alibaba Cloud OSS.
Consultez la rubrique Migration d'applications depuis Amazon S3 vers OSS.
Après le transfert, vérifiez les données de snapshot dans la console OSS.
Le compartiment OSS contient les fichiers de snapshot suivants : indices/ (dossier), incompatible-snapshots, index-0, index.latest, meta-BlgKLvgoSpSgwBhbD4hTWg.dat et snap-BlgKLvgoSpSgwBhbD4hTWg.dat.
-
Restaurez le snapshot sur le cluster Alibaba Cloud Elasticsearch.
-
Créez un référentiel de snapshot.
ImportantLors d'une migration de snapshot Elasticsearch, vous devez vous assurer que chaque cluster Elasticsearch utilise un référentiel ou un chemin dédié. Si plusieurs clusters partagent le même référentiel, la restauration des données peut échouer et entraîner une perte de données.
Dans la console Kibana du cluster Alibaba Cloud Elasticsearch de destination (Connexion à la console Kibana), accédez à Dev Tools > Console et créez un référentiel de snapshot portant le même nom :
PUT _snapshot/eric-snapshot-repository { "type": "oss", "settings": { "base_path": "my/snapshot/directory" "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com", "access_key_id": "your AccessKeyID", "secret_access_key": "your AccessKeySecret ", "bucket": "eric-oss-aws-es-snapshot-s3", "compress": true } } -
Vérifiez l'état du snapshot nommé
snapshot_movies_1.GET _snapshot/eric-snapshot-repository/snapshot_movies_1La réponse suivante est renvoyée :
{ "snapshots" : [ { "snapshot" : "snapshot_movies_1", "uuid" : "BlgKLvgoSpSgwBhbD4hTWg", "version_id" : 7010099, "version" : "7.1.0", "indices" : [ "movies" ], "include_global_state" : true, "state" : "SUCCESS", "start_time" : "2019-02-28T02:20:44.591Z", "start_time_in_millis" : 1519786844591, "end_time" : "2019-02-28T02:20:46.236Z", "end_time_in_millis" : 1519786846236, "duration_in_millis" : 1645, "failures" : [], "shards" : { "total" : 5, "failed" : 0, "successful" : 5 } } ] }RemarqueNotez les heures de début et de fin pour la migration de snapshot incrémentiel avec ossimport :
"start_time_in_millis": 1519786844591
"end_time_in_millis": 1519786846236
-
-
Restaurez le snapshot.
POST _snapshot/eric-snapshot-repository/snapshot_movies_1/_restore { "indices": "movies" }Vérifiez la disponibilité de l'index
movies:GET movies/_recoveryUne fois la restauration terminée avec succès, l'index
moviescontient trois documents, ce qui correspond au domaine Amazon OpenSearch Service. Sur la page Discover de Kibana, sélectionnez l'indexmoviespour vérifier la restauration du snapshot. La requête renvoie 3 documents de film (The Manchurian Candidate, Mars Attacks!, U.S. Marshals), confirmant que les données de l'index ont été restaurées avec succès.
Étape 3 : Création et restauration du dernier snapshot
-
Insérez des données dans l'index
moviesdu domaine Amazon OpenSearch Service.L'index
moviescontient déjà trois documents. Ajoutez-en deux autres.Après l'insertion des données, l'index
moviescontient 5 documents avec les valeurs _id 1, 2, 3, 4 et 5.Utilisez la commande
GET movies/_countpour vérifier le nombre de documents dans l'index. -
Créez manuellement un autre snapshot.
Créez un autre snapshot. Consultez la section Création manuelle d'un snapshot sur Amazon OpenSearch Service.
PUT _snapshot/eric-snapshot-repository/snapshot_movies_2 { "indices": "movies" }Vérifiez l'état du snapshot :
GET _snapshot/eric-snapshot-repository/snapshot_movies_2Affichez les fichiers répertoriés dans le compartiment Amazon S3.
Le compartiment S3 répertorie tous les fichiers du référentiel de snapshot. Les fichiers du nouveau snapshot snapshot_movies_2 incluent snap-CWhlF7ShQZaKQlJasPE70A.dat, index.latest, index-1 et meta-CWhlF7ShQZaKQlJasPE70A.dat.
-
Transférez les données de snapshot incrémentiel d'Amazon S3 vers Alibaba Cloud OSS.
Utilisez ossimport pour migrer les données de S3 vers OSS. Pour migrer uniquement les nouveaux fichiers, définissez
isSkipExistFilesur true dans local_job.cfg.Lorsque
isSkipExistFileest défini sur true, les objets sont ignorés si leursizeetLastModifiedTimecorrespondent. Lorsqu'il est défini sur false (valeur par défaut), les objets existants sont écrasés. Cette option n'est pas valide lorsquejobTypeestaudit.Après la migration, vérifiez la présence des nouveaux fichiers dans OSS.
Les nouveaux fichiers sont index-1, index.latest, meta-CWhIF7ShQZaKQUasPE70A.dat et snap-CWhIF7ShQZaKQUasPE70A.dat.
-
Restaurez le snapshot incrémentiel.
Suivez la procédure de restauration de snapshot décrite à l'Étape 2 : Création et restauration du premier snapshot. Fermez l'index
moviesavant la restauration, puis rouvrez l'indexmoviesensuite.-
Fermez l'index
movies.POST /movies/_close -
Vérifiez l'état de l'index
movies.GET movies/_stats -
Restaurez le snapshot incrémentiel.
POST _snapshot/eric-snapshot-repository/snapshot_movies_2/_restore { "indices": "movies" } -
Ouvrez l'index
movies.POST /movies/_open
Après la restauration, l'index
moviescontient5documents, ce qui correspond au domaine Amazon OpenSearch Service. -
Résumé
Migrez les données d'index d'Amazon OpenSearch Service vers Alibaba Cloud Elasticsearch à l'aide de snapshots. Fermez les index sur le cluster de destination avant la restauration pour empêcher toute écriture ou requête pendant la migration.
Ressources connexes :
FAQ
Pourquoi l'unicité du référentiel est-elle requise ?
Si plusieurs clusters Elasticsearch partagent le même référentiel de snapshot, les problèmes suivants peuvent survenir :
Conflits de métadonnées : plusieurs clusters opérant sur le même référentiel peuvent écraser ou corrompre les fichiers de métadonnées, empêchant l'identification correcte des snapshots.
Écrasement de données : les snapshots provenant de différents clusters peuvent s'écraser mutuellement, entraînant une perte ou une corruption des données.
Échecs de restauration : Elasticsearch ne peut pas déterminer quelles données appartiennent à quel cluster, ce qui entraîne l'échec des opérations de restauration ou la restauration de données incorrectes.
Pourquoi les restaurations de snapshot OSS échouent-elles ?
Cette erreur peut survenir si un nom d'objet de snapshot dans OSS contient un caractère spécial tel qu'une barre oblique (/).
Alibaba Cloud Elasticsearch ne prend pas en charge les noms d'objets contenant des caractères spéciaux lors de la restauration de snapshot OSS. Utilisez ossbrowser pour déplacer les données de snapshot vers un dossier portant un nom standard.