La mejor manera de compartir un directorio de carga de archivos en servidores web de escala horizontal

9

Actualmente estoy tratando de especificar un clúster escalable horizontalmente para una aplicación web basada en drupal, que se parece a un diagrama colorido a continuación:

El equilibrador de carga implementa sesiones fijas, por lo que un usuario mantiene el estado una vez que se le ha asignado un servidor para trabajar.

Cada servidor de aplicaciones tiene lo siguiente:

  • barniz en la parte delantera
  • Drupal 6 en el medio que se ejecuta en la pila de lámparas
  • Memcached en la parte posterior

Los dos servidores de bases de datos mysql están en una IP compartida, y están en un clúster HA con DRBD, y escuchan, de modo que perder uno no derribará toda la plataforma.

ingrese la descripción de la imagen aquí

Hay algunas cosas de las que no estoy seguro que agradecerían sus opiniones:

¿Cómo debe escalar el almacenamiento de archivos horizontalmente?

Estoy pensando en usar NFS para montar un directorio de archivos compartidos en cada servidor de aplicaciones, por lo que un archivo cargado en un lugar está disponible en todos ellos. Estoy pensando en NFS porque ha existido durante años, y no tengo experiencia con MogileFS o GlusterFS, y es algo que hemos usado antes, por lo que estamos más familiarizados con él.

¿Hay alguna pauta a seguir para determinar cuántos servidores es aconsejable compartir un directorio a través de NFS de esta manera?

¿Cómo se debe proporcionar HA en el almacenamiento de archivos compartidos aquí?

Un problema aquí es que el servidor NFS es un único punto de falla.

Ya estamos usando Heartbeat y DRBD en los servidores Mysql, y preferiría mantener la cantidad de tecnologías involucradas en una pila lo más baja posible: ¿qué inconvenientes habría si usara la misma estrategia de HA para el archivo? servidores también?

Un enfoque alternativo

Esto es para un sitio interno interno, con un número finito de usuarios que ocasionalmente usan el sitio de manera muy intensiva por períodos cortos, cuando se activa una iniciativa interna. Entonces, esto no necesita escalar infinitamente como un inicio.

Dado que

  • hay un límite superior para el tráfico que podemos esperar
  • agregar agregar HA a los servidores de archivos y diseñar una configuración para escalar horizontalmente de esta manera introduce una complejidad considerable

También estoy considerando hacer que los dos servidores web sean más robustos para que puedan manejar la carga máxima entre ellos, y configurar unísono o rsync entre los dos en un trabajo cron, de modo que:

  • sus archivos aún están sincronizados (las sesiones fijas mantienen a un usuario en el mismo servidor en el que cargaron un archivo)
  • perder uno significa que el sitio aún está operativo.

¿Suena esto como una posible forma de evitar posibles dolores de cabeza de complejidad NFS / DRBD HA?

Gracias,

C

Chris Adams
fuente

Respuestas:

3

El servidor NFS tendrá que tener al menos la misma provisión que el servidor MySQL, ya que tienen básicamente la misma función y limitaciones (ambos son lugares donde se escriben los datos). No me gusta la idea de múltiples escritores para NFS, hace que sea muy complejo administrar bloqueos de archivos y mis experiencias no fueron muy bien en ese punto.

Mi sugerencia sería concentrar todas las escrituras en uno de los servidores de aplicaciones (tal vez tener un servidor de aplicaciones dedicado a escribir en el servidor NFS) y varios servidores de aplicaciones de lector montándolo solo como lectura (sé que drupal tiene algunas miniaturas dinámicas que necesitan estar escrito, pero puedes mantenerlo al máximo en un RO fs). Necesitará al menos un segundo servidor NFS (usar DRBD es la mejor opción aquí si no tiene un almacenamiento compartido como una SAN) para garantizar HA.

Por último, eche un vistazo a Gluster y otros sistemas distribuidos.

volcado de memoria
fuente
0

Puedes probar mogileFS. Lo había usado en uno de nuestros proyectos. Es fácil de usar y configurar, puede escalar y no hay puntos únicos de falla.

http://danga.com/mogilefs/

Sameer
fuente
0

La mejor manera es encontrar una buena solución de almacenamiento. Dependiendo de la escala y el tipo de aplicación, puede usar un buen NAS, con soporte para NFS y al menos dos puertos gigabit y fuentes de alimentación (consulte algunas soluciones empresariales).

Si realmente toma en serio su aplicación, su mejor opción es verificar algunas soluciones SAN, pero esto puede ser muy costoso ya que requiere hardware especial (se puede hacer con hardware estándar pero puede ser demasiado lento).

André S.
fuente