Linux rsync 远程同步 | rsync + inotify 实时同步

一、rsync 远程同步

1、环境准备

master-rsync 10.101.222.11  原文件所在系统
work1-rsync  10.101.222.12  rsync 远程同步
work2-rsync  10.101.222.13  rsync + inotify 实时同步

2、系统配置(master-rsync)

#关闭防火墙
systemctl stop firewalld           #临时关闭防火墙
systemctl disable firewalld        #永久关闭防火墙

#关闭SELinux
setenforce 0           #临时关闭selinux
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config      #永久关闭selinux


yum install -y rsync    #rsync 系统一版已经默认安装了,这步不用执行也行

#创建需要同步数据的目录workdata1和workdata2
mkdir -p /data/workdata1 /data/workdata2
chmod +r /data/workdata1 /data/workdata2
#给目录添加上读的权限

cp /etc/rsyncd.conf /etc/rsyncd.conf.old    #备份rsync配置文件

vim /etc/rsyncd.conf
编辑rsync配置文件
uid = root
gid = root
use chroot = yes
address = 10.101.222.11
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 10.101.222.0/24
[workdata1]        
path = /data/workdata1
comment = this is rsync of work1-rsync
[workdata2]        
path = /data/workdata2
comment = this is rsync of work2-rsync

read only = no
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users =work1 work2
secrets file = /etc/rsyncd_users.db

uid = root                                                    #用户id
gid = root                                                    #组id
use chroot = yes                                         #开启,禁锢在源目录
address = 10.101.222.11                            #监听地址
port 873                                                      #默认端口号为873
log file = /var/log/rsyncd.log                        #日志文件存放位置
pid file = /var/run/rsyncd.pid                        #存放进程id的文件位置
hosts allow = 10.101.222.0/24                     #允许访问的主机网段
 

[workdata1]                                                   #共享模块的名称
path = /data/workdata1                                 #源目录路径
comment = this is rsync of work1-rsync        #共享模块备注

[workdata1]                                                   #共享模块的名称
path = /data/workdata2                                 #源目录路径
comment = this is rsync of work2-rsync        #共享模块备注


read only = no                                              #是否为只读

dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z         #同步时不再压缩的文件类型
auth users = work1 work2                                         #授权用户,多个账户以空格隔开
secrets file = /etc/rsyncd_users.db                 #存放账号信息的数据文件,一行一个

3、创建用户账号和密码(master-rsync)

vim /etc/rsyncd_users.db
work1:Ab123123
work2:Ab123123

#编辑用户账号文件,固定格式为[名称:密码],一行一个

chmod 600 /etc/rsyncd_users.db           #赋权600!

4、开启rsync 服务(master-rsync)

rsync --daemon
#开启服务
netstat -natp | grep rsync
#检测端口号,确认服务是否成功开启

cd /data/workdata1
#切换至共享目录下
echo "this is workdata1" >>./test
#给共享文件夹下创建一个test文件夹输入内容

 

 5、到work1-rsync查看内容

rsync -avz work1@10.101.222.11::workdata1 /data/work1  #用rsync登录
echo "Ab123123"> /etc/server.pass          #输入密码实现免交互
chmod 600 /etc/server.pass             #给密钥文件赋权600
rsync -avz --delete --password-file=/etc/server.pass work1@10.101.222.11::workdata1 /data/work1/
 
#rsync,使用密钥文件/etc/server.pass对应work用户,
IP地址为10.101.222.11的共享模块文件进行压缩,并归档同步至当前服务器的/data/work目录下,
同时删除差异内容,保持一致性

 6、 创建周期计划任务(work1-rsync)

crontab -e
*/1 * * * *  rsync -avz --delete --password-file=/etc/server.pass work1@10.101.222.11::workdata1 /data/work1/            #每分钟执行删除差异内容,保持一致性
systemctl restart crond                     #启动crontab服务
systemctl enable crond                     #实现开机自启

7、在次验证同步效果

1、验证同步master-rsync  的文件到work1-rsync 
在master-rsync  上创建一个文件

echo "this is test2" >>test2

在work1-rsync  上执行以下命令,再查看文件是否存在
rsync -avz --delete --password-file=/etc/server.pass work1@10.101.222.11::workdata1 /data/work1/

在master-rsync  上删除一个文件

rm-rf test2

在work1-rsync  上执行以下命令,再查看文件是否存在
rsync -avz --delete --password-file=/etc/server.pass work1@10.101.222.11::workdata1 /data/work1/



2、验证删除work1-rsync 上的文件不影响master-rsync  上的文件
在work1-rsync  上删除一个文件

rm-rf test

在master-rsync  上查看文件是否还存在


在work1-rsync  上执行以下命令,再查看文件是否存在
rsync -avz --delete --password-file=/etc/server.pass work1@10.101.222.11::workdata1 /data/work1/

二、rsync + inotify 实时同步

1、共享目录赋权(master-rsync)

chmod 777 /data/workdata2

2、优化work2-rsync  内核(work2-rsync)

cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances 
cat /proc/sys/fs/inotify/max_user_watches 
#查看当前默认inotify的内核参数
#依次为监控事件队列、最多监控实例与每个实例最多监控的文件

vim /etc/sysctl.conf
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
#优化内核参数


sysctl -p
#加载内核参数配置文件使其生效


#输入密码实现免交互
echo "Ab123123"> /etc/server.pass 
chmod 600 /etc/server.pass
#给密钥文件赋权600

3、在work2-rsync 上解压编译安装包

tar -zxvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14/       
./configure && make && make install

 4、编写执行脚本

vim /data/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /data/work2/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /data/work2/ work2@10.101.222.11::workdata2"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
	fi
done

----详解----
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /data/work2/"
#INOTIFY_CMD变量:持续监控 /data/work2 目录中的创建,删除,移动,修改,改变时间的操作
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /data/work2/ work2@10.101.222.11::workdata2"
#RSYNC_CMD变量:使 work2 用户,/etc/server.pass 密钥文件,将 /data/work2 目录下的文件进行压缩,归档,保留硬链接文件同步至 10.101.222.11 的共享模块定义的目录 /data/workdata2 下,并删除差异性内容,保持一致性

$INOTIFY_CMD | while read DIRECTORY EVENT FILE        #持续监控...
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then        #如果服务并未启动,则执行同步
        $RSYNC_CMD
    fi
done
 

 5、执行自动监控同步脚本

cd /data/
chmod +x inotify.sh
./inotify.sh &

#给脚本赋权并在后台执行
chmod +x /etc/rc.d/rc.local
echo '/data/inotify.sh' >> /etc/rc.d/rc.local
#添加开机自动执行脚本

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值