rsync,inotify,sersync(rsync+sersync实时双向同步)

一、简介

rsync:  

        一款linux系统下的数据镜像备份工具,采用C/S模式,可以在不同主机之间进行同步,类似于cp功能,数据的传输借助于ssh服务,以守护进程的方式进型传输。

inotify:

  inotify是Linux内核提供的一个接口,用于监控文件系统事件,如文件的创建、删除、修改等。当监控的目录发生变化时,inotify会触发相应的事件。结合rsync,可以在检测到文件系统变化后立即执行同步操作。

sersync:

        sersync是基于inotify开发的工具,旨在改进inotify的不足。与直接使用rsync+inotify的简单组合不同,sersync优化了同步过程,能够记住哪些具体文件或目录发生了变化,从而让rsync只处理这些变化的部分,而不是每次都全量扫描目录。

二、对比

rsync+inotify rsync+sersync
优点: 组合简单易用,能够实时响应文件系统的变动 相比rsync+inotifyrsync+sersync提供了更细粒度的监控和同步,特别是在处理大数据量或频繁变更的场景时,效率更高
缺点: 处理大量文件变化时,需要扫描整个目录来找出差异。 需要更多的系统资源,并且配置相对复杂
适用环境: 适用于个人项目、小规模文件系统的监控 适合于数据量较大、文件变化频繁且对同步效率要求高的环境

三、配置rsync+sersync双向实时同步:

1.系统环境:

操作系统:openEuler 22.03 LTS _x86  

服务器IP:host1:192.172.0.253

                    host2:192.172.0.254

2.安装准备:

 配置ssh免密服务:

host1(192.172.0.253):

ssh-keygen -t rsa  
#出现交互式一直回车就好

ssh-copy-id 192.172.0.254
#如果修改过ssh端口,通过-p选项指定端口,交互式过程中第一次输入yes,第二次输入host2主机的密码
#可以通过[email protected]的形式指定登录用户,不指定默认为本机服务器当前登录用户

host2(192.172.0.254):

ssh-keygen -t rsa  
ssh-copy-id 192.172.0.253
3.安装rsync并配置:

host1(192.172.0.253):

安装rsyncd

yum -y install rsyncd

修改配置文件(/etc/rsyncd.conf)内容:

uid = root
gid = root
user chroot = no
address = 192.172.0.253
port = 873
host allow = 192.172.0.0/24

max connections = 36000
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[backup]
path = /opt/test
ignore errors = yes
read only = no
auth users = backup
secerts file = /etc/rsync1.passwd

创建密码文件并赋权:

echo "backup:123456" > /etc/rsync1.passwd
chmod 600 /etc/rsync1.passwd

host2(192.172.0.254):

安装rsyncd

yum -y install rsyncd

修改配置文件(/etc/rsyncd.conf)内容:

uid = root
gid = root
user chroot = no
address = 192.172.0.254
port = 873
host allow = 192.172.0.0/24

max connections = 36000
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[backup]
path = /opt/test
ignore errors = yes
read only = no
auth users = backup
secerts file = /etc/rsync2.passwd

创建密码文件并赋权:

echo "backup:123123" > /etc/rsync2.passwd
chmod 600 /etc/rsync1.passwd
4.启动rsync并验证:

首先启动两台主机的rsync并加入开机自启

systemctl start rsyncd && systemctl enable rsyncd

开始验证:

host1(192.172.0.253)上执行:

cd /opt/test
touch {1..5}.file
echo "123123" > /etc/rsync2.passwd
chmod 600 /etc/rsync2.passwd 
cd /opt/test/
rsync -artuz -R --delete ./ [email protected]::backup --password-file=/etc/rsync2.passwd

此时查看host2(192.172.0.254)/opt/test/目录,应该有5个file文件

同样在host2(192.172.0.254)上执行:

cd /opt/test
touch {1..5}.txt
echo "123456" > /etc/rsync1.passwd
chmod 600 /etc/rsync1.passwd 
cd /opt/test/
rsync -artuz -R --delete ./ [email protected]::backup --password-file=/etc/rsync1.passwd

此时查看host2(192.172.0.254)/opt/test/目录,应该有5个test文件

5.安装sersync并配置:

官网: https://code.google.com/archive/p/sersync/https://code.google.com/archive/p/sersync/

下载链接: 

 https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

在两台服务器上执行:

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

tar zxf sersync2.5.4_64bit_binary_stable_final.tar.gz 
mv GNU-Linux-x86/ /usr/local/sersync 
ln -s /usr/local/sersync/sersync2 /usr/bin/
cd /usr/local/sersync
mv confxml.xml confxml.xmlbak
cp confxml.xmlbak confxml.xml

host1(192.172.0.253)上编辑confxml.xml,修改下部分内容:

 
	
	      
	    
	    
	
	
	    
	     
	    
	    
	      
	       

 在host2(192.172.0.254)上编辑confxml.xml,修改下部分内容:

 
	
	      
	    
	    
	
	
	    
	     
	    
	    
	      
	       
6.启动sersync并验证:

在两台主机上执行:

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

host1(192.172.0.253)上执行:

rm -f /opt/test/*.txt

查看host2(192.172.0.254)/opt/test/目录下此时应该没有之前创建的1-5.txt了

host2(192.172.0.254)上执行:

rm -f /opt/test/*.file

查看host1(192.172.0.253)/opt/test/目录下此时应该没有之前创建的1-5.file了

四、创建检测脚本:

        因为sersync服务一直处于后台启动状态,为保证服务能一直运行,故制作检测脚本并加入定时计划以保证sersync服务能一直运行。

        在两台服务器上:

vim /opt/shell/check_sersync.sh

        内容如下:

#!/bin/bash
sersync="/usr/local/sersync/sersync2"
confxml="/usr/local/sersync/confxml.xml"
status=`ps -ef |grep 'sersync2'|grep -v 'grep'|wc -l`
if [ $status -eq 0 ];then
    $sersync -r -d -o $confxml
else
    exit 0;
fi

添加定时任务:

执行crontab -e添加一行

*/5 * * * * /opt/shell/check_sersync.sh > /dev/null 2>&1

添加开机自启

systemctl start crond && systemctl enable crond

你可能感兴趣的:(Linux工具,运维,linux)