当前位置: 首页 > 工具软件 > inotify-tools > 使用案例 >

inotify-tools-3.14+rsync3.1.3实时同步安装部署

齐财
2023-12-01

服务版本说明

服务 版本号 备注
rsync rsync-3.1.3
inotify-tools inotify-tools-3.14

部署环境

系统环境:centos7.6
主机名:yhcs_1、yhcs_2
IP:192.168.43.176、192.168.43.177

下载路径

rsync下载:https://download.samba.org/pub/rsync/
inotify-tools下载:https://github.com/rvoicilas/inotify-tools/wiki

安装约定并创建目录

安装包存放目录:/data/software/rsync
安装包存放目录:/data/software/inotify-tools
安装目录:/usr/local/rsync
安装目录:/usr/local/inotify-tools
同步目录:/data/backup

[root@yhcs_1 ~]# mkdir -p /data/software/rsync
[root@yhcs_1 ~]# mkdir -p /data/software/inotify-tools
[root@yhcs_1 ~]# mkdir -p /data/backup

上传tar包并解压

[root@yhcs_1 ~]# cd /data/software/rsync
[root@yhcs_1 rsync]# rz -E
rz waiting to receive.
[root@yhcs_1 rsync]# tar -zxvf rsync-3.1.3.tar.gz
[root@yhcs_1 rsync]# cd /data/software/inotify-tools
[root@yhcs_1 inotify-tools]# rz -E
rz waiting to receive.
[root@yhcs_1 inotify-tools]# tar -zxvf inotify-tools-3.14.tar.gz

编译安装

[root@yhcs_1 rsync]# cd rsync-3.1.3
[root@yhcs_1 rsync-3.1.3]# ./configure --prefix=/usr/local/rsync/
[root@yhcs_1 rsync-3.1.3]# make && make install

配置文件(服务端)

[root@yhcs_1 ~]# cat /usr/local/rsync/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 4
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = .gz .tgz .zip .z .Z .rpm .deb .bz2
read only=yes #只读模式,后面部署inotify实时同步时需要改成false
write only=no
hosts allow=192.168.43.0/24
[databackup]
path = /data/backup/
list=no
ignore errors
auth user=rsync_eden
secrets file = /etc/rsyncd.passwd
comment = data
[datatest] #取个同步标签名称,后面使用同步命令时需要
path = /datatest/ #备用目录,本次不测试,有需要可直接改成自己需要的目录
list=no
ignore errors
auth user=rsync_eden
secrets file = /etc/rsyncd.passwd
comment = datatest

[root@yhcs_1 ~]# cat /etc/rsyncd.passwd
rsync_eden:qwe321 #设置同步的账户和密码,前者是配置文件中的auth user,后者是密码
[root@yhcs_1 ~]# chmod 600 /etc/rsyncd.passwd #赋予权限

启动服务

[root@yhcs_1 ~]#/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
[root@yhcs_1 ~]# ps -ef |grep rsync
root 10879 1 0 10:55 ? 00:00:00 /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
[root@yhcs_1 ~]# netstat -na |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp6 0 0 :::873 :: LISTEN

客户端部署

#先按主服务器编译安装rsync
[root@yhcs_2 ~]# cat /etc/rsyncd.passwd
qwe321
#与服务器端中的 rsyncd.passwd中的密码对应 客户端好像不配置密码文件也行
[root@yhcs_2 ~]# chmod 600 /etc/rsyncd.passwd #赋予权限
注意:仅需要服务器端开启rsync服务,客户端不需要开启

同步测试

#测试从yhcs_1(172.168.43.176)同步到yhcs_2(172.168.43.177)
#查看服务器端的/data/backup(配置文件设置的同步目录)下有哪些文件
[root@yhcs_1 ~]# cd /data/backup/
[root@yhcs_1 backup]# ls
[root@yhcs_1 backup]# echo hello > rsync_test.txt #创建文件用于测试
[root@yhcs_1 backup]# ls
rsync_test.txt
#查看客户端的/data/backup下有哪些文件
[root@yhcs_2 ~]# cd /data/backup/
[root@yhcs_2 backup]# ls
[root@yhcs_2 backup]#
#执行同步命令
[root@yhcs_2 backup]# /usr/local/rsync/bin/rsync -avzP --delete --password-file=/etc/rsyncd.passwd rsync_eden@192.168.43.176::databackup /data/backup/
receiving incremental file list
./
rsync_test.txt
6 100% 5.86kB/s 0:00:00 (xfr#1, to-chk=0/2)

sent 50 bytes received 134 bytes 122.67 bytes/sec
total size is 6 speedup is 0.03
[root@yhcs_2 backup]# ls
rsync_test.txt
#同步命令简述:rsync_eden是服务器端的auth user中的用户;@后的地址是服务端的IP地址;::是服务器端自定义的标签的名称(也就是服务端配置文件里[databackup]); /data/backup/是需要同步到本地(客户端)的目录,可修改成自己想要放到的目录(但操作前请查询rsync的同步参数的意义,不要用错参数,导致删错数据。如–delete参数,会把本地目录与服务端目录做对比,服务端没有的数据都删除掉)

#以上rsync的配置方法在网上比较常见,是从客户端主动获取获取服务端的数据。后面部署inotify时,就需要从修改下同步命令,把客户端的数据上传到服务器,并把inotify部署到客户端yhcs_2上。

部署inotify

[root@yhcs_2 ~]# cd /data/software/inotify/inotify-tools-3.14
[root@yhcs_2 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[root@yhcs_2 inotify-tools-3.14]# make && make install

编写实时同步脚本

#inotify软件命令
/usr/local/inotify/bin/inotifywait #开启实时监控服务(监控文件/目录数据变化)
/usr/local/inotify/bin/inotifywatch 统计事件变化次数
(1)rsync同步命令
/usr/local/rsync/bin/rsync -avz /data/backup/ rsync_eden@192.168.43.176::databackup --password-file=/etc/rsyncd.passwd
(2)inotify服务命令
/usr/local/inotify/bin/inotifywait -mrq --format ‘%w%f’ -e create,close_write,delete /data/backup/
(3)测试同步命令
[root@yhcs_2 etc]# /usr/local/rsync/bin/rsync -avz /data/backup/ rsync_eden@192.168.43.176::databackup --password-file=/etc/rsyncd.passwd
sending incremental file list
rsync: read error: Connection reset by peer (104)
rsync error: error in socket IO (code 10) at io.c(785) [sender=3.1.3]
#该报错网上查了一下,有说是配置文件不存在,有说是密码文件权限不够,具体排查了一下,发现这些文件都符合要求。最后查看了下系统日志,发现报错ERROR: module is read only,这个就是前面配置文件rsync.conf文件中read only=yes导致的,需要开通权限read only=false。

#为什么之前测试rsync同步时没有报错呢?那是因为同步的命令使得获取同步的方式不一致。前面是yhcs_1传数据到yhcs_2,现在是yhcs_2上传数据到yhcs_1,因此需要yhcs_1的配置文件把只读模式关掉,允许写入。

(4)编写实时同步脚本
#脚本没有进行更多的优化,后期有时间再做修改
[root@yhcs_2 backup]# cat /data/inotify.sh
#!/bin/bash

/usr/local/inotify/bin/inotifywait -mrq --format ‘%w%f’ -e create,close_write,delete /data/backup/ | while read line
do
/usr/local/rsync/bin/rsync -avz --delete /data/backup/ rsync_eden@192.168.43.176::databackup --password-file=/etc/rsyncd.passwd
done
(5)执行脚本(放在后台运行)
[root@yhcs_2 backup]# sh /data/inotify.sh &
[1] 13804

测试实时同步

#在yhcs_2 /data/backup目录下进行文件的增删改
[root@yhcs_2 backup]# ls
[root@yhcs_2 backup]# mkdir test
[root@yhcs_2 backup]# echo test > 1.txt
[root@yhcs_2 backup]# echo 123 >> 1.txt
[root@yhcs_2 backup]# rm -rf 1.txt
[root@yhcs_2 backup]# ls
test

#查看yhcs_1 /data/backup目录的变化
[root@yhcs_1 backup]# ls
test
[root@yhcs_1 backup]# cat 1.txt
test
[root@yhcs_1 backup]# cat 1.txt
test
123
[root@yhcs_1 backup]# ls
test

#注:可以 sh /data/inotify.sh 执行脚本,直观的观察数据的实时同步

rsync参数详解

-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
–progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=formAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息

参考文档(部分)

rsync常见问题及解决办法:https://blog.whsir.com/post-392.html
rsync的daemon模式:https://www.cnblogs.com/lemon-le/p/8395438.html
inotify+rsync实现实时同步:https://www.cnblogs.com/clsn/p/8022625.html#auto_id_26
真正的inotify+rsync实时同步 彻底告别同步慢:https://www.cnblogs.com/ginvip/p/6430986.html#4375148

心不死,土不埋,学无止境

 类似资料: