La meilleure façon de partager un répertoire de téléchargement de fichiers sur des serveurs Web à échelle horizontale

9

J'essaie actuellement de spécifier un cluster évolutif horizontalement pour une application Web basée sur Drupal, qui ressemble à quelque chose comme le diagramme coloré ci-dessous:

L'équilibreur de charge implémente des sessions persistantes, de sorte qu'un utilisateur conserve son état une fois qu'il lui a été alloué un serveur avec lequel travailler.

Chaque serveur d'applications présente les éléments suivants:

  • vernis à l'avant
  • drupal 6 au milieu en cours d'exécution sur la pile de lampes
  • memcached à l'arrière

Les deux serveurs de base de données mysql sont sur une IP partagée, et ils sont dans un cluster HA avec DRBD et un battement de cœur, de sorte que la perte d'un ne fera pas tomber toute la plate-forme.

entrez la description de l'image ici

Il y a certaines choses dont je ne suis pas certain que j'apprécierais vos opinions:

Comment le stockage des fichiers doit-il évoluer horizontalement?

Je pense à utiliser NFS pour monter un répertoire de fichiers partagés sur chaque serveur d'application, donc un fichier téléchargé en une fois est disponible sur chacun d'eux. Je pense à NFS parce qu'il existe depuis des siècles, et je n'ai aucune expérience avec MogileFS ou GlusterFS, et c'est quelque chose que nous avons utilisé auparavant, donc nous le connaissons mieux.

Existe-t-il des directives à suivre pour déterminer le nombre de serveurs qu'il est judicieux de partager un répertoire sur NFS de cette façon?

Comment HA doit-il être fourni sur le stockage de fichiers partagé ici?

Un problème ici est que le serveur NFS est un point de défaillance unique.

Nous utilisons déjà Heartbeat et DRBD sur les serveurs Mysql, et je préférerais garder le nombre de technologies impliquées dans une pile aussi bas que possible - quels pièges y aurait-il si je devais utiliser la même stratégie HA pour le fichier serveurs aussi?

Une approche alternative

Il s'agit d'un site interne, avec un nombre limité d'utilisateurs qui utilisent occasionnellement le site de manière très intensive pendant de courtes périodes, lorsqu'une initiative interne est en cours. Donc, cela n'a pas besoin d'être mis à l'échelle infiniment comme un démarrage.

Étant donné que

  • il y a une limite supérieure au trafic que nous pouvons attendre
  • l'ajout de HA aux serveurs de fichiers et la conception d'une configuration à l'échelle horizontale comme celle-ci introduit une complexité considérable

J'envisage également de rendre les deux serveurs Web plus robustes afin qu'ils puissent gérer la charge de pointe entre eux, et de configurer l'unisson ou la synchronisation entre les deux sur une tâche cron, de sorte que:

  • leurs fichiers sont toujours synchronisés (les sessions persistantes gardent un utilisateur sur le même serveur sur lequel il a téléchargé un fichier)
  • en perdre un signifie que le site est toujours opérationnel.

Cela ressemble-t-il à un moyen possible de contourner d'éventuels maux de tête de complexité NFS / DRBD HA?

Merci,

C

Chris Adams
la source

Réponses:

3

Le serveur NFS devra au moins avoir la même disposition que le serveur MySQL, car ils ont essentiellement la même fonction et les limites (les deux sont des endroits où vous écrivez des données). Je n'aime pas l'idée de plusieurs écrivains sur NFS, cela rend la gestion des verrous de fichiers très complexe et mes expériences ne se sont pas très bien passées sur ce point.

Ma suggestion serait de concentrer toutes les écritures sur l'un des serveurs d'applications (peut-être un serveur d'applications dédié à l'écriture sur le serveur NFS) et plusieurs serveurs d'applications de lecture qui le montent en lecture seule (je sais que drupal a des miniatures dynamiques qui doivent être écrit, mais vous pouvez en garder le maximum sur un RO fs). Vous aurez besoin d'au moins un deuxième serveur NFS (l'utilisation de DRBD est le meilleur choix ici si vous n'avez pas de stockage partagé comme un SAN) pour assurer la haute disponibilité.

Enfin, jetez un œil à Gluster et aux autres systèmes distribués.

coredump
la source
0

Vous pouvez essayer mogileFS. Je l'avais utilisé dans nos projets. Il est facile à utiliser et à configurer et peut évoluer et il n'y a pas de points de défaillance uniques.

http://danga.com/mogilefs/

Sameer
la source
0

La meilleure façon est de trouver une bonne solution de stockage. Selon l'échelle et le type d'application, vous pouvez utiliser un bon NAS, avec prise en charge de NFS et d'au moins deux ports gigabit et des alimentations (consultez certaines solutions d'entreprise).

Si vous êtes vraiment sérieux au sujet de votre application, votre meilleur pari est de vérifier certaines solutions SAN, mais cela peut être très coûteux car cela nécessite un matériel spécial (cela peut être fait avec du matériel standard, mais cela peut être trop lent).

André S.
la source