rsync + inotify 实现文件实时同步

目录

 

rsync + inotify 实现文件实时同步

rsync简介

inotify简介

实例

目标服务器

1、关闭selinux

2、安装rsync

3、配置rsyncd.conf

4、创建用户

5、设置同步目录权限

6、启动rsync

源服务器

1、关闭selinux

2、安装rsync

3、创建认证密码文件

4、启动rsync

5、验证rsync

安装inotify-tools

1、查看是否安装

2、安装文档

3、修改inotify默认参数(inotify默认内核参数值太小)

配置inotify脚本,实现自动同步

1、配置inotify.sh脚本,vim /home/scripts/inotify.sh

2、设置inotify.sh文件执行的权限

3、启动脚本


rsync + inotify 实现文件实时同步

rsync简介

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步

inotify简介

Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件

实例

需求:部署rsync+inotify 实时同步源服务器(172.16.18.3)目录/opt/upload/下的文件到目标服务器(172.16.18.2)的目录/opt/upload中

目标服务器

1、关闭selinux

# 关闭seLinux
setenforce 0
# 查看seLinux状态
# getenforce
# /usr/sbin/sestatus -v    #如果SELinux status参数为enabled即为开启状态

2、安装rsync

我这里已经安装过了,所以这里不在列出,需要的自行百度

验证rsync安装情况:rpm -qa | grep rsync

3、配置rsyncd.conf

vim /etc/rsyncd.conf,加入以下配置

uid = root      #工作中指定用户(可以不指定为0)
gid = root
port = 873
use chroot = no #相当于黑洞.出错定位
max connections = 200   #有多少个客户端同时传文件
timeout = 300   #超时时间
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors   #表示出现错误忽略错误
read only = no  #表示网络权限可写(本地控制真正可写)
list = no       #这里设置IP或让不让同步
hosts allow = 172.16.18.3       #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下 逗号隔开
auth users = rsync      #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开(认证用户)
secrets file = /etc/rsync.password      #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
#fake supper = yes

[upload]        #同步模块名称,(这个模块就是待会儿对端写脚本的里面一个参数的名称)
path = /opt/upload/     ##需要同步的目录(准确的说是同步过来后放到哪里的目录路径)

4、创建用户

useradd rsync
passwd rsync   # 设置密码
# 创建用户认证文件
vim /etc/rsync.password
#rsync:rsync 	#用户名:密码,可以设置多个,每行一个用户名:密码
#设置文件权限
chmod 600 /etc/rsync.password

5、设置同步目录权限

chmod 765 /opt/upload/

6、启动rsync

systemctl start rsyncd

源服务器

1、关闭selinux

# 关闭seLinux
setenforce 0
# 查看seLinux状态
# getenforce
# /usr/sbin/sestatus -v    #如果SELinux status参数为enabled即为开启状态

2、安装rsync

我这里已经安装过了,所以这里不在列出,需要的自行百度

验证rsync安装情况:rpm -qa | grep rsync

3、创建认证密码文件

vim /etc/rsync.password
# rsync  # 这里是服务器端rsync用户的密码
#设置rsync.password文件权限
chmod 600 /etc/rsync.password

4、启动rsync

systemctl start rsyncd

5、验证rsync

cd /opt/upload
touch a.txt
rsync -avH --port=873 --delete --progress /opt/upload/ rsync@172.16.18.2::upload --password-file=/etc/rsync.password
# 注:目标服务器ip后面写的是在目标服务器上面rsync配置文件里面定义的模块名称

安装inotify-tools

1、查看是否安装

rpm -qa inotify-tools

2、安装文档

https://github.com/inotify-tools/inotify-tools/wiki

安装完成之后执行rpm -ql inotify-tools命令,查看安装详细,最主要的是inotifywait和inotifywatch

inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用

inotifywatch :收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

3、修改inotify默认参数(inotify默认内核参数值太小)

# 1、查看系统默认参数值,结果是:fs.inotify.max_queued_events = 16384
sysctl -a | grep max_queued_events

#fs.inotify.max_user_watches = 8192
sysctl -a | grep max_user_watches

#fs.inotify.max_user_instances = 128
sysctl -a | grep max_user_instances

# 2、修改参数:
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
# 3、#vim /etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
#参数说明:
#max_queued_events:inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
#max_user_watches:要同步的文件包含多少目录,可以用:find /home_test -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home_test为同步文件目录)
#max_user_instances:每个用户创建inotify实例最大值

配置inotify脚本,实现自动同步

1、配置inotify.sh脚本,vim /home/scripts/inotify.sh

#!/bin/bash
Path="/opt/upload/"
backup_Server="172.16.18.2"
#不需要同步的目录,如果有多个,每一行写一个目录,使用相对于同步模块的路径
excludedir="/home/scripts/exclude.list"			
user="rsync"
pass_file="/etc/rsync.password"
module="upload"
/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete $Path | while read line
do
    if [ -f $line ];then
        rsync -azH $line --delete --progress --exclude-from=$excludedir $user@$backup_Server::$module --password-file=$pass_file
    else
        cd $Path &&\
        rsync -azH ./ --delete --progress --exclude-from=$excludedir $user@$backup_Server::$module --password-file=$pass_file
    fi
done

2、设置inotify.sh文件执行的权限

chmod +x inotify.sh

3、启动脚本

(1)不重启服务器的情况:sh /home/scripts/inotify.sh &

(2)设置开机自动执行,需要重启服务器:

#设置脚本开机自动执行
#vim /etc/rc.d/rc.local #编辑,在最后添加一行
bash /home/scripts/inotify.sh & #设置开机自动在后台运行脚本
# chmod +x /etc/rc.d/rc.local
# systemctl enable rc-local

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值