Estoy creando una aplicación que necesita distribuir un servidor de archivos estándar en algunos sitios a través de una WAN. Básicamente, cada sitio necesita escribir muchos archivos misceláneos de diferentes tamaños (algunos en el rango de los 100 MB, pero la mayoría pequeños), y la aplicación está escrita de tal manera que las colisiones no son un problema. Me gustaría tener un sistema configurado que cumpla con los siguientes requisitos:
- Cada sitio puede almacenar archivos en un "espacio de nombres" compartido. Es decir, todos los archivos aparecerían en el mismo sistema de archivos.
- Cada sitio no enviará datos a través de la WAN a menos que sea necesario. Es decir, habría almacenamiento local en cada lado de la WAN que se "fusionaría" en el mismo sistema de archivos lógico.
- Linux y Gratis ($$$) es un Plus
Básicamente, algo así como un recurso compartido NFS central cumpliría la mayoría de los requisitos, sin embargo, no permitiría que los datos escritos localmente permanezcan locales. Todos los datos de los lados remotos de la WAN se copiarían localmente todo el tiempo.
He examinado Lustre y he realizado algunas pruebas exitosas con él, sin embargo, parece distribuir archivos de manera bastante uniforme en el almacenamiento distribuido. He revisado la documentación y no he encontrado nada que automáticamente "prefiera" el almacenamiento local sobre el almacenamiento remoto. Incluso algo que fuera con el almacenamiento de latencia más bajo estaría bien. Funcionaría la mayor parte del tiempo, lo que cumpliría los requisitos de esta aplicación.
Algunas respuestas a algunas preguntas formuladas a continuación:
- Nodos de servidor: 2 o 3 para comenzar. Cada servidor tendría docenas de clientes de lectura / escritura simultáneos conectados.
- La topología WAN es de malla completa y confiable. (corporación grande, el costo no es tan limitante como la burocracia)
- Conmutación por error del cliente: en realidad no había pensado en hacer que la conmutación por error de los clientes (principalmente porque nuestra aplicación actual no hace esto en un solo sitio). Supuse que la respuesta práctica es que se espera que los servidores en cada sitio distribuido geográficamente sean puntos únicos de fallas para los clientes que atienden. Sin embargo, si está pensando en algo específico aquí, creo que sería bastante pertinente para la discusión.
- Roll-my-own: he pensado en rsync / unison, sin embargo, necesitaría un poco de lógica sofisticada para hacer que la parte "dinámica" de este trabajo funcione a la perfección. Es decir, el archivo parece ser local, pero solo se recupera a pedido.
- MS-DFS: Ciertamente parece ser algo que debería considerar. Mi principal problema podría ser no estar seguro acerca de la configuración / confiabilidad / rendimiento del servidor NFS en Windows, ya que muchos de los clientes que se conectan son clientes NFS.