Éviter SPOFS avec GlusterFS et Windows


10

Nous avons un cluster GlusterFS que nous utilisons pour notre fonction de traitement. Nous voulons y intégrer Windows, mais nous avons du mal à trouver comment éviter le point de défaillance unique qu'est un serveur Samba desservant un volume GlusterFS.

Notre flux de fichiers fonctionne comme ceci:

Flux de documents GlusterFS

  1. Les fichiers sont lus par un nœud de traitement Linux.
  2. Les fichiers sont traités.
  3. Les résultats (peuvent être petits, peuvent être assez grands) sont réécrits dans le volume GlusterFS au fur et à mesure.
    • Les résultats peuvent être écrits dans une base de données à la place, ou peuvent inclure plusieurs fichiers de différentes tailles.
  4. Le nœud de traitement récupère un autre travail hors de la file d'attente et GOTO 1.

Gluster est génial car il fournit un volume distribué, ainsi qu'une réplication instantanée. La résilience aux catastrophes est agréable! On aime ca.

Cependant, comme Windows n'a pas de client GlusterFS natif, nous avons besoin d'un moyen pour nos nœuds de traitement basés sur Windows d'interagir avec le magasin de fichiers de manière similaire et résiliente. La documentation de GlusterFS indique que la façon de fournir un accès à Windows consiste à configurer un serveur Samba au-dessus d'un volume GlusterFS monté. Cela conduirait à un flux de fichiers comme celui-ci:

GlusterFS doc-flow via Winders

Cela ressemble à un point de défaillance unique pour moi.

Une option consiste à regrouper Samba , mais cela semble être basé sur un code instable en ce moment et donc hors de fonctionnement.

Je cherche donc une autre méthode.

Quelques détails clés sur les types de données que nous diffusons:

  • La taille des fichiers d'origine peut aller de quelques Ko à des dizaines de Go.
  • La taille des fichiers traités peut aller de quelques Ko à un Go ou deux.
  • Certains processus, tels que creuser dans un fichier archive comme .zip ou .tar, peuvent provoquer BEAUCOUP d'écritures supplémentaires lorsque les fichiers contenus sont importés dans le magasin de fichiers.
  • Le nombre de fichiers peut atteindre des dizaines de millions.

Cette charge de travail ne fonctionne pas avec une configuration Hadoop de «taille d'unité de travail statique». De même, nous avons évalué les magasins d'objets de style S3, mais nous les avons trouvés manquants.

Notre application est écrite en Ruby et nous avons un environnement Cygwin sur les nœuds Windows. Cela peut nous aider.

Une option que j'envisage est un simple service HTTP sur un cluster de serveurs sur lesquels le volume GlusterFS est monté. Puisque tout ce que nous faisons avec Gluster est essentiellement des opérations GET / PUT, cela semble facilement transférable à une méthode de transfert de fichiers basée sur HTTP. Mettez-les derrière une paire d'équilibreurs de charge et les nœuds Windows peuvent HTTP PUT au contenu de leur petit cœur bleu.

Ce que je ne sais pas, c'est comment la cohérence de GlusterFS serait maintenue . La couche proxy HTTP introduit une latence suffisante entre le moment où le nœud de traitement signale que l'opération est terminée et l'écriture réellement visible sur le volume GlusterFS, que je crains que des étapes de traitement ultérieures ne tentent de récupérer le fichier. trouve le. Je suis presque sûr que l'utilisation de l' direct-io-mode=enableoption de montage vous aidera, mais je ne sais pas si cela suffit . Que dois-je faire d'autre pour améliorer la cohérence?

Ou devrais-je poursuivre une autre méthode entièrement?


Comme Tom l'a souligné ci-dessous, NFS est une autre option. J'ai donc fait un test. Étant donné que les fichiers mentionnés ci-dessus ont des noms fournis par le client que nous devons conserver et peuvent venir dans n'importe quelle langue, nous devons conserver les noms de fichiers. J'ai donc construit un répertoire avec ces fichiers:

Répertoire NFS avec de bons noms, sur le serveur

Lorsque je le monte à partir d'un système Server 2008 R2 avec le client NFS installé, j'obtiens une liste de répertoires comme celle-ci:

Répertoire NFS avec de mauvais noms, sur le client

De toute évidence, Unicode n'est pas conservé. Donc, NFS ne fonctionnera pas pour moi.


Je pense que l'équipe Samba considère ctdbstable et prête à l'emploi et la première phrase du lien que vous avez donné rend la seconde invalide car elle n'a jamais été mise à jour. J'avais l'intention d'établir cela, mais avant d'y arriver, j'ai basculé les travaux vers un environnement presque sans fenêtres.
Sven

Quelle version de Windows envisagez-vous d'utiliser?
Tom O'Connor

@ TomO'Connor Comme l'indique la balise, Windows 7. Cependant, Server 2008 R2 sera là à un moment donné.
sysadmin1138

Je suppose que Cygwin est hors de question?
Tom O'Connor

Réponses:


5

J'aime GlusterFS. En fait, j'adore GlusterFS. Tant que vous pouvez lui donner une bande passante dédiée, tout va bien.

L'une des meilleures choses à propos de GlusterFS est de l'utiliser avec NFS. L'une des choses surprenantes avec lesquelles j'ai travaillé récemment est NFS sur Windows 7 et 2k8R2 .

Voici ce que je ferais.

  1. Configurez 2 serveurs GlusterFS qui peuvent exporter NFS.
  2. Établissez un lien de pulsation entre eux.
  3. Déployer quelque chose comme Heartbeat / Pacemaker peut-être?
  4. Configurez une IP virtuelle (VIP) entre vos nœuds Gluster.
  5. Connectez les lecteurs réseau mappés de Windows Boxen à l'aide de l'adresse IP du VIP.
  6. Testez tout ce que vous pouvez imaginer.

Le clustering de Samba semble effrayant, et même si vous le faites, Samba n'a toujours pas la capacité de se comporter de manière fiable dans certains réseaux Windows (toute cette compatibilité avec le domaine NT4 ne semble jamais pouvoir dépasser cela).

Je pense que parce que chaque nœud gluster est en mode distribué et répliqué, vous devriez théoriquement pouvoir vous connecter à l' un et lui permettre de se soucier de déplacer vos données. En conséquence, le battement de coeur devrait être la chose qui fait la redirection et contrôle celui auquel vous parlez.

Quant à votre

  • Le nombre de fichiers peut atteindre des dizaines de millions.

Je vous suggère d'enquêter sur l'utilisation de XFS comme système de fichiers sous-jacent, car il est assez bon avec les gros systèmes de fichiers et pris en charge sous GlusterFS


J'utilise actuellement XFS! Nous avons regardé NFS3 il y a quelque temps pour gérer la fonction d'ingestion initiale, mais cela s'est avéré impossible en raison du manque de prise en charge Unicode. C'était avec le serveur NFS sous Windows. "会計 2012.xls" ne serait pas correct, et c'est très important. Mais ... je ne le savais pas sur 7 / R2, et ça vaut la peine d'enquêter!
sysadmin1138

J'ai donc fait un test. Malheureusement, cela n'a pas donné de bons résultats (voir la mise à jour sur la question). Le problème Unicode est bidirectionnel semble-t-il.
sysadmin1138

Bugger. Je suis donc à court d'idées. Je me demande si vous pourriez mettre Samba derrière un VIP.
Tom O'Connor

Groupe de travail oui, domaine (que nous utilisons) non. Ainsi, mon problème.
sysadmin1138

D'un autre côté, après avoir conversé avec les développeurs, conserver les noms de fichiers n'est pas aussi critique que prévu. Apparemment, tant que nous pouvons les obtenir dans la toute première étape (ingestion), la base de données gardera une trace des noms. NFS est donc une option valide ici (une fois que nous obtenons les bonnes versions de Windows).
sysadmin1138

1

Peut-être que vous pouvez penser à une solution HA ... utilisez un LDAP pour l'authentification (il peut être répliqué autant de serveurs LDAP que vous le souhaitez) et placez une IP pour écouter les services SMB.

Cette IP flottera sur le serveur principal. Lorsque cela est arrêté, Heartbeat peut démarrer les services sur le deuxième serveur.

Ces serveurs auront un point de montage pour glusterfs, puis toutes les données seront là.

C'est une solution possible et tellement simple à gérer ...

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.