2012-07-08 16 views
7

Tengo un sitio web ahora que está utilizando 2 servidores, un servidor de aplicaciones y un servidor de base de datos, sin embargo la carga en el servidor de aplicaciones está aumentando, así que vamos a agregar un segundo servidor de aplicaciones.Mantener los archivos cargados sincronizados en varios servidores - PHP Linux

El problema que tengo es que el sitio web tiene usuarios que cargan archivos en el servidor. ¿Cómo obtengo los archivos cargados en ambos servidores?

No quiero almacenar imágenes directamente en una base de datos ya que nuestra aplicación ya es intensiva en la base de datos.

¿Hay alguna manera de sincronizar los servidores entre sí o hay algo más que pueda hacer?

Cualquier ayuda sería apreciada.

Gracias

EDIT: Estoy añadiendo los siguientes enlaces para las personas que me ayudaron a profundizar este argumento:

Synchronize Files on Multiple Servers y Keep Uploaded Files in Sync Across Multiple Servers - LAMP

Para todos leer este post NFS parece ser el mejor de los 2.

NFS lo hará mantenga los archivos sincronizados, pero también podría usar ftp to upload los archivos en todos los servidores, pero NFS parece el camino a seguir.

+3

No he marcado la publicación porque no estoy seguro, pero tal vez puedas tener mejor suerte en http://serverfault.com . Creo que encaja mejor, aunque una solución de 'programación' podría ser posible. – Zagorax

+0

Preguntaré allí también y si recibo una respuesta, la publicaré aquí para quienes la necesiten – Dfranc3373

+0

Aquí está el enlace a [serverfault] (http://serverfault.com/questions/405873/keep-uploaded-files -in-sync-across-multiple-servers-lamp/405892 # 405892) pregunta. También tienen alguna respuesta decente – Dfranc3373

Respuesta

4

tengo esta respuesta de fallo del servidor:

El curso de acción más apropiado en una situación como esta es para romper el recurso compartido de archivos en un servicio independiente de su propia. No duplique archivos si tiene una red que puede permitir que los archivos estén "en todas partes (casi) a la vez". Puede hacerlo a través de NFS/CIFS o mediante un protocolo de almacenamiento adecuado como iSCSI. Monte como almacenamiento local en el directorio apropiado. Dependiendo del rendimiento de su red y sus necesidades de almacenamiento, esto podría agregar un par de milisegundos indetectables al tiempo de carga de la página.

Así, utilizando NFS para compartir archivos del servidor funcionaría o

según lo declarado por @kgb puede especificar un solo servidor para contener todos los archivos cargados y tienen otros servidores tire de ese (sólo asegúrese de ejecutar un cron o algo para hacer una copia de seguridad del archivo)

+1

Esta es, de hecho, la mejor respuesta. Creo que NFS es la solución correcta. Puede usar crontab, pero de esa manera siempre tendrá algo de tiempo donde el archivo se almacena solo en un servidor. Con NFS funcionará perfectamente. También debe marcar su propia respuesta como aceptada aquí en SO, siempre que sea la que mejor se adapte a su problema y otras personas la encuentren fácilmente y no utilice un enfoque crontab/rsync que, en mi opinión, sea incorrecto. y redundante. – Zagorax

2

La mayoría de los sitios solucionan este problema utilizando un servidor de archivos designado por un tercero como Amazon S3 para las cargas del usuario.

1

Puede usar el servidor db para el almacenamiento ... No en el db quiero decir, tener un servidor web funcionando allí también. No va a aumentar mucho la carga de la CPU, pero va a requerir un mejor canal.

5

Esta es una pregunta para serverfault.
De todos modos, creo que definitivamente deberías considerar entrar en la "nube". Sincronizar las cargas de un servidor a otro simplemente no es confiable: no tiene idea de qué tipo de errores puede obtener y por qué puede obtenerlos. Además, el proceso de sincronización cargará ambos servidores. Para mí, la solución adecuada es ir a la nube.

en caso de que eligió el método de sincronización que tiene un par de soluciones:

  1. Uso rsync para sincronizar los archivos que necesita entre los servidores.
  2. Use crontab para sincronizar los archivos cada X minutos/horas/días.
  3. Copiar los archivos tras algún acontecimiento (usuario de inicio de sesión, etc.)
2

Otra respuesta podría ser el uso de una pieza de software llamada BTSync, es muy fácil de instalar y usar y podría permitirle mantener fácilmente los archivos en sincroniza entre tantos servidores como necesites. Solo requiere 3 comandos de terminal para instalar y es muy eficiente.

Take a look here


and here

1

que podría hacerlo con rsync .. personas han sugerido el uso de NFS .. pero de esa manera crear un punto de fallo ... si el servidor NFS baja ... tus servidores están dañados ... corrígeme si estoy equivocado

Cuestiones relacionadas