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.
rsync
en mode démon? Cela accélérera la génération initiale de la liste de fichiers lors de l'exécution de larsync
commande, mais consommera beaucoup de RAM en fonction de la quantité de fichiers.btrfs
ouzfs
peut être une option, combinée avec un travail cron pour créer des snapsnots et /zfs send
oubtrfs send
les 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.rsync -a
utilisation 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.Réponses:
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.
la source
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, lestat
s'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.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.
la source