Sincronización de archivos en tiempo real

22

¿Hay alguna herramienta disponible para sincronizar archivos entre dos o más servidores Linux inmediatamente después de escribir el archivo en el disco? El rsynccomando no me conviene en esto, porque si configuro rsyncen cron, el tiempo mínimo que puedo configurar es de 1 minuto, pero lo necesito en tiempo real.

Sourav
fuente
2
¿Necesita sincronización de un servidor de lectura-escritura a uno o más servidores de solo lectura, o necesita sincronización bidireccional (con propagación en ambas direcciones) o n-way? Si quieres dos / n-way, ¿cómo resuelves los conflictos?
Gilles 'SO- deja de ser malvado'

Respuestas:

18

No lo he usado yo mismo, pero lo leí recientemente. Hay un demonio llamado lsyncd, que supongo que hace exactamente lo que necesita.

Lea más sobre esto AQUÍ

MelBurslan
fuente
2
En mi humilde opinión, esta debería ser la respuesta aceptada. lsyncdusa inotify& debería ser el más rápido a nivel fs. Más en github.com/axkibe/lsyncd . Desde esa página: Lsyncd observa una interfaz de monitor de eventos de árboles de directorio local (inotify o fsevents). Agrega y combina eventos durante unos segundos y luego genera uno (o más) proceso (s) para sincronizar los cambios. Por defecto esto es rsync. Lsyncd es, por lo tanto, una solución de espejo en vivo liviana que es relativamente fácil de instalar, no requiere nuevos sistemas de archivos o dispositivos de bloque y no obstaculiza el rendimiento del sistema de archivos local.
SACHIN GARG
5

Inotify-tools

Proporcionar una interfaz para inotify, que consta de:

inotifywait

Este comando simplemente bloquea los eventos de inotify, por lo que es apropiado para su uso en scripts de shell. Puede ver cualquier conjunto de archivos y directorios, y puede ver recursivamente árboles de directorios completos.

inotifywatch

Este comando recopila estadísticas de uso del sistema de archivos y genera recuentos de cada evento inotify.

Pro Backup
fuente
4

Sincronización de archivos en tiempo real entre múltiples servidores en modo maestro múltiple

Existe una buena herramienta llamada lsyncdpara sincronizar archivos entre múltiples servidores en tiempo real. Aquí lo he intentado con dos servidores.

Hosts: Servidor1 y Servidor2

Sistema operativo utilizado: CentOS 7

Instale los siguientes paquetes en ambos servidores.

# yum install -y epel-release
# yum -y install lua lua-devel pkgconfig gcc asciidoc lsyncd

generar clave ssh en ambos servidores y agregar al authorized_keysarchivo. [agregue la clave pública del servidor1 al servidor2 authorized_keysy la clave pública del servidor2 al authorized_keysarchivo del servidor1 ]

Configuración del servidor 1

Abra /etc/lsyncd.confy comente la configuración predeterminada utilizando --al principio de la línea y agregue la configuración siguiente al archivo.

settings {
  logfile = "/var/log/lsyncd/lsyncd.log",
  delay = 1
}
sync {
  default.rsync,
  source="/home/test/public_html/",
  target="server2:/home/test/public_html/",
  rsync = {
    compress = true,
    acls = true,
    verbose = true,
    owner = true,
    group = true,
    perms = true,
    rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
  }
}

Cambiar la IP de destino en el targetparámetro.

Puede cambiar el delayparámetro según sus necesidades. Aquí se establece 1 segundo.

Ahora cree el directorio de registro.

# mkdir -p /var/log/lsyncd

Permita que el lsyncdservicio se inicie automáticamente.

# systemctl enable lsyncd.service

Inicia el servicio.

# systemctl start lsyncd.service

Configuración del servidor2

Siga la misma configuración que Servidor1 y cambie la targetIP.

Ahora la sincronización está configurada.

Puedes consultar la actividad desde tailf /var/log/lsyncd/lsyncd.log

Gracias a MelBurslan por su sugerencia.

Sourav
fuente
El parámetro de retraso en la función de configuración no es válido. Utilice la variable maxDelays en su lugar. He implementado esta herramienta. Es realmente poderoso.
Hasanuzzaman Sattar
3

La sincronización puede ser una opción. Es extremadamente rápido, la transferencia está encriptada y hay clientes para múltiples plataformas. Utiliza "inotify" para sincronizar los archivos modificados al instante.

njam
fuente
2

Debería abordar esto con una solución de tipo de sistema de archivos en clúster: una simple sincronización entre las dos máquinas no le dará una respuesta en tiempo real.

John
fuente
En realidad, esos servidores están en AWS. ¡Entonces no podemos obtener un entorno de clúster! ¿No hay otra manera?
Sourav