关于linux:Linux下inotify-rsync实现文件实时同步

41次阅读

共计 5309 个字符,预计需要花费 14 分钟才能阅读完成。

一、什么是 rsync

rsync:“remote sync”是一个本地近程同步文件的工具。在第一次连通实现时,会把整份文件传输一次,下一次就只传送两个文件之间不同的局部。

二、rsync 同步的两种形式

1)间接应用 rsync 命令,应用 SSH 协定,默认为 22 端口
2)rsync daemon 模式,应用 rsync 协定,默认为 873 端口

三、同步命令

三种办法的同步命令之间的区别就是“:”的个数,本地同步无“:”,命令行同步一个“:”,daemon 模式的同步两个”:“。

1)本地文件同步

rsync [OPTION...] SRC... [DEST]

2)本地与近程同步

pull 办法:

rsync [OPTION...] [USER@]HOST:SRC... [DEST]

push 办法
 
rsync [OPTION...] SRC... [USER@]HOST:DEST

3)应用 rsync 过程形式
pull 办法
 
rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

push 办法:

rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST)

四、详细描述

remote sync 是一个数据镜像备份工具,采纳 rsync 算法,能够将一个客户机和近程文件服务器之间的文件进行同步,也能够在本地零碎中将数据从一个分区备份到另一个分区。如果 rsync 在备份过程中呈现了数据传输中断,复原后能够持续传输不统一的局部。rsync 能够执行残缺备份与增量备份。

特点:
1):能够镜像保留整个目录树和文件系统 2):很容易做到放弃原来文件的权限、工夫、软硬连贯
3):无需非凡权限即可装置
4):能够增量同步数据,文件传输效率高
5):能够应用 rcp、ssh 等形式来传输文件,当然也能够间接通过 socket 连贯
6):反对匿名传输

五、参数详解
1)罕用参数

-t:将源文件的 modify time 也同步到指标机器。它会在同步前先比照两边文件的工夫戳和文件大小,如果统一,则认为两边文件一样,对次文件就不进行采取更新动作。如果指标端的文件的工夫戳,大小和源端完全一致,但凑巧内容不一样时,rsync 时发现不了的。解决这个的方法是应用 I 参数
-I:(大写 i)挨个文件发动数据同步 -v:获取日志信息
-z:先压缩再传输
-r:递归,级联的进行同步
-a:除了递归同步外,还能够同步元信息(权限、批改工夫等)-n:模仿命令执行的后果,并不是真正的执行命令 -l(小写 L):同步链接文件时
-p:放弃源文件的权限 perserve permissions
-H:同步硬链接
-g -o:放弃所属组和属主
-delete:删除只存在与目标目录,不存在于源目录的文件
-exclude:排除某个文件
-exclude-from:排除写在某个文件里的所有文件名
-progress:显示出传输进度信息
-partial:断点续传

2、所有参数

PDF 版本可下载:
 

 链接: https://pan.baidu.com/s/1Gd2HUbC_ZIL8C4N0ntpAZw  
明码: 5dsb
五、常用命令
1)将源目录复制到目标端

rsync -av source_path  destination_pathrsync -av zhongjiang.sh apt@10.0.0.128:/home/apt/

-a:示意要进行归档
-v:示意在 stdout 上打印出细节信息或进度

2)压缩传输

通过网络进行传输时,压缩数据可能明显改善传输效率。用 rsync - z 指定在网络传输时压缩数据
 
rsync -avz source destination

3)将目录下的内容同步到另一个目录

 
rsync -av /shell/ apt@10.0.0.128:/home/apt/lop

4)将目录自身同步到另一个目录

 

rsync -av /shell/lll apt@10.0.0.128:/home/apt/lop

5)归档的过程中排除局部文件

–exclude PATTERN
 
rsync -avz /shell/lll apt@10.0.0.128:/home/apt/lllop --exclude "*.txt"

6)排除文件名在文件里的文件

应用 rsync 进行归档的过程中排除局部文件,把不须要的文件名写在 file 外面 –exclude-from FILEPATH

rsync -avz /shell/lll apt@10.0.0.128:/home/apt/lllop --exclude-from /shell/file
 

7)在更新 rsync 备份时,删除不存在的文件

 
rsync -avz /shell/lll apt@10.0.0.128:/home/apt/lllop --delete

六、daemon 模式
1:daemon 模式配置文件

rsync 以 daemon 形式运行的时候应用配置文件为 rsyncd.conf

2:服务端与客户端

应用 daemon 模式的时候,肯定要分分明服务端和客户端,与平时了解的服务端与客户端不太一样,被同步的一端为服务端,要把文件同步到另一端的源端为客户端。
     

3:文件格式

1)rsyncd.conf 配置文件由模块和参数组成,一个模块以写在方括号里的模块名称开始,直到下一个模块,模块里蕴含由“name = value”格局的参数。
2)文件是基于行的,每一行代表一个模块名或者参数

4:启动形式

daemon 模式运行必须启动的时候加参数 –daemon 

rsync --daemon

5:模块配置

1)服务端(指标端,被同步的一端)的配置文件

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

# 全局配置
uid = root
gid = root
use chroot = no
max connections = 2
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock

# 模块配置
[test]
comment = "同步 nginx 的配置文件"
path = /captain/shell
read only = no
auth users = rsync
secrets file = /etc/rsyncd.secrets
list = no

全局配置
1)uid、gid:当应用非 root 账号时,那么肯定要确保服务的的文件夹是否有该非 root 账号写入的权限
2)use chroot = no:是否能够切换到 root 目录,当 chroot 为 yes 的时候,客户端连贯模块的时候,先 chroot 到模块参数指定的目录下,必须应用 root 权限,端口号必须是 1024 以内,且不能备份 path 门路外的链接文件
3)max connections = 2:示意同时最大的连接数,也就是同时只能有两个客户端对本人进行连贯

并且此选项必须与 lock file = /var/run/rsyncd.lock 独特应用,若不指定,默认为 /var/run/rsyncd.lock

模块局部

每一个模块局部都是一个文件夹或者文件的 rsync 同步

1)[modulname]:模块的名称

2)path = /captain/shell:示意的是当客户端把数据同步过去将保留的门路

3)read only = no:如果为只读,那么将不能进行写同步,所以必须敞开

4)auth users = rsync:用来进行同步的用户,不须要零碎用户中有,虚构的就行

5)secrets file = /etc/rsyncd.secrets:示意的是账号密码文件,此文件可随便指定,文件里必须以 username:password 的格局
 
rsync:123456 此文件权限必须为 600,否则会报错

6)list = no:示意的是当服务端回绝客户端的申请时,是否是间接显示权限回绝,还是事实模块不存在,个别与 hosts allow 和 hosts deny 一起应用, 当一个被服务端回绝的申请进来时,如果设置为 list = no,那么间接返回模块不存在

2、服务端账号密码文件

vim /etc/rsyncd.secrets

rsync:123456
3、客户端配置文件

客户端(源端,需将此台机器上的文件同步进来)的配置文件只需做简略的批改,设置日志文件和 pid 文件门路,而后启动 rsync 即可

pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
4、客户端密码文件

vim /etc/rsyncd.passwd

123456
5、启动 dameon

别离在服务端和客户端启动 rsync

rsync --daemon
6、同步命令 
rsync -avz --password-file=/etc/rsyncd.passwd /data/shell/ rsync@192.168.1.103::test

-avz:示意同步过程中输入信息显示的格局

–password-file=/etc/rsyncd.passwd:示意客户端将拿此明码去服务端进行认证,所以这个文件里的机密为下面服务的所设置的明码,只需 passwd

/data/shell/:示意源目录,将要把此目录下的所有文件同步到远端。注:这里有无 / 的区别:有 / 的时候示意的是 /data/shell/ 目录下的货色同步过来,而无 / 的时候示意的是把 shell 目录同步过来

七、监控目录变动
1、查看内核是否反对 inotify 机制 

cat /boot/config-$(uname -r)|grep CONFIG_INOTIFY_USER=y

2、装置

 
yum install inotify-tools

3、监控某个目录的变动

 
inotifywait -rme modify,attrib,move,close_write,create,delete,delete_self /software/mminotifywait -mqr --format '%Xe %w%f' -e modify,create,delete,attrib /data/

4、监控除了某个目录

 
inotifywait --exclude '^/software/mm/ll' -rme modify,move,close_write,create,delete,delete_self /software/mm

5:统计文件目录下的变动次数

inotifywatch -v -e access -e modify -t 120  -r /software/mm/

6、监控脚本
#!/bin/bash

#指标 IP
ip1=10.0.0.75
rsync_passwd_file=/etc/rsync.secrets

/usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e create,move,attrib,open,close,modify /test | while read files
do
   echo $files 
   EVENT=`echo $files|awk -F""'{print $1}'`
   echo $EVENT
   File=`echo $files|awk -F""'{print $2}'`
   echo $File
   if [[$EVENT = "CREATE"]] || [[$EVENT = "MODIFY"]] || [[$EVENT = "MOVED_TO"]]  ;then
        echo "Create or Modify or Moved_to"
        rsync -avzcr --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydata
   fi

   if [[$EVENT = "DELETE"]] || [[$EVENT = "MOVED_FROM"]] ;then
        echo "Delete or Moved_From"
        rsync -avzcr --delete --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydata
   fi

   if [[$EVENT = "ATTRIB"]] ;then
        echo "Attribe"

        if [[! -d $File]] ;then
            rsync -avzcr --password-file=$rsync_passwd_file $(dirname $File) root@$ip1::mydata
        fi
   fi
done
八、作者简介

李先生(Lemon),高级运维工程师(自称),SRE 专家(指标),幻想在 35 岁买一辆保时捷。喜爱钻研底层技术,认为底层根底才是王道。所有新技术都离不开操作系统(CPU、内存、磁盘)、网络等。保持输入输出,记录本人学习的点滴,在平庸中保持前行,总有一天会遇见不一样的本人。公众号:运维汪(ID:Leeeee_Li)。

正文完
 0