J'ai 2 serveurs Web, avec la possibilité d'avoir à ajouter plus de serveurs en cours de route. En ce moment, je garde ces serveurs synchronisés en utilisant lsyncd + csync2. Cela fonctionne bien en termes de performances car tous les fichiers sont sur les deux serveurs (aucun accès réseau requis pour ouvrir les fichiers localement), mais pas si bien dans d'autres cas.
Un exemple de ceci est si je supprime un fichier sur le serveur 1 et télécharge immédiatement un nouveau fichier sur le serveur 1 qui porte le même nom. Le fichier serait alors supprimé du serveur 2 entre-temps, entraînant la suppression du fichier nouvellement téléchargé sur le serveur 1 car le serveur 2 envoie l'événement de suppression au serveur 1 pour terminer le "cercle de mise à jour".
Je ne peux m'empêcher de penser qu'il doit y avoir une meilleure façon de garder les serveurs synchronisés. J'ai regardé GlusterFS, et je vois qu'une configuration où tous les fichiers sont répliqués sur tous les serveurs est déconseillée. Cependant, j'exécute des systèmes CMS comme Drupal sur ces serveurs. De tels systèmes CMS ouvrent souvent un certain nombre de fichiers, et je crains qu'un trafic réseau trop important pour mettre la main sur ces fichiers ne ralentisse les demandes.
Serait-ce une idée de chercher à remplacer lsyncd + csync2 par GlusterFS configuré pour répliquer tous les fichiers sur tous les nœuds, ou est-ce une mauvaise idée?
la source
Réponses:
BitTorrent Sync peut faire l'acte pour vous. Je l'utilise pour garder les fichiers synchronisés entre quelques serveurs internes de ma maison et cela fonctionne à merveille. L'autre chose à laquelle vous devrez penser est la base de données backend lorsque votre application utilise un CMS. Assurez-vous qu'il y a une réplication MySQL en cours, ou quelque chose de ce genre.
la source
Gluster résoudrait le problème que vous rencontrez, car il peut contenir les verrous, propager les modifications - supprimer le fichier sur tous les autres nœuds, mais il peut ajouter une latence supplémentaire qui peut être un problème pour un serveur Web. L'alternative suivante est DRBD + OCFS2 ou GFS, mais c'est probablement plus complexe car avec gluster vous utilisez le système de fichiers sous-jacent - il ne fonctionne pas au niveau du bloc, donc si les serveurs ne sont pas synchronisés, ce n'est pas trop difficile à réparer, les fichiers peuvent ne vous corrompez pas si facilement à cause de cerveaux séparés, etc ...
Nous l'utilisons pour un serveur de messagerie et il est assez lent pour les répertoires contenant beaucoup de fichiers. Vous devez absolument tout tester avant de déployer. Je teste actuellement le montage NFS car il fonctionne mieux pour les petits fichiers.
la source
GlusterFS est difficile à déployer. Pour les données Web, le niveau de synchronisation des fichiers comme Unison est beaucoup plus facile à déployer et à entretenir.
DRBD est une solution parfaite pour garder la synchronisation des données au niveau du bloc. Mais vous devez les formater dans un format spécial comme OCFS2 ou quelque chose de similaire.
la source
Pourquoi n'utilisez-vous pas un outil comme une marionnette ? Écrivez une fois dans une source et une fois prêt, déployez-le sur les cibles en utilisant "marionnette" ou mcolletive. C'est bien documenté. Et vous pouvez facilement ajouter des serveurs plus tard si nécessaire.
Vous pouvez également compter sur des outils utilisant inotify, comme lsyncd, travaillant au niveau du noyau. Il surveille les modifications dans un dossier et déclenche une synchronisation. Mais si un outil dédié à la synchronisation de fichiers sur un cluster comme csync2 ne suffit pas, je ne sais pas ce que ce sera.
Juste pour être sûr, les modifications se produisent-elles également sur le serveur 2 ou uniquement sur le serveur 1?
la source