使用rsync+inotify实现/www目录实时同步

使用rsync+inotify实现/www目录实时同步

inotify:对同步数据目录信息的监控
rsync:完成对数据的同步

环境准备:

IP操作系统及版本描述
10.0.0.7CentOS-7.9data-server,inotify
10.0.0.17CentOS-7.9backup-server,rsync
#列出下面的文件,说明服务器内核支持inotify
[root@data ~]#ls -l /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Mar 21 09:01 max_queued_events
-rw-r--r-- 1 root root 0 Mar 21 09:01 max_user_instances
-rw-r--r-- 1 root root 0 Mar 21 09:01 max_user_watches

[root@data ~]#cat /proc/sys/fs/inotify/max_queued_events
16384
[root@data ~]#cat /proc/sys/fs/inotify/max_user_instances
128
[root@data ~]#cat /proc/sys/fs/inotify/max_user_watches
8192

inotify 内核参数说明:

  • max_queued_events:inotify 事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384, 生产环境建议调大,比如:327679
  • max_user_instances:每个用户创建inotify实例最大值,默认值:128
  • max_user_watches:可以监视的文件的总数量(inotifywait 单进程),默认值:8192,建议调大
[root@data ~]#vim /etc/sysctl.conf
fs.inotify.max_queued_events=66666
fs.inotify.max_user_watches=100000
[root@data ~]#sysctl -p
fs.inotify.max_queued_events = 66666
fs.inotify.max_user_watches = 100000
[root@data ~]#cat /proc/sys/fs/inotify/*
66666
128
100000

1、安装inotify-tools:基于epel源

[root@data ~]#yum -y install inotify-tools
[root@data ~]#rpm -ql inotify-tools
/usr/bin/inotifywait 
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
/usr/share/doc/inotify-tools-3.14/AUTHORS
/usr/share/doc/inotify-tools-3.14/COPYING
/usr/share/doc/inotify-tools-3.14/ChangeLog
/usr/share/doc/inotify-tools-3.14/NEWS
/usr/share/doc/inotify-tools-3.14/README
/usr/share/man/man1/inotifywait.1.gz
/usr/share/man/man1/inotifywatch.1.gz

inotify-tools包主要工具:

  • inotifywait: 在被监控的文件或目录上等待特定文件系统事件(open ,close,delete等)发生, 常用于实时同步的目录监控
  • inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

2、创建rsync服务器的配置文件

[root@backup ~]#rpm -q rsync
rsync-3.1.2-10.el7.x86_64
[root@backup ~]#vim /etc/rsyncd.conf
 uid = root  #提定以哪个用户来访问共享目录,将之指定为生成的文件所有者,默认为nobody
 gid = root  #默认为nobody
 max connections = 0
 ignore errors
 log file = /var/log/rsyncd.log
 pid file = /var/run/rsyncd.pid
 exclude = lost+found/
 lock file = /var/run/rsyncd.lock
 reverse lookup = no

[backup]  #每个模块名对应一个不同的path目录,如果同名后面模块生效
path = /data/backup/
comment = backup dir
read only = no  #默认是yes,即只读
auth users = rsyncuser  #默认anonymous可以访问rsync服务器
secrets file = /etc/rsync.pas

3、准备备份目录

[root@backup ~]#mkdir -pv /data/backup

4、生成验证文件

[root@backup ~]#echo "rsyncuser:xiaoming" > /etc/rsync.pas
[root@backup ~]#chmod 600 /etc/rsync.pas

5、启动rsyncd服务

[root@backup ~]#systemctl enable --now rsyncd
[root@backup ~]#ss -ntl
State      Recv-Q Send-Q              Local Address:Port                             Peer Address:Port
LISTEN     0      128                             *:22                                          *:*
LISTEN     0      100                     127.0.0.1:25                                          *:*
LISTEN     0      5                               *:873                                         *:*
LISTEN     0      128                          [::]:22                                       [::]:*
LISTEN     0      100                         [::1]:25                                       [::]:*
LISTEN     0      5                            [::]:873                                      [::]:*

6、数据服务器配置密码文件

[root@data ~]#echo "xiaoming" > /etc/rsync.pas
[root@data ~]#chmod 600 /etc/rsync.pas

7、查看远程rsync服务器的模块信息

[root@data ~]#rsync rsync://10.0.0.17
backup         	backup dir

8、交互式验证查看具体模块内的文件

[root@data ~]#rsync rsync://rsyncuser@10.0.0.17/backup
Password:

9、非交互式查看共享目录

[root@data ~]#rsync --password-file=/etc/rsync.pas rsync://rsyncuser@10.0.0.17/backup

10、客户端测试同步数据

[root@backup ~]#mkdir /data/www/
[root@data ~]#rsync -avz --delete --password-file=/etc/rsync.pas rsyncuser@10.0.0.17::backup /data/www/
[root@data ~]#ll /data/
total 0
drwxr-xr-x 2 root root 6 Mar 21 10:26 www
[root@backup ~]#touch /data/www/a.txt
[root@data ~]#rsync -avz --delete --password-file=/etc/rsync.pas rsyncuser@10.0.0.17::backup /data/www/a.txt
[root@data ~]#ll /data/www/
total 0
drwxr-xr-x 2 root root 6 Mar 21 10:26 a.txt
[root@backup ~]#touch /data/www/test.txt
[root@data ~]#rsync -avz --delete --password-file=/etc/rsync.pas rsyncuser@10.0.0.17::backup /data/www/test.txt
[root@data ~]#ll /data/www/
total 0
drwxr-xr-x 2 root root 6 Mar 21 10:26 a.txt
drwxr-xr-x 2 root root 6 Mar 21 10:26 test.txt

11、shell 脚本实现实时数据同步

注意: 此脚本执行前先确保两主机初始数据处于同步状态,此脚本实现后续的数据同步

#数据服务器上创建inotify_rsync.sh脚本

[root@data ~]#vim inotify_rsync.sh
#!/bin/bash
SRC='/data/www/' #注意最后的/
DEST='rsyncuser@10.0.0.17::backup'
rpm -q rsync &> /dev/null || yum -y install rsync
inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pas $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done

[root@data ~]#bash -n inotify_rsync.sh

[root@data ~]#ls /data/www/
a.txt  test.txt
[root@data ~]#cd /data/www/
[root@data www]#ls
a.txt  test.txt
[root@data www]#rm -rf *.txt
[root@data www]#touch b.txt
[root@data www]#touch a.txt
[root@data www]#ls
a.txt  b.txt
[root@data www]#dd if=/dev/zero of=f1.img bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 65.0319 s, 16.1 MB/s
[root@data www]#ll f1.img
-rw-r--r-- 1 root root 1048576000 Mar 21 12:42 f1.img
[root@data www]#chown chen f1.img
[root@data www]#ll f1.img
-rw-r--r-- 1 chen root 1048576000 Mar 21 12:42 f1.img
[root@data www]#mv f1.img f2.img
[root@data www]#ll f2.img
-rw-r--r-- 1 chen root 1048576000 Mar 21 12:42 f2.img


[root@backup ~]#watch -n0.5 ls -l /data/backup/
Every 0.5s: ls -l /data/backup/                                                               Mon Mar 21 12:53:42 2022

total 1024000
-rw-r--r-- 1 root root          0 Mar 21 12:32 a.txt
-rw-r--r-- 1 root root          0 Mar 21 12:31 b.txt
-rw-r--r-- 1 chen root 1048576000 Mar 21 12:42 f2.img

#查看文件传输日志
[root@data www]#tail -f /var/log/changelist.log
At 12:31:59 on 2022-03-21, file /data/www/b.txt was backuped up via rsync
At 12:31:59 on 2022-03-21, file /data/www/b.txt was backuped up via rsync
At 12:31:59 on 2022-03-21, file /data/www/b.txt was backuped up via rsync
At 12:32:52 on 2022-03-21, file /data/www/a.txt was backuped up via rsync
At 12:32:52 on 2022-03-21, file /data/www/a.txt was backuped up via rsync
At 12:32:52 on 2022-03-21, file /data/www/a.txt was backuped up via rsync
At 12:41:19 on 2022-03-21, file /data/www/f1.img was backuped up via rsync
At 12:42:24 on 2022-03-21, file /data/www/f1.img was backuped up via rsync
At 12:48:39 on 2022-03-21, file /data/www/f1.img was backuped up via rsync
At 12:51:24 on 2022-03-21, file /data/www/f2.img was backuped up via rsync

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在努力学习的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值