¡Súper práctico! ! rsync distribuido + inotify monitoreo de sincronización en tiempo real

1. Introducción a la sincronización rsync

.Una herramienta de copia de seguridad incremental rápida

  • Sincronización remota, sincronización remota
  • Admite replicación local o sincroniza con otros hosts SSH, rsync
  • Sitio web oficial: http://rsync.samba.org

1. Introducción al software

  • Rsync es una herramienta de sincronización de datos remota que puede sincronizar rápidamente archivos entre múltiples hosts a través de LAN / WAN.
  • Rsync fue originalmente una herramienta para reemplazar scp, y actualmente es mantenido por Rsync.samba.org.
  • Rsync utiliza el llamado "algoritmo Rsync" para sincronizar los archivos entre los hosts locales y remotos. Este algoritmo solo transfiere diferentes partes de los dos archivos en lugar de enviar el archivo completo cada vez, por lo que la velocidad es bastante rápida.
  • La máquina que ejecuta el servidor Rsync también se denomina servidor de respaldo. Un servidor Rsync puede respaldar los datos de varios clientes al mismo tiempo; varios servidores Rsync también pueden respaldar los datos de un cliente.

2. Principio Rsync

  • Rsync puede usar el modo demonio. El servidor Rsync abrirá un canal de servicio 873 (puerto) y esperará la conexión Rsync.
  • Al conectarse, el servidor Rsync comprobará si la contraseña coincide. Si se marca la contraseña, se puede iniciar la transferencia de archivos.
  • Cuando se completa la primera conexión, el documento completo se transmitirá una vez y la próxima vez solo se transmitirá la diferencia entre los dos documentos.

Rsync es compatible con la mayoría de los sistemas similares a Unix. La instalación de la interfaz gráfica CentOS7.0 básicamente ha instalado el software Rsync, que se puede instalar con yum

3. Las características básicas de Rsync son las siguientes:

  • Todo el árbol de directorios y el sistema de archivos se pueden duplicar y guardar;
  • Es fácil mantener los permisos del archivo original, el tiempo, los enlaces suaves y físicos, etc.
  • Se puede instalar sin un permiso especial;
  • Proceso optimizado, alta eficiencia de transferencia de archivos;
  • Puede usar rcp, ssh, etc. para transferir archivos, por supuesto, también puede usar una conexión de socket directa;
  • Admite transmisión anónima.

4. Uso del comando rsync

Formato: rsync [Opciones] Opciones comunes para la ubicación original y la ubicación de destino

Opciones utilizar
-un Modo de archivo, recursivo y conserva los atributos del objeto, equivalente a -rlptgoD
-V Mostrar información detallada (detallada) sobre el proceso de sincronización
-con Comprimir al transferir archivos (comprimir) -H: mantener archivos vinculados
-UN Conservar la información de los atributos de ACL
-Eliminar Eliminar archivos en la ubicación de destino pero no en la ubicación original
–Suma de comprobación Decidir si omitir archivos en función de la suma de comprobación del objeto

5. Dos formas de sincronizar la fuente

Formato 1: rsync [opciones] nombre de usuario @ dirección de host :: ubicación de destino del nombre del módulo compartido
Formato 2: rsync [opciones] rsync: // nombre de usuario @ dirección de host / ubicación de destino del nombre del módulo compartido

Dos, configure el servidor Rsync

Fuente de sincronización Rsync (se refiere al servidor remoto de la operación de respaldo, también conocido como fuente de respaldo)
Inserte la descripción de la imagen aquí

1. Ideas básicas

  • Establecer un archivo de configuración rsyncd.conf y un archivo de cuenta independiente
  • Habilitar rsync - modo daemon
    La función del proceso demonio es que incluso si el servicio no solicita el servicio, el número de puerto del servicio sigue abierto.
    Ejemplo de aplicación
  • Copia de seguridad del usuario, que permite la sincronización del enlace descendente
  • El directorio operativo es / var / www / html /

Pasos experimentales

  1. Archivo de configuración /etc/rsyncd.conf
  2. Configurar archivo de cuenta rsync
  3. Iniciar el servicio rsync
  4. Verificar a otro servidor

[Configuración del servidor 1 (final de origen rsync)]

1. Modifique el archivo de configuración rsync

[root@oracle ~]# vi /etc/rsyncd.conf
uid = nobody   ##主账号为匿名
gid = nobody   ##组账号匿名
use chroot = yes   ##家目录锁定,锁定家目录后无法使用cd命令进入其他目录
address = 192.168.10.10   ##本地rsync源端地址
max connections = 4     ##最大连接数为4
pid file = /var/run/rsyncd.pid  ##pid文件位置
log file = /var/log/rsyncd.log   ##日志文件位置
port = 873     ##监听端口873
hosts allow = 192.168.10.0/24     ##允许访问的网段

[wwwroot]     ##共享模块的名称
path = /var/www/html   ##共享目录
comment = ww.bai.com   ##描述信息,自定义
read only = yes    ##只读模式
auth users = backuper    ##授权的虚拟用户为backuper(不需要系统创建)
secrets file = /etc/rsyncd_user.db   ##认证密码存放文件
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2    ##不进行压缩的文件格式类型

2. Edite el archivo de registro del usuario e inicie rsync.

[root@oracle ~]# vi /etc/rsyncd_user.db  ##编写用户数据文件
backuper:abc123   ##每一行为一个用户记录,格式为——用户名:密码
[root@oracle ~]# chmod 600 /etc/rsyncd_user.db   ## 600权限,不允许其他用户读取
[root@oracle ~]# rsync --daemon ##启动守护进程
[root@oracle ~]# netstat -anupt |grep 873   ##查看端口状态
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      12109/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      12109/rsync        

3. Cree una prueba de archivo en el directorio compartido.

[root@oracle html]# vi abc
abc
[root@oracle html]# cat abc 
this abc

[Servidor 2 (iniciador)]

1. Vaya al iniciador para probar y ver los archivos en el directorio / var / www / html

[root@squid ~]# cd /var/www/html
[root@squid html]# ls    ##查看不到文件,为空
[root@squid html]# 

2. Realice la sincronización rsync con el servidor 1 (extremo de origen)

[root@squid html]# rsync -avz rsync://backuper@192.168.10.10/wwwroot /var/www/html
##rsync -avz backuper@192.168.10.10::wwwroot /var/www/html ###该命令效果一样
Password:    ##输入密码
receiving incremental file list
./
abc
sent 46 bytes  received 118 bytes  36.44 bytes/sec
total size is 9  speedup is 0.05
[root@squid html]# ls    ##在此查看,发现源端的文件同步到发起端了
abc

3. Configure la interacción libre

[root@squid html]# rm -rf abc      ##先删除abc文件,方便测试
[root@squid html]# ls
[root@squid html]# 
[root@squid html]# vi /etc/server.password    ##编写免交互密码存放文件
abc123                      ##写入rsync指定的虚拟用户backuper的密码
[root@squid html]# chmod 600 /etc/server.password          ##同样设置600权限,只允许主人查看
[root@squid html]# vi /etc/server.password
[root@squid html]# rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html     ##免交互同步,--delete会删除本端与源端文件名不相同的文件,--password-file指定存放密码的文件位置
[root@squid html]# ls
abc
[root@squid html]# cat abc   ##同步成功
this abc

4. Puede especificar tareas programadas periódicas y sincronizar periódicamente

[root@oracle ~]# crontab -e   ##设置每晚10点执行同步
*/30 22 * * *  rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html
[root@oracle ~]# crontab -l
*/30 22 * * *  rsync -az --delete --password-file=/etc/server.password backuper@192.168.10.10::wwwroot /var/www/html

Tres, rsync + inotify sincronización en tiempo real

Depender únicamente de rsync combinado con tareas programadas periódicas tiene grandes limitaciones y no se puede actualizar en tiempo real, por lo que se creó inotify para resolver este cuello de botella.

1.rsync sincronización en tiempo real

  1. Insuficiencia de la sincronización regular
    ◆ El tiempo para realizar la copia de seguridad es fijo, el retraso es obvio y el rendimiento en tiempo real es deficiente
    ◆ Cuando la fuente de sincronización no cambia durante mucho tiempo, las tareas regulares intensivas son innecesarias
  2. Ventajas de la sincronización en tiempo real
    ◆ Una vez que cambie la fuente de sincronización, inicie inmediatamente la copia de seguridad
    ◆ Siempre que la fuente de sincronización no cambie, no se realizará ninguna copia de seguridad

2. Acerca de inotify

  • El mecanismo de inotificación del kernel de Linux
    ◆ Disponible a partir de la versión 2.6.13
    ◆ Puede monitorear los cambios del sistema de archivos y realizar notificaciones
    ◆ Software auxiliar de respuesta: inotify-tools

Inserte la descripción de la imagen aquí

3. Diseño experimental

Instalar herramientas auxiliares de inotify-tools

inotifywait: para monitoreo continuo, resultados de salida en tiempo real
inotifywatch: para monitoreo a corto plazo, los resultados se mostrarán después de que se complete la tarea

Se requieren dos servidores: servidor 1 (final de origen rsync), servidor 2 (final de notificación)

  1. Ajuste los parámetros del kernel requeridos por inotify
  2. Instalar el software inotify
  3. Modifique los parámetros del archivo de configuración en el lado del servidor rsync 1 en el experimento anterior: solo lectura = no
  4. Ajuste los permisos del directorio compartido html entre los dos servidores a 777
  5. Utilice los comandos integrados de inotify para probar
  6. Editar el script de monitoreo en tiempo real
  7. Verificar la disponibilidad del script

Rsync distribuido + inotify monitoreo en tiempo real, sincronización en tiempo real

[Servidor 2 (lado inotificar)]

1. Modifique los parámetros del kernel

[root@oracle ~]# vi /etc/sysctl.conf 
fs.inotify.max_queued_events = 16384     
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@oracle ~]# sysctl -p   ##生效
fs.inotify.max_queued_events = 16384    ##监控事件的队列大小
fs.inotify.max_user_instances = 1024     ##监控的最大实例数
fs.inotify.max_user_watches = 1048576   ##每个实例被监控的最大文件数

2. Instale el software inotify

[root@oracle ~]# ls    ##查看inotify软件包
 inotify-tools-3.14.tar.gz 
[root@oracle inotify-tools-3.14]# yum -y install gcc gcc-c++ make  ##安装环境
[root@oracle ~]# tar zxvf inotify-tools-3.14.tar.gz -C /opt/   ##解压软件包
[root@oracle ~]# cd /opt/inotify-tools-3.14/
[root@oracle inotify-tools-3.14]# ./configure   ##直接配置
[root@oracle inotify-tools-3.14]# make && make install   ##安装软件
[root@oracle ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html  &  ##后台执行监控

3. Seguimiento de la prueba

[root@oracle ~]# cd /var/www/html   ##进入html目录创建文件
[root@oracle html]# touch test.txt     ##创建文件
[root@oracle ~]# 
/var/www/html/ CREATE test.txt   ##这里后台会有监控提示,创建了test.txt文件
[root@oracle html]# rm -rf test.txt    ## 删除test.txt文件
[root@oracle ~]# 
/var/www/html/ CREATE test.txt
/var/www/html/ DELETE test.txt    ##后台出现新的提示,删除了test.txt文件

4. Configure el script de monitoreo

[root@oracle opt]# vim /opt/inotify.sh  ##编写监控脚本
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"
RSYNC_CMD="rsync -az --delete --password-file=/etc/server.password /var/www/html/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
  do
    if [ $(pgrep rsync | wc -l) -le 0 ]
    then
      $RSYNC_CMD
    fi
done

5. Ajuste los permisos del directorio compartido html a 777

[root@oracle opt]# chmod +x inotify.sh    ##给执行权限
[root@oracle opt]# chmod 777 /var/www/html/    ##给/var/www/html最高权限,可供读写
[root@oracle opt]# ll /var/www/
total 0
drwxrwxrwx. 2 root root 17 Oct 23 22:13 html

[Servidor 1 (final de la fuente rsync)]

### 1.修改/etc/rsyncd.conf中[wwwroot]共享模块配置
[root@oracle opt]# vi /etc/rsyncd.conf 
……省略部分
[wwwroot]
path = /var/www/html
comment = ww.bai.com
read only = no  ##将这里的yes改为no,需要能写
……省略部分

2. Ajuste los permisos del directorio compartido html a 777

[root@squid html]# chmod 777 /var/www/html    ##同样给与最高权限
[root@squid html]# ll /var/www/
drwxrwxrwx   2 root  root    17 Oct 23 19:16 html

3. Cierre el proceso rsync para que surta efecto.

[root@oracle ~]# netstat -anupt |grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      12109/rsync         
[root@oracle ~]# pkill -9 rsync     ##关闭进程,重启生效
[root@oracle ~]# netstat -anupt |grep rsync  ##进程关闭了
[root@oracle ~]# rsync --daemon    ##启动守护进程
 error:failed to create pid file /var/run/rsyncd.pid: File exists  ##会提示报错,pid文件存在
[root@oracle ~]# rm -rf /var/run/rsyncd.pid   ##删除pid文件即可
[root@oracle ~]# rsync --daemon  ##再次启动守护进程

verificación

1. Primero, inserte diferentes archivos en el directorio compartido de los dos servidores, provocando un fenómeno que no está sincronizado

[Servidor 1 (final de la fuente rsync)]

[root@oracle ~]# cd /var/www/html/
[root@oracle html]# touch test.txt
[root@oracle html]# ls
test.txt
[root@oracle html]# 

[Servidor 2 (lado inotificar)]

[root@squid ~]# cd /var/www/html/
[root@squid html]# touch abc.txt
[root@squid html]# ls
abc.txt
[root@squid html]# 

Los archivos en los directorios compartidos de los dos servidores son inconsistentes

2. Ejecute el script para verificar

[Servidor 2 (lado inotificar)]

[root@squid opt]# ./inotify.sh &   ##后台运行脚本
[1] 10901
[root@squid opt]# cd /var/www/html/
[root@squid html]# touch 123.txt    ##在共享目录中添加新的文件
[root@squid html]# rsync: failed to set times on "/." (in wwwroot): Operation not permitted (1)
rsync: chgrp "/.123.txt.BUNMxZ" (in wwwroot) failed: Operation not permitted (1)
rsync: chgrp "/.abc.txt.cVZqbR" (in wwwroot) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
rsync: failed to set times on "/." (in wwwroot): Operation not permitted (1)
rsync: chgrp "/.123.txt.wa4qcd" (in wwwroot) failed: Operation not permitted (1)
rsync: chgrp "/.abc.txt.33vNF5" (in wwwroot) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
 ###注意,这里的failed提示并不是同步失败,而是因为rsync服务器那一端修改了read only = no的参数,rsync程序默认是yes,因此会提示失败,实际上并不影响

[Servidor 1 (final de la fuente rsync)]

[root@oracle html]# ls     ##原本的test.txt文件被删除,新增了inotify端的文件,完全一致状态
123.txt  abc.txt

Supongo que te gusta

Origin blog.csdn.net/CN_LiTianpeng/article/details/109243868
Recomendado
Clasificación