¿Sirve archivos estáticos con nginx sobre NFS?


9

Tengo un sitio web que recibe aproximadamente 7k solicitudes por segundo en un servidor nginx. Este servidor maneja reescrituras en un servidor Apache y también sirve archivos estáticos, imágenes, etc. directamente. Los archivos estáticos son la parte más importante allí con aproximadamente 5k solicitudes.

Con una actualización de arquitectura, pienso en usar un servidor de archivos central que exporta un directorio que contiene estos archivos estáticos a través de NFS. No habrá acceso de escritura a estos archivos, por lo que el directorio podría montarse de solo lectura en la máquina nginx. Mi principal preocupación es:

¿NFS es lo suficientemente rápido para esto? ¿Hay un límite en la cantidad de solicitudes que NFS puede manejar? ¿Hay algunas opciones "imprescindibles" cuando se va por este camino?

Bonificación: ¿hay otras alternativas para esta configuración además de NFS?

¡Gracias!


¿Sin acceso de lectura o "solo" acceso de lectura?
Pauska

¡Gracias! Solo acceso de lectura, sin acceso de escritura.
j0nes

2
7k solicitudes por segundo son ~ 6,048,00,000 solicitudes por día, si está ejecutando eso en un solo servidor NGINX, nosotros (y las compañías que usan grupos de servidores para la mitad de esa carga) nos encantaría saber su configuración.
Mancha

Respuestas:


2

Al configurar un servidor NFS central, introduce un único punto de falla en su diseño. Eso solo debería ser un factor decisivo. Si no, NFS puede ser lo suficientemente rápido para una carga como esta. Los factores críticos serán tener suficiente RAM para almacenar en caché los archivos, interconexiones de baja latencia (Gig-E o mejor) y sintonización (menos que la anterior).

También debe considerar usar rsync o una herramienta similar para mantener copias locales de las actualizaciones de los archivos estáticos en cada servidor web individual. Otra opción podría ser una solución de servidor SAN o NFS redundante (los cuales serán mucho más complicados y costosos que la idea rsync).


2
NFS no tiene que ser un SPoF
gWaldo

@gWaldo ¿Cómo se puede configurar exactamente "un servidor NFS central" y que no sea un SPoF?
Chris S

Lo haces al darte cuenta de que, como dijiste, un servidor NFS central es un SPoF, y en su lugar eliges implementar un clúster NFS. En realidad, no estoy en desacuerdo con usted ...
gWaldo

Gracias: aceptar esta solución porque creo que iré por la ruta rsync, evitando el punto único de falla (que debería ser mi principal preocupación).
j0nes

Es bastante sencillo implementar un servidor NFS replicado dual de alta disponibilidad utilizando GlusterFS y CTDB. En términos de rendimiento, mi clúster recibía aproximadamente 10k solicitudes por segundo y está funcionando muy bien. El único problema es que los servidores NFS necesitarán tener mucha RAM.
Alpha01

2

Uso cachefilesd (y un kernel de Linux reciente, con cachefs) para almacenar en caché los archivos NFS en un HD local. De esta manera, cada lectura en el nfs copiará el archivo a un directorio / var / cache / fs y las siguientes lecturas se entregarán desde allí, con el núcleo comprobando en el nfs si el contenido sigue siendo válido.

De esta manera, puede tener un NFS central, pero sin perder el rendimiento de los archivos locales.

Cachefilesd se encargará de la limpieza de archivos antiguos cuando el tamaño libre / inodes alcance un nivel configurado, por lo que puede servir datos poco comunes del NFS y solicitudes comunes de la HD

Por supuesto, también use un barniz para almacenar en caché las solicitudes más comunes y evitar que el nginx / NFS se publique en ese momento.

Aquí hay un pequeño howto de cachefilesd


1

La velocidad depende de muchos factores:

  • ¿Cómo se conectarán sus servidores contra el objetivo NFS? Un solo disco SAS de doble puerto puede utilizar 6 gbit / s de velocidad de transferencia. Tenga esto en cuenta si planea usar 1gig Ethernet (del cual puede restar un 20% de sobrecarga TCP).
  • ¿Qué tipo de caché obtendrá el servidor NFS? ¿Está utilizando un controlador de matriz de grado empresarial con mucho caché? Leer caché es clave en esta configuración
  • ¿Cuántos servidores van a acceder al mismo archivo simultáneamente? El bloqueo NFS puede doler gravemente

El límite de archivos abiertos a través de NFS es una limitación del sistema operativo host. FreeBSD tiene, por ejemplo, muchas opciones de ajuste diferentes para admitir una gran cantidad de archivos abiertos, pero depende de la cantidad de RAM en su servidor.

Una alternativa a un servidor de archivos central es usar sincronización / replicación entre sus servidores web (como sugiere Chris S). rsync o DRBD pueden ser una excelente opción rentable.


1

Aconsejaría contra NFS a menos que pongas algo de caché allí. El caché nginx es mejor que nada, pero Varnish es mejor.

Dicho esto, si su carga cambiara a un contenido más dinámico que estático, será más importante servir archivos de aplicaciones desde el disco local.

Si coloca NFS, asegúrese de tener redundancia.


Esto puede requerir un poco de cambio de arquitectura. Además de usar una capa de almacenamiento en caché como Varnish, también es una buena idea usar una configuración CDN de extracción de origen para todos los archivos estáticos que estarán en el recurso compartido NFS. Esto aliviará la carga que golpea el backend NFS.
Alpha01
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.