Synchronisation de millions de fichiers entre deux serveurs Linux


10

J'ai un serveur qui exporte un répertoire contenant environ 7 millions de fichiers (principalement des images) de son disque local vers les clients réseau via NFS .

J'ai besoin d'en ajouter un deuxième pour le bien de HA, et de le garder synchronisé avec le premier avec aussi peu de delta entre les deux que possible.

La recherche suggère d'utiliser lsyncd ou d'autres solutions basées sur inotify pour cela, mais étant donné le nombre de fichiers créant les montres inotify prend une éternité. Même chose pour rsync .

D'autres solutions possibles semblent être drdb , ou des systèmes de fichiers en cluster tels que ceph ou glusterfs , mais je n'ai aucune expérience avec ceux-ci et je ne sais pas lequel serait le plus approprié et bien gérer ces nombreux fichiers tout en offrant des performances décentes.

Notez que l'activité est principalement lue avec peu d'écriture.


2
DRDB fonctionne bien et est simple à configurer et à comprendre dans une configuration de cluster à 2 machines; cependant, il ne sera pas mis à l'échelle dans un avenir proche. Il pourrait également y avoir d'autres approches sur le sujet. highscalability.com/blog/2012/6/20/…
Rui F Ribeiro

Avez-vous essayé d'exécuter rsyncen mode démon? Cela accélérera la génération initiale de la liste de fichiers lors de l'exécution de la rsynccommande, mais consommera beaucoup de RAM en fonction de la quantité de fichiers.
Thomas

combien de retard pouvez-vous tolérer? si vous pouvez tolérer quelques minutes (ou plus), en utilisant btrfsou zfspeut être une option, combinée avec un travail cron pour créer des snapsnots et / zfs sendou btrfs sendles sur le serveur de sauvegarde. beaucoup plus rapide et une charge de travail beaucoup plus légère (pour les machines émettrices et réceptrices) que rsync car le snapshot + send n'a pas besoin de comparer les horodatages ou les sommes de contrôle des fichiers.
cas

BTW, avec ceph, vous avez également la possibilité de l'utiliser comme magasin d'objets (par exemple, comme s3 d'Amazon ou Swift d'Openstacks) au lieu d'un système de fichiers. En fait, le fs de ceph est en fait superposé sur son magasin d'objets.
cas

@Thomas: l' rsync -autilisation du démon (sur la source) prend 200 minutes, ce qui est plus que ce qui est acceptable. @cas: btrfs sendça vaut peut-être le coup, je vais y jeter un œil. Je ne peux pas passer à un magasin d'objets car je ne suis pas le développeur de l'application qui utilise les fichiers.
user60039

Réponses:


1

Je suis enclin à suggérer une réplication qui est indépendante des données, comme drbd. Le grand nombre de fichiers va faire en sorte que tout ce qui s'exécute à un niveau supérieur au "stockage en bloc" passe un temps excessif à parcourir l'arborescence - comme vous l'avez constaté en utilisant rsync ou en créant des montres inotify.

La version courte de mon histoire personnelle le confirme: je n'ai pas utilisé Ceph, mais je suis sûr que ce n'est pas dans leur cible de marché principale en raison de sa similitude avec Gluster. J'essaie cependant de mettre en œuvre ce type de solution avec Gluster depuis plusieurs années. Il a été opérationnel la plupart du temps, bien que plusieurs mises à jour de versions majeures, mais je n'ai pas eu de problèmes sans fin. Si votre objectif est plus de redondance que de performances, Gluster n'est peut-être pas une bonne solution. En particulier, si votre modèle d'utilisation a beaucoup d'appels stat (), Gluster ne réussit pas vraiment avec la réplication. Cela est dû au fait que les appels de statistiques aux volumes répliqués vont à tous les nœuds répliqués (en fait des "briques", mais vous n'aurez probablement qu'une seule brique par hôte). Si vous disposez d'une réplique bidirectionnelle, par exemple, chaque stat () d'un client attend une réponse des deux briques pour s'assurer qu'il utilise les données actuelles. Ensuite, vous avez également la surcharge FUSE et le manque de mise en cache si vous utilisez le système de fichiers gluster natif pour la redondance (plutôt que d'utiliser Gluster comme backend avec NFS comme protocole et automounter pour la redondance, qui aspire toujours pour la raison stat ()) . Gluster se débrouille très bien avec des fichiers volumineux où vous pouvez diffuser des données sur plusieurs serveurs; la répartition et la répartition des données fonctionnent bien, car c'est vraiment à cela qu'elles servent. Et la réplication de type RAID10 plus récente est plus performante que les anciens volumes répliqués directement. Mais, d'après ce que je suppose être votre modèle d'utilisation, je le déconseille. Ensuite, vous avez également la surcharge FUSE et le manque de mise en cache si vous utilisez le système de fichiers gluster natif pour la redondance (plutôt que d'utiliser Gluster comme backend avec NFS comme protocole et automounter pour la redondance, qui aspire toujours pour la raison stat ()) . Gluster se débrouille très bien avec des fichiers volumineux où vous pouvez diffuser des données sur plusieurs serveurs; la répartition et la répartition des données fonctionnent bien, car c'est vraiment à cela qu'elles servent. Et la réplication de type RAID10 plus récente est plus performante que les anciens volumes répliqués directement. Mais, d'après ce que je suppose être votre modèle d'utilisation, je le déconseille. Ensuite, vous avez également la surcharge FUSE et le manque de mise en cache si vous utilisez le système de fichiers gluster natif pour la redondance (plutôt que d'utiliser Gluster comme backend avec NFS comme protocole et automounter pour la redondance, qui aspire toujours pour la raison stat ()) . Gluster se débrouille très bien avec des fichiers volumineux où vous pouvez diffuser des données sur plusieurs serveurs; la répartition et la répartition des données fonctionnent bien, car c'est vraiment à cela qu'elles servent. Et la réplication de type RAID10 plus récente est plus performante que les anciens volumes répliqués directement. Mais, d'après ce que je suppose être votre modèle d'utilisation, je le déconseille. qui suce toujours pour la raison stat ()). Gluster se débrouille très bien avec des fichiers volumineux où vous pouvez diffuser des données sur plusieurs serveurs; la répartition et la répartition des données fonctionnent bien, car c'est vraiment à cela qu'elles servent. Et la réplication de type RAID10 plus récente est plus performante que les anciens volumes répliqués directement. Mais, d'après ce que je suppose être votre modèle d'utilisation, je le déconseille. qui suce toujours pour la raison stat ()). Gluster se débrouille très bien avec des fichiers volumineux où vous pouvez diffuser des données sur plusieurs serveurs; la répartition et la répartition des données fonctionnent bien, car c'est vraiment à cela qu'elles servent. Et la réplication de type RAID10 plus récente est plus performante que les anciens volumes répliqués directement. Mais, d'après ce que je suppose être votre modèle d'utilisation, je le déconseille.

Gardez à l'esprit que vous devrez probablement trouver un moyen d'avoir des élections principales entre les machines ou implémenter un verrouillage distribué. Les solutions de périphériques de blocs partagés nécessitent un système de fichiers compatible avec plusieurs maîtres (comme GFS), ou nécessitent qu'un seul nœud monte le système de fichiers en lecture-écriture. Les systèmes de fichiers n'aiment généralement pas lorsque les données sont modifiées au niveau du périphérique de bloc en dessous. Cela signifie que vos clients devront être en mesure de dire quel est le maître et y diriger les demandes d'écriture. Cela peut s'avérer être une grosse nuisance. Si GFS et toute son infrastructure de support sont une option, drbd en mode multi-maître (ils l'appellent "dual primary") pourrait bien fonctionner. https://www.drbd.org/en/doc/users-guide-83/s-dual-primary-mode pour plus d'informations à ce sujet.

Quelle que soit la direction dans laquelle vous vous dirigez, vous êtes susceptible de constater que c'est toujours une assez grosse douleur à faire en temps réel sans simplement donner à une entreprise de SAN un camion d'argent.


Je suis dans les étapes initiales de la migration des commandes rsync dans cron vers l'utilisation d'un système de fichiers distribué. Si Gluster exécute stat () sur toutes les briques, je devrai peut-être le reconsidérer comme une solution.
Jesusaur

1
Ce n'est le cas que dans un système de fichiers répliqué; il fonctionne stat()sur toutes les briques qui ont des répliques du bloc spécifique que vous regardez. Par exemple, si vous avez une réplique à bandes 2x2, le stats'exécuterait sur les deux briques avec le bloc répliqué, mais pas sur les deux autres. Dans mon application avec beaucoup de petits fichiers (de l'ordre d'un million de fichiers sous 4K de données chacun), ni NFS ni FUSE n'ont fourni de bonnes performances sur les volumes répliqués. Et la géoréplication sur environ 20 machines était très peu fiable dans plusieurs configurations.
dannysauer

1
Votre kilométrage peut varier, mais je suis passé de Gluster partout (que j'utilisais exclusivement pour la réplication, pas pour toutes les autres choses vraiment cool que Gluster fait bien) à rsync sur les systèmes de fichiers natifs. :) J'envisage de passer à lsyncd ( github.com/axkibe/lsyncd ) maintenant au lieu de cron, donc je peux me rapprocher en temps réel sans la surcharge de Gluster.
dannysauer

0

Je suis passé de rsync à ceph avec l'aide de la configuration de Proxmox VE.

Maintenant, je gère 14 To dans un cluster avec réplication en direct. Depuis près de 4 ans.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.