web-dev-qa-db-fra.com

Le moyen le plus rapide de synchroniser deux compartiments Amazon S3

J'ai un compartiment S3 avec environ 4 millions de fichiers prenant environ 500 Go au total. J'ai besoin de synchroniser les fichiers vers un nouveau compartiment (en fait, changer le nom du compartiment suffirait, mais comme ce n'est pas possible, je dois créer un nouveau compartiment, y déplacer les fichiers et supprimer l'ancien).

J'utilise la commande s3 sync D'AWS CLI et elle fait le travail, mais prend beaucoup de temps. Je voudrais réduire le temps pour que le temps d'arrêt du système dépendant soit minime.

J'essayais d'exécuter la synchronisation à partir de ma machine locale et de l'instance EC2 c4.xlarge Et il n'y a pas beaucoup de différence de temps.

J'ai remarqué que le temps nécessaire peut être quelque peu réduit lorsque je divise le travail en plusieurs lots à l'aide des options --exclude Et --include Et les exécute en parallèle à partir de fenêtres de terminal distinctes, c'est-à-dire.

aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "1?/*" 
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "2?/*" 
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "3?/*" 
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "4?/*" 
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "1?/*" --exclude "2?/*" --exclude "3?/*" --exclude "4?/*"

Puis-je faire autre chose pour accélérer encore plus la synchronisation? Un autre type d'instance EC2 Convient-il mieux à la tâche? Le fractionnement du travail en plusieurs lots est-il une bonne idée et existe-t-il quelque chose comme un nombre "optimal" de processus sync pouvant s'exécuter en parallèle sur le même compartiment?

Mise à jour

Je penche vers la stratégie de synchronisation des compartiments avant de supprimer le système, de faire la migration, puis de synchroniser à nouveau les compartiments pour copier uniquement le petit nombre de fichiers qui ont changé entre-temps. Cependant, l'exécution de la même commande sync même sur des compartiments sans aucune différence prend beaucoup de temps.

14
mrt

Vous pouvez utiliser EMR et S3-distcp. J'ai dû synchroniser 153 TB entre deux compartiments et cela a pris environ 9 jours. Assurez-vous également que les compartiments sont dans la même région, car vous obtenez également des coûts de transfert de données.

aws emr add-steps --cluster-id <value> --steps Name="Command Runner",Jar="command-runner.jar",[{"Args":["s3-dist-cp","--s3Endpoint","s3.amazonaws.com","--src","s3://BUCKETNAME","--dest","s3://BUCKETNAME"]}]

http://docs.aws.Amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html

http://docs.aws.Amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-commandrunner.html

9
strongjz

En variante de ce que OP fait déjà ..
On pourrait créer une liste de tous les fichiers à synchroniser, avec aws s3 sync --dryrun

aws s3 sync s3://source-bucket s3://destination-bucket --dryrun
# or even
aws s3 ls s3://source-bucket --recursive

En utilisant la liste des objets à synchroniser, divisez le travail en plusieurs aws s3 cp ... commandes. De cette façon, "aws cli" ne sera pas simplement suspendu, tout en obtenant une liste de candidats à la synchronisation, comme c'est le cas lorsque l'on démarre plusieurs tâches de synchronisation avec --exclude "*" --include "1?/*" arguments de type.

Lorsque tous les travaux de "copie" sont terminés, une autre synchronisation peut valoir la peine, pour faire bonne mesure, peut-être avec --delete, si l'objet peut être supprimé du compartiment "source".

Dans le cas de compartiments "source" et "destination" situés dans différentes régions, il est possible d'activer la réplication des compartiments cross-region , avant de commencer à synchroniser les compartiments.

6
anapsix

Contexte: les goulots d'étranglement de la commande de synchronisation répertorient les objets et copient les objets. La liste des objets est normalement une opération en série, bien que si vous spécifiez un préfixe, vous pouvez lister un sous-ensemble d'objets. C'est la seule astuce pour la paralléliser. La copie d'objets peut se faire en parallèle.

Malheureusement, aws s3 sync ne fait aucune parallélisation et ne prend même pas en charge la liste par préfixe, sauf si le préfixe se termine par / (c'est-à-dire qu'il peut lister par dossier). C'est pourquoi c'est si lent.

s3s3mirror (et de nombreux outils similaires) parallélise la copie. Je ne pense pas qu'il (ou tout autre outil) parallélise la liste des objets car cela nécessite une connaissance a priori de la façon dont les objets sont nommés. Cependant, il prend en charge les préfixes et vous pouvez l'invoquer plusieurs fois pour chaque lettre de l'alphabet (ou ce qui est approprié).

Vous pouvez également créer le vôtre à l'aide de l'API AWS.

Enfin, le aws s3 sync la commande elle-même (et tout autre outil d'ailleurs) devrait être un peu plus rapide si vous la lancez dans une instance dans la même région que votre compartiment S3.

2

40100 objets 160 Go ont été copiés/synchronisés en moins de 90 secondes

suivez les étapes ci-dessous:

step1- select the source folder
step2- under the properties of the source folder choose advance setting
step3- enable transfer acceleration and get the endpoint 

Configurations AWS une seule fois (pas besoin de répéter cela à chaque fois)

aws configure set default.region us-east-1 #set it to your default region
aws configure set default.s3.max_concurrent_requests 2000
aws configure set default.s3.use_accelerate_endpoint true

enter image description here

options: -

--delete: cette option supprimera le fichier à destination s'il n'est pas présent dans la source

Commande AWS à synchroniser

aws s3 sync s3://source-test-1992/foldertobesynced/ s3://destination-test-1992/foldertobesynced/ --delete --endpoint-url http://soucre-test-1992.s3-accelerate.amazonaws.com 

coût d'accélération du transfert

https://aws.Amazon.com/s3/pricing/#S3_Transfer_Acceleration_pricing

ils n'ont pas mentionné de prix si les compartiments sont dans la même région enter image description here

2
Pruthvi Raj