2012-06-28 9 views
6

Voy a crear un servidor de archivos de gran tamaño, y necesito un consejo de comunidad de desbordamiento de pila para la elección del sistema de archivos (linux).¿El mejor sistema de archivos para servir archivos de 1GB usando nginx, bajo escritura moderada, lee rendimiento-sabio?

El servidor de archivos va a servir archivos estáticos de 1 a 2 GB (mayormente diferentes con cada solicitud) a través de Nginx, bajo constante escritura moderada en los discos (RAID5 SATA/7200 discos masivos). La relación de escritura a lectura es de aproximadamente 1: 5-10, por cada 1 byte escrito por segundo, se leen 5-10. Lo más importante para mí es el rendimiento de lectura, puedo vivir con escrituras más lentas.

¿Qué sistema de archivos Linux sería la mejor solución para esta tarea? Y por qué :) ¡Gracias!

Respuesta

0

Los archivos muy grandes tienden a no ser muy dependientes del sistema de archivos que utilice, los sistemas de archivos modernos (¡no FAT!) Hacen un buen trabajo al asignarlos en grandes cantidades contiguas de almacenamiento y así minimizar la latencia de búsqueda. Donde tiende a ver las diferencias entre ellos se encuentran en el rendimiento de archivos pequeños, la resistencia a la fragmentación en situaciones de falta de espacio, la concurrencia, etc. Almacenar archivos grandes es un problema comparativamente fácil, y dudo que vea diferencias medibles.

Pero como siempre: si realmente te importa, punto de referencia. No hay respuestas simples sobre el rendimiento del sistema de archivos.

+0

Así que hay una verdadera :(¿Alguna vez ha intentado suprimir archivos de gran tamaño en ext2-3 vs vs XFS JFS? Además, un vistazo al kernel-source habrían revelado, que los conductores pasan diferentes fs diferente tiempo en secciones críticas, también tienden a comportarse radicalmente diferentes bajo alta presión de IO. –

+0

Eliminar un archivo grande no era el caso de uso. Si tiene números, muéstreselos. Estoy de acuerdo con lo que escribí. –

+0

números? "Hay mentiras, malditas mentiras y luego puntos de referencia" Aún no he visto un punto de referencia sin ningún objetivo de marketing. Estaba hablando de mi experiencia y de la fuente de Linux disponible públicamente. Sin embargo, es ridículo el argumento de que "dudo que veas diferencias mensurables". –

4

Para proporcionar mejores resultados con contenido pesado de servicio, hay algo más que sintonizar. Por favor, eche un vistazo a Nginx core developer's comment a continuación:

  1. Desconectar sendfile, funciona mal en tales cargas de trabajo bajo Linux debido a ninguna capacidad de controlar ReadAhead (y por lo tanto, los bloques leídos del disco ).

    sendfile off;

  2. Uso grandes buffers de salida

    output_buffers 1 512k

  3. Trate de usar AIO para asegurar una mejor concurrencia de disco (y nota por debajo de Linux que necesita directio también), es decir, algo como esto

    aio on; directio 512;

Otras recomendaciones:

  1. Comprobar el intercambio de sistema de archivos no se utiliza

  2. sistema de archivos ext4, XFS -. Buenas para permitir data_writeback y monte noatime opciones

5

que alcanzaron 80 MB/s de rendimiento "de lectura aleatoria" por disco "real" (husillo). Aquí están mis resultados.

Por lo tanto, primero decida cuánto tráfico necesita presionar a los usuarios y cuánto espacio de almacenamiento necesita por servidor.

Puede omitir las instrucciones de configuración de disco que figuran a continuación, dado que ya tiene una configuración RAID5.

Tomemos como ejemplo un servidor dedicado de ancho de banda de 1 Gbps con discos de 3 * 2TB. Mantener primer disco dedicado al sistema operativo y tmp. Para otros 2 discos, puede crear una incursión de software (para mí, funcionó mejor que la incursión de hardware a bordo). De lo contrario, debe dividir sus archivos por igual en discos independientes. Idea es mantener tanto la carga de lectura/escritura en disco igual proporción. Software raid-0 es la mejor opción.

Nginx Conf Hay dos maneras de lograr alto nivel de rendimiento utilizando nginx.

  1. uso directio

    AIO en;
    directio 512; output_buffers 1 8m;

    "Esta opción requerirá una buena cantidad de ram" Se necesitan alrededor de 12-16 GB de ram.

  2. userland io

    output_buffers 1 2m;

    "asegúrese de que ha establecido readahead a 4-6MB para montar la incursión del software" blockdev --setra 4096/dev/md0 (o montaje de discos independientes)

    Este ajuste utilizará de manera óptima caché de archivos del sistema, y requiere mucho menos ram. Se necesitan alrededor de 8 GB de ram.

Notas comunes:

  • a mantener "SENDFILE fuera";

también es posible que el uso del acelerador de ancho de banda para permitir conexiones a través de 100s de ancho de banda disponible. Cada conexión de descarga usará 4 MB de memoria RAM activa.

 limit_rate_after 2m; 
     limit_rate 100k; 

Ambos solución anterior se escala fácilmente a 1k + usuarios simultáneos en el servidor 3 de disco. Suponiendo que tiene un ancho de banda de 1Gbps y que cada conexión se estrangula a 1Mb/ps Hay una configuración adicional necesaria para optimizar las escrituras en el disco sin afectar demasiado la lectura.

hacer todas las cargas en el disco del sistema operativo principal en un montaje say/tmpuploads. esto asegurará que no haya perturbaciones intermitentes mientras se realizan lecturas intensas. A continuación, mueva el archivo desde/tmpuploads usando el comando "dd" con oflag = direct. algo así como

dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k 
Cuestiones relacionadas