Comment copyr un grand nombre (> 1 million) de petits files entre deux servers

J'ai besoin de migrer environ 1 To de données comprenant des files plus petits (la plupart sous 100KB) vers un autre server. Je n'ai même pas complètement énuméré les files, mais les estimations se situent entre 1 à 2 millions.

La copy initiale utilisant SCP a pris une semaine. Maintenant, nous devons synchroniser les changements. Des centaines de milliers de files sont ajoutés tous les jours.

J'ai essayé d'utiliser rsync (v3) mais ça prend trop de time. Au moment où il finira, nous reviendrons à l'indisponibilité des données.

J'ai vu des questions similaires ici, mais elles sont un peu plus anciennes et se requestnt s'il existe de nouveaux outils pour aider à ce process.

Les problèmes sont plus compliqués par datatables source sur un système iSCSI partagé avec de mauvaises performances de lecture.

La dernière stratégie peut être de refaire la migration des données et de faire en sorte que les développeurs rédigent un outil permettant de consigner tous les nouveaux files ajoutés lors du process de migration. La structure du directory désactive un identifiant unique est très large et profonde, de sorte que de nouveaux files sont dispersés dans cette structure et la réécriture de l'application pour mettre de nouveaux files dans un directory spécifique ne fonctionnera pas.

Toutes les stratégies ont été appréciées.

OS est RHEL 5 allant à RHEL 6.

Je serais tenté de répondre "arrêtez d'abuser du système de files en le traitant comme une database" mais je suis sûr que cela ne vous aidera pas beaucoup;)

Tout d'abord, vous devez comprendre que si votre limitation est dans la bande passante disponible en lecture, il n'y a rien que vous pouvez faire pour améliorer les performances en utilisant une simple command de synchronisation. Dans ce cas, vous devrez split datatables lorsqu'elles sont écrites soit en modifiant la façon dont les files sont créés (ce qui signifie, comme vous l'avez deviné correctement, en demandant aux développeurs de modifier le programme source) ou en utilisant un produit qui le fait Le géo-miroir (comme, par exemple, double-prise : vérifiez que je suis sûr que vous findez des solutions de rechange, ce n'est qu'un exemple).

Dans des cas similaires, la principale cause du problème n'est généralement pas la donnée du file, mais plutôt l'access aux méta-données. Votre première stratégie sera donc de split la charge en process multiples qui agissent sur (complètement) des directorys différents: cela devrait aider le système de files à vous fournir les méta-données dont vous avez besoin.

Une autre stratégie consiste à utiliser votre système de sauvegarde pour cela: rejouez vos dernières sauvegardes incrémentielles sur la cible pour synchroniser la database.

Enfin, il existe d'autres stratégies exotiques qui peuvent être appliquées dans des cas spécifiques. Par exemple, j'ai résolu un problème similaire sur un site Windows en écrivant un programme qui a chargé les files dans le système de files toutes les quelques minutes, ce qui a permis de nettoyer le FS.

Je ne pense pas que tout a changé. Si vous pouvez quiesce datatables sur le système source, je pense qu'une certaine variante du goudron sera la plus rapide. Sinon, rsync est toujours la meilleure manière, en vous assurant d'utiliser le commutateur de files entiers et un algorithm de compression à faible intensité de processeur (p. Ex. Arcfour). Avez-vous une option pour effectuer une copy au niveau du bloc? Vous mentionnez le stockage iSCSI. Le nouveau système dispose-t-il également d'un stockage iSCSI?

Cela se fait par étapes:

1) transistors initiaux à l'aide de scp 2) quelques données affinées avec rsync 3) les développeurs écrivent un script pour extraire les files ajoutés depuis l'étape 1 vers le système 4) transmettront datatables du server d'origine au nouveau server pendant le changement de dns 5) modifiez les dns et obtenez débarrassé de la sous-exécution de services iSCSI partagés.