2008-10-24 10 views
10

Tengo una gran cantidad de datos para mantener sincronizados en 4 o 5 sitios en todo el mundo, alrededor de medio terabyte en cada sitio. Esto cambia (ya sea agregados o cambios) en alrededor de 1.4 Gigabytes por día, y los datos pueden cambiar en cualquiera de los cuatro sitios.¿Cuál es la mejor manera de sincronizar grandes cantidades de datos en todo el mundo?

Un gran porcentaje (30%) de los datos son paquetes duplicados (tal vez JDK empaquetados), por lo que la solución debería incluir una forma de detectar el hecho de que existen tales cosas en la máquina local y agarrarlos en lugar de descargar desde otro sitio.

El control de las versiones no es un problema, esto no es una base de código per se.

Estoy interesado si hay alguna solución (preferiblemente de código abierto) que se acerque a tal cosa?

Mi script de bebé usando rsync ya no corta la mostaza, me gustaría hacer una sincronización más compleja e inteligente.

Gracias

Editar: Esta debe basarse UNIX :)

Respuesta

12

¿Has probado Unison?

He tenido buenos resultados con él. Básicamente es una rsync más inteligente, que tal vez es lo que quieres. Hay una lista que compara las herramientas de sincronización de archivos here.

+0

Esto es * casi * correcto, y me gusta especialmente el enlace al sitio web. Con Unison, primero no mira al sistema de archivos local para la solución, por ejemplo, en el directorio padre o en un directorio hermano (incluso me gustaría definir esto). Si el tamaño, el nombre, la hora del modificador, la suma de comprobación son iguales, tome eso en su lugar ... – Spedge

+0

¿Por qué no utiliza en su lugar enlaces para esto, en lugar de replicar estos JDK y otras cosas? No parece correcto preocuparse por duplicar cosas que ciertamente no necesitan duplicación. Unison sincronizará enlaces ... para que funcione, y le libere de algunas necesidades de espacio y algunos dolores de cabeza –

1

Usted tiene una gran cantidad de opciones:

  • Usted puede probar para establecer replicado DB para almacenar datos.
  • Utilice la combinación de rsync o lftp y scripts personalizados, pero eso no le conviene.
  • Uso git pases con compresiones max y sincronización entre ellos utilizando algunos scripts
  • Dado que la cantidad de datos es bastante grande, y probablemente importante, realice una cierta desarrollo a la medida de contratar a un experto;)
5

Suena como un trabajo para BitTorrent.

Para cada nuevo archivo en cada sitio, cree un archivo semilla bittorrent y colóquelo en un directorio centralizado accesible por la web.

Cada sitio luego descarga (a través de bittorrent) todos los archivos. Esto generará el intercambio de ancho de banda y la reutilización de copia local automática.

La receta real dependerá de su necesidad. Por ejemplo, puede crear 1 semilla de bittorrent para cada archivo en cada host, y establecer el tiempo de modificación del archivo de inicialización para que sea el mismo que el tiempo de modificación del archivo. Como lo hará a diario (¿por hora?), Es mejor usar algo como "hacer" para (re) crear archivos iniciales solo para archivos nuevos o actualizados.

Luego copia todos los archivos iniciales de todos los hosts a la ubicación centralizada ("directorio del rastreador") con la opción "sobrescribir solo si es más nuevo". Esto le proporciona un conjunto de semillas de torrent para todas las copias más recientes de todos los archivos.

Luego, cada host descarga todos los archivos iniciales (de nuevo, con "sobrescribir si hay una configuración más reciente") y comienza la descarga de bittorrent en todos ellos. Esto descargará/volverá a descargar todos los archivos nuevos/actualizados.

Rince y repite, todos los días.

Por cierto, no habrá "descarga de sí mismo", como dijo en el comentario. Si el archivo ya está presente en el host local, se verificará su suma de comprobación y no se realizará ninguna descarga.

+0

Me gusta esta idea. Torrenting ciertamente aclararía los problemas de ancho de banda, y descargar cosas de sí mismo sería genial. Sin embargo, una pregunta complementaria a esto sería ¿cómo puedo calcular lo que necesito sincronizar en un momento dado? Tendría que crear una lista de los cambios ... no estoy seguro si puedo hacer eso: S – Spedge

+0

La forma en que lo veo, se puede pensar en términos de las operaciones habituales de copiar/mover, sustituyendo bittorrent en lugar de archivo real transferencias. Voy a editar mi solución para reflejar esto. – ADEpt

2

¿Qué tal algo en la línea de Global Filesystem de Red Hat, por lo que toda la estructura se divide en todos los sitios en múltiples dispositivos, en lugar de tener todo replicado en cada lugar?

O tal vez un sistema de almacenamiento de red comercial como por ejemplo LeftHand Networks (descargo de responsabilidad: no tengo ni idea de costo, y no los he usado).

1

Echa un vistazo a super flexible .... es muy bueno, no lo he usado en un entorno a gran escala, pero en un sistema de 3 nodos parecía funcionar perfectamente.

Cuestiones relacionadas