Linux usa Sersync + Rsync para lograr la sincronización de archivos en tiempo real

Artículo de referencia:
https://blog.51cto.com/liubao0312/1677586
https://github.com/wsgzao/sersync


1. Introducción

1.1 Introducción a Sersync

(1) Sersync se desarrolla en base a inotify, similar a inotify-tools

(2) Sersync puede registrar el nombre de un archivo o directorio específico que ha cambiado (incluida la adición, eliminación, modificación) en el directorio monitoreado , y luego, cuando se usa rsync para sincronizar, solo se sincronizan los archivos o directorios modificados


1.2, la diferencia entre la arquitectura rsync + inotify-tools y rsync + sersync

(1) rsync + inotify-tools

a. Inotify solo puede registrar los cambios (adición, eliminación, modificación) del directorio monitoreado y no registra los cambios de archivos o directorios específicos ;

b. Cuando rsync se sincroniza, debido a que no sé qué archivo o directorio ha cambiado, todo el directorio se sincroniza cada vez. Cuando la cantidad de datos es grande, la sincronización completa del directorio lleva mucho tiempo (rsync necesita transversal para encontrar archivos de comparación), por lo que la eficiencia es muy baja.



(2) rsync + sersync

a. Sersync puede registrar el nombre de un archivo o directorio específico que ha cambiado (adición, eliminación, modificación) en el directorio monitoreado;

b. Durante la sincronización, rsync solo sincroniza los archivos o directorios que han cambiado (los datos que cambian cada vez son pequeños en comparación con todos los datos del directorio de sincronización, y rsync es muy rápido cuando se recorre para encontrar el archivo de comparación), por lo que la eficiencia es muy alto.


para resumir:

    Cuando la cantidad de datos de directorio sincronizados no es grande, se recomienda utilizar rsync + inotify

    Cuando la cantidad de datos de directorio sincronizados es muy grande (unos cientos de G o más de 1T), se recomienda utilizar rsync + sersync


2. Descripción del principio

Pasos principales:

  1. Inicie el servicio sersync en el servidor maestro (Master), sersync es responsable de monitorear los cambios en tiempo real de los archivos en la ruta de configuración (los usuarios crean, modifican y eliminan archivos en este servidor);

  2. Llame al comando rsync en el Master para enviar (Push) los archivos actualizados al servidor de destino (Slave1 y Slave2);

  3. Necesita configurar sersync en el servidor principal y rsync en el servidor de destino


El principio se muestra en la figura:
Inserte la descripción de la imagen aquí


Tres, configuración

Descripción del entorno:
Sistema: Ubuntu 18.04
Maestro: 192.168.43.166
Esclavo: 192.168.43.97


3.1, configure el Rsync del servidor de destino esclavo

3.1.1, iniciar el servicio rsync en el arranque

Ubuntu 18.04 instala rsync de forma predeterminada, pero el servicio rsync no se inicia de forma predeterminada. Necesitamos modificar el archivo sudo vi /etc/default/rsync.

RSYNC_ENABLE=true   #将false改true

3.1.2, modificar el archivo de configuración

Primero copie el archivo de configuración al directorio etc para una fácil modificación

sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc

Modificar el archivo de configuración

sudo vi /etc/rsyncd.conf

Modifique la siguiente información:
Inserte la descripción de la imagen aquí

Nota: Si el directorio de sincronización de ruta no existe, debe crearlo usted mismo.


3.1.3, crear un archivo de contraseña

Cree un sudo vi /etc/rsyncd.secrets:.archivo de El contenido es el siguiente:

hadoop:123456 #格式必须要为 用户名:密码

Nota: El nombre de usuario y la contraseña aquí son el nombre de usuario y la contraseña del Maestro , no se equivoque.

Asigne permisos 0600 al archivo de contraseña:sudo chmod 0600 /etc/rsyncd.secrets


3.1.4, iniciar resincronización

sudo /etc/init.d/rsync start

En este punto, la configuración Rsync del esclavo está completa.


3.1.5, prueba

Probemos el Rsync de Slave en el Master:

Crear un archivo de contraseña en el Maestro: sudo vi /etc/rsyncd.secrets. El contenido es el siguiente:

123456    #写入客户端密码即可

Asigne permisos 0600 al archivo de contraseña:sudo chmod 0600 /etc/rsyncd.secrets

cd ~ 				#返回到桌面
sudo vi hello.txt 	#创建一个hello.txt,里面随便写一些内容
rsync -avzP hello.txt  [email protected]::data --password-file=/etc/rsyncd.secrets

Explicación: Cargue el archivo hello.txt de esta máquina en la ruta especificada por el módulo de datos del Esclavo. Aquí se usa el archivo de contraseña, que se puede cargar sin secreto. Similar a git push


Atención especial: esto debe ser exitoso, de lo contrario, la siguiente configuración no se realizará correctamente


3.2, configure el Sersync del servidor maestro Master

3.2.1, descargar Sersync

Enlace de descarga: https://github.com/wsgzao/sersync
Inserte la descripción de la imagen aquí



Abrir la cremallera:

tar -zxf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
cd /usr/local/
mv GNU-Linux-x86 sersync

3.2.2, configurar Sersync

cd /usr/local/sersync
cp confxml.xml confxml.xml-bak
sudo vi confxml.xml

Enmendado como sigue:
Inserte la descripción de la imagen aquí

3.2.3, abra el demonio sersync para sincronizar datos

/usr/local/sersync/sersync2  -d -r -o /usr/local/sersync/confxml.xml

Si se devuelve el siguiente resultado, es correcto:

set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
sh: 1: cannot create /proc/sys/fs/inotify/max_user_watches: Permission denied
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
sh: 1: cannot create /proc/sys/fs/inotify/max_queued_events: Permission denied
parse the command param
option: -d 	run as a daemon
option: -r 	rsync all the local files to the remote servers before the sersync work
option: -o 	config xml name:  /usr/local/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost	host port: 8008
daemon start,sersync run behind the console 
use rsync password-file :
user is	hadoop
passwordfile is 	/etc/rsyncd.secrets
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) 
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /home/hadoop/hub && rsync -artuz -R --delete ./  --timeout=100 [email protected]::data --password-file=/etc/rsyncd.secrets >/dev/null 2>&1 
run the sersync: 
watch path is: /home/hadoop/hub


En este punto, sersync + rsync se ha configurado. Siempre que cree, elimine y modifique archivos en el directorio de sincronización, puede sincronizar con el esclavo en tiempo real.

También puede /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xmlescribir en rc.local y dejar que Master inicie la sincronización de archivos al arrancar



Apéndice:
1. Descripción de parámetros

parámetro Descripción
./sersync -r Antes de habilitar la supervisión en tiempo real, realice una sincronización general entre el directorio del servidor principal y el directorio de la máquina de destino remota.
./sersync -o xx.xml No especifique el parámetro -o: sersync utiliza el archivo de configuración predeterminado confxml.xml en el directorio de archivos ejecutables de sersync para
especificar el parámetro -o: puede especificar varios archivos de configuración diferentes para lograr la sincronización de datos entre varios procesos y varias instancias de sersync
./sersync -n num Especifique el número total de subprocesos en el grupo de subprocesos predeterminado.
Por ejemplo: ./sersync -n 5 especifica que el número total de subprocesos es 5. Si no se especifica, el número predeterminado de grupos de subprocesos para iniciar es 10. Si la CPU se usa demasiado alto, este parámetro se puede ajustar hacia abajo, y si la configuración de la máquina es alta, el valor predeterminado se puede ajustar hacia arriba El número total de subprocesos para mejorar la eficiencia de sincronización;
./sersync -d El servicio en segundo plano, generalmente usa el parámetro -r para sincronizar lo local con el remoto como un todo, luego ejecuta este parámetro en segundo plano para iniciar la sincronización en tiempo real del demonio. En la primera sincronización general, los parámetros -d y -r se utilizan a menudo en combinación;
./sersync -m No sincronice, solo ejecute el complemento.
Por ejemplo: ./sersync -m comando, después de monitorear el evento, el servidor de destino remoto no se sincronizará, pero el complemento de comando se ejecutará directamente

2. Descripción del archivo de
configuración El archivo de configuración predeterminado es el siguiente:

     1 <?xml version="1.0" encoding="ISO-8859-1"?>
     2 <head version="2.5">
     3     <host hostip="localhost" port="8008"></host>
     4     <debug start="false"/>
     5     <fileSystem xfs="false"/>
     6     <filter start="false">
     7         <exclude expression="(.*)\.svn"></exclude>
     8         <exclude expression="(.*)\.gz"></exclude>
     9         <exclude expression="^info/*"></exclude>
    10         <exclude expression="^static/*"></exclude>
    11     </filter>
    12     <inotify>
    13         <delete start="true"/>
    14         <createFolder start="true"/>
    15         <createFile start="false"/>
    16         <closeWrite start="true"/>
    17         <moveFrom start="true"/>
    18         <moveTo start="true"/>
    19         <attrib start="false"/>
    20         <modify start="false"/>
    21     </inotify>
    22
    23     <sersync>
    24         <localpath watch="/opt/tongbu">
    25              <remoteip="127.0.0.1" name="tongbu1"/>
    26              <!--<remoteip="192.168.8.39" name="tongbu"/>-->
    27              <!--<remoteip="192.168.8.40" name="tongbu"/>-->
    28         </localpath>
    29         <rsync>
    30              <commonParamsparams="-artuz"/>
    31              <auth start="false"users="root" passwordfile="/etc/rsync.pas"/>
    32              <userDefinedPortstart="false" port="874"/><!-- port=874 -->
    33              <timeoutstart="false" time="100"/><!-- timeout=100 -->
    34              <sshstart="false"/>
    35         </rsync>
    36         <failLog path="/tmp/rsync_fail_log.sh"timeToExecute="60"/><!--default every 60mins execute once-->
    37         <crontab start="false"schedule="600"><!--600mins-->
    38              <crontabfilterstart="false">
    39                  <excludeexpression="*.php"></exclude>
    40                  <excludeexpression="info/*"></exclude>
    41              </crontabfilter>
    42         </crontab>
    43         <plugin start="false" name="command"/>
    44     </sersync>
    45
    46     <plugin name="command">
    47         <param prefix="/bin/sh" suffix=""ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
    48         <filter start="false">
    49              <includeexpression="(.*)\.php"/>
    50              <includeexpression="(.*)\.sh"/>
    51         </filter>
    52     </plugin>
    53
    54      <plugin name="socket">
    55         <localpath watch="/opt/tongbu">
    56              <deshostip="192.168.138.20" port="8009"/>
    57         </localpath>
    58     </plugin>
    59     <plugin name="refreshCDN">
    60         <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
    61              <cdninfodomainname="ccms.chinacache.com" port="80"username="xxxx" passwd="xxxx"/>
    62              <sendurlbase="http://pic.xoyo.com/cms"/>
    63              <regexurlregex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/p_w_picpaths"/>
    64         </localpath>
    65     </plugin>
    66 </head>

2.1, la depuración está activada

     4     <debug start="false"/>

Establecido en verdadero, lo que significa que el modo de depuración está activado y los comandos de sincronización de inotify time y rsync se imprimirán en la consola donde se está ejecutando sersync;


2.2, conmutador del sistema de archivos XFS

     5     <fileSystem xfs="false"/>

Para los usuarios del sistema de archivos xfs, debe habilitar esta opción para usar sersync para que funcione normalmente;


2.3, función de filtrado de archivos de filtro

     6     <filter start="false">
     7         <exclude expression="(.*)\.svn"></exclude>
     8         <exclude expression="(.*)\.gz"></exclude>
     9         <exclude expression="^info/*"></exclude>
    10         <exclude expression="^static/*"></exclude>
    11     </filter>

Para la mayoría de las aplicaciones, puede intentar establecer createFile (opción de evento de archivo de monitorización) en falso para mejorar el rendimiento y reducir la comunicación rsync. Debido a que la copia de archivos en el directorio monitoreado generará eventos create y close_write, si desactiva el evento create, solo se monitoreará el close_write al final de la copia del archivo, y también se puede lograr la sincronización completa del archivo;

Nota: fuerce que creatFolder se mantenga como verdadero. Si createFolder se establece en falso, el directorio generado no será monitoreado y los sub-archivos y subdirectorios bajo este directorio no serán monitoreados; por lo tanto, a menos que tenga necesidades especiales, habilítelo; De forma predeterminada, tanto los eventos de creación de archivo (directorio) como los eventos de eliminación de archivo (directorio) son monitoreados. Si el archivo (directorio) del servidor de destino remoto no necesita ser eliminado en el proyecto, el parámetro de eliminación se puede establecido en falso y no se realizará el evento de eliminación.

Supongo que te gusta

Origin blog.csdn.net/lendsomething/article/details/109134734
Recomendado
Clasificación