linux下实现两台服务器下文件夹文件实时同步

背景:

现在有服务器A,和服务器B,现在需要把服务器A的 /usr/tmp目录下的内容时刻和服务器B的内容进行时刻同步,当A服务器的该目录出现增删改时,保障B的该目录下的内容和A时刻一样,其中B的IP为:192.168.131.133

解决方案:使用inotifywait 和 rsync实现文件同步

1.在A服务器上安装inotifywait:

下载:https://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz/download
解压:tar -zxvf inotify-tools-3.13.tar.gz
安装:
cd inotify-tools-3.13
./configure
make
make install

安装完后使用inotifywait -h检测是否安装成功

2.在A服务器上安装rsync

下载: http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz
解压:tar zxvf rsync-3.1.1.tar.gz 
安装:
cd rsync-3.1.1
./configure –prefix=/usr/local/rsync
make
make install

安装完成后使用rsync -h检测是否安装成功

3.同步脚本:目标是实现A服务器的/usr/tmp下文件发生变化时,服务器B的/usr/tmp目录会跟随相应进行变化,新增,删除,更新等。(需要将IP改为B服务器的IP)

sync_data.sh

inotifywait -mr -e MODIFY,DELETE,CREATE,ATTRIB,MOVE /usr/tmp |  
while IFS= read -r dir event file; do  
    # 打印事件信息  
    echo "The file $file in directory $dir was $event"  
      
    # 执行rsync命令同步/usr/tmp目录到本地  
    rsync -avz --delete /usr/tmp/ 192.168.131.133:/usr/tmp/  
done

4.运行程序:增加可执行权限 chmod +x sync_data.sh

测试:手动执行 sh sync_data.sh,执行成功后打印如下:

开始测试新增,在A服务新增文件夹 aaa, 在A服务器的/usr/tmp目录下执行 mkdir aaa

A服务器下有两个文件夹:

B服务器下只有一个文件夹:

在A服务器下新建一个文件夹aaa,新建一个文件 a.py

此时,运行中的sync_data.sh会打印日志:

此时,再去B服务器上确认信息,数据已经同步成功:

5.后台部署服务

手动终结掉刚才sh执行的脚本,然后后台执行该脚本,并将日志输出到指定目录 /tmp/async_data.log

nohop sh async_data.sh > /tmp/async_data.log 2>&1 &

如果需要终结这个程序,需要使用 ps -ef|grep async_data 获取到进程id,然后使用 kill -9 进程ID号 杀掉进程。

至此,文件夹同步任务执行完成。 

版权声明:本文为博主作者:lytcreate.原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_35204012/article/details/136841308

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2024年4月16日
下一篇 2024年4月16日

相关推荐