当前位置: 首页 > article >正文

rsync结合inotify实现文件实时同步

rsync

1.复制工具

  • 本地复制 远程复制
    cp dd

  • 跨主机传递文件
    rz sz ftp scp rsync nfs samba drdb

2.rsync作用

实现文件的备份,可以是当前主机,也可以是远程主机;可以完全备份,也可以是增量备份

2.1功能

类似于cp的复制功能
将本地主机的一个文件复制到另一个位置下
将本地主机的文件推送到远程主机;也可以从远程主机拉取到本地

2.2使用模式

  • shell模式:就是本地复制功能
  • 远程shell模式:可以利用ssh来实现数据的加密传输到远程主机
  • 服务器模式:rsync工作在守护进程模式下
  • 列表:ls 显示内容不做操作

备注:确保各个主机时间一致ntpdate

实现文件的时间同步
rsync+inotify
rsync+sersync

rsync:只负责传递文件到远程主机
inotify sersync:将发生改变的文件找出来

2.2.1模式1:local

Local: rsync [OPTION…] SRC… [DEST]

选项:
-v 输出详细过程信息
-a 使用归档模式,如果复制目录必须使用此选项
-z 压缩方式传输
-p复制文件过程,保持文件属性不变
-e “ssh [-p22]”指定所使用的传输通道 -r 递归复制,先复制目录,然后复制子目录

复制的是目录

[LAPTOP-MBCTH7PD]rsync -vz /etc/init.d tmp/
skipping directory init.d

sent 8 bytes  received 12 bytes  40.00 bytes/sec
total size is 0  speedup is 0.00
                                                                       

-需要添加参数a

[LAPTOP-MBCTH7PD]rsync -avz /etc/init.d tmp/
sending incremental file list
init.d/
init.d/ftp -> /bin/SCRDAE~1
init.d/http -> /bin/SCRDAE~1
init.d/nfs -> /bin/SCRDAE~1
init.d/ssh -> /bin/SCRDAE~1
init.d/telnet -> /bin/SCRDAE~1
init.d/tftp -> /bin/SCRDAE~1
init.d/vnc -> /bin/SCRDAE~1

sent 251 bytes  received 37 bytes  576.00 bytes/sec
total size is 91  speedup is 0.32

2.2.2模式2:Access via remote shell:

Pull: rsync [OPTION…] [USER@]HOST:SRC… [DEST]

Push: rsync [OPTION…] SRC… [USER@]HOST:DEST

 ~/Desktop/tmp
[LAPTOP-MBCTH7PD]touch {1..10}.txt
[LAPTOP-MBCTH7PD]rsync -avz -e "ssh -p22" ./tmp/* root@10.4.7.6:/root/test/
stty: standard input: Inappropriate ioctl for device
X11 forwarding request failed on channel 0
sending incremental file list
1.txt
10.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt

sent 500 bytes  received 208 bytes  83.29 bytes/sec
total size is 4  speedup is 0.01

说明:md5sum在传递文件时候,会首先对比源和目的下的文件的特征码,只有特征码不同的时候,才会进行传递;rsync加ssh密钥认证方式,目的使用免密登录;先配置ssh,然后分发密钥

2.2.3模式3:守护进程模式

准备:关闭selinux;关闭防火墙;同步服务器时间

修改配置文件,让工作在守护进程模式

rsyncd.conf基本构成
全局参数
[模块1]
模块参数
[模块2]
模块参数

全局参数:
pid file:指定rsync进程的pid文件的路径和名称
lock file:指定rsync进程的所在文件路径和名称
log file:rsync的日志文件路径和名称
uid:指定rsync进程以什么用户身份运行,必须是系统用户
gid:组用户

模块参数:可以先写在全局部分
path:指定备份目录路径
use chroot :是否将用户锁定在家目录中
max connections:指定可以进行同时连接的用户最大数量
read only:只读
write only:只写
list:true|false列表  设置用户可以显示的所有模块名称
auth users:指定访问模块需要使用的用户名,这里指的是虚拟用户
secrets file:虚拟用户名与密码的数据库文件
hosts allow:指定可以访问模块或者rsync服务端的ip地址
hosts deny:黑名单 补充:两个参数都没有,所有用户访问,只有allow,只允许白名单访问,白名单优先级高级黑名单
timeout:指定空闲超时时间
pid file=/var/lock/rsync.pid
lock file=/var/lock/rsync.lock
log file=/var/log/rsync.log

[web]
path=/tmp/web
use chroot=no
write only=yes


[nfs]
path=/tmp/web
user chroot=no

3.实例

3.1配置服务器端

3.1.1 创建配置文件
[root@harbor etc]# vi /ect/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connection = 100
timeout = 100
pid file = /var/lock/rsync.pid
lock file = /var/lock/rsync.lock
log file =  /var/log/rsync.log

[mod1]
path = /rsync/web1
read only = false
hosts allow = 10.4.0.0/8
auth users = vuser1
fake super = yes
secrets file = /rsync/rsync.passwd
list = false

[mod2]
path = /rsync/web2
read only = false
hosts allow = 10.4.0.0/8
auth users = vuser2
fake super = yes
secrets file = /rsync/rsync.passwd
list = false

3.1.2.创建目录
[root@harbor ~]# mkdir -pv /rsync/web{1,2}
mkdir: 已创建目录 "/rsync/web1"
mkdir: 已创建目录 "/rsync/web2"
#修改属组
chown rsync:rsync /rsync/web{1,2}
3.1.3.创建用户,运行rsync的系统用户
[root@harbor ~]# grep rsync /etc/passwd
[root@harbor ~]# groupadd -r rsync
[root@harbor ~]# useradd -r -s /sbin/nologin -g rsync rsync

在这里插入图片描述

3.1.4.启动rsync
[root@harbor ~]# rsync --daemon
[root@harbor ~]#
[root@harbor ~]#
[root@harbor ~]# rsync --daemon
failed to create pid file /var/lock/rsync.pid: File exists
# 引用其他配置文件 --config=/path/to/confile
3.1.5.检查rsync端口,默认是873
[root@harbor ~]# ss -lnt|grep 873
LISTEN     0      5            *:873                      *:*
LISTEN     0      5         [::]:873                   [::]:*
[root@harbor ~]# netstat -ntlp|grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      84330/rsync
tcp6       0      0 :::873                  :::*                    LISTEN      84330/rsync
[root@harbor ~]# lsof -i :873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   84330 root    3u  IPv4 496039      0t0  TCP *:rsync (LISTEN)
rsync   84330 root    5u  IPv6 496040      0t0  TCP *:rsync (LISTEN)

3.1.6.创建虚拟文件用户
[root@harbor ~]# cd /rsync/
[root@harbor rsync]# touch rsync.passwd
[root@harbor rsync]# chmod 600 rsync.passwd #权限600
[root@harbor rsync]# vi rsync.passwd
vuser1:123456
vuser2:123456

3.2配置客户端

使用格式
rsync [options] [user@]host::moduleName /path/
rsync [options] /path/ [user@]host::moduleName

每次传输需要输入密码

3.2.1.创建密码文件
echo "123456">/etc/rsync.passwd
# 修改所属组
chmod 600 /etc/rsync.passwd
3.2.2.使用rsync来传递数据到服务器的端模块mod1中
rsync -avz /root/test/ vuser1@10.4.7.9::mod1 --password-file=/etc/rsync.passwd

注:–password-file=/etc/rsync.passwd 指定密码文件地址,不需要手动输入密码

报错:rsync: chgrp “.new.txt.FMIDJB” (in mod1) failed: Operation not permitted (1)

[root@hdss7-6 test]# rsync -avz /root/test/ vuser1@10.4.7.9::mod1 --password-file=/etc/rsync.passwd
sending incremental file list
rsync: chgrp "." (in mod1) failed: Operation not permitted (1)
./
new.txt
old.txt
txt.patch
rsync: chgrp ".new.txt.FMIDJB" (in mod1) failed: Operation not permitted (1)
rsync: chgrp ".old.txt.Al48gT" (in mod1) failed: Operation not permitted (1)
rsync: chgrp ".txt.patch.v8rIOa" (in mod1) failed: Operation not permitted (1)

sent 349 bytes  received 414 bytes  305.20 bytes/sec
total size is 207  speedup is 0.27
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]

在这里插入图片描述

解决办法:fake super=yes 用于允许非root用户,在备份目录创建文件

[root@hdss7-6 test]# rsync -avz /root/test/ vuser1@10.4.7.9::mod1 --password-file=/etc/rsync.passwd
sending incremental file list
./
new.txt
old.txt
txt.patch

sent 379 bytes  received 132 bytes  146.00 bytes/sec
total size is 207  speedup is 0.41

或者解决办法

经排查是由于-a参数导致的,因为-a是归档模式传输,并保持所有文件属性,等价于-rtopgDl(还没有具体深入研究),可以使用下面这个命令替代
 rsync -rltDvz /opt/ rsync_backup@10.0.0.41::backup

4 总结

4.1服务器端的配置

1.创建配置文件
2.创建密码文件,修改权限为600
3.创建系统用户
4.创建模块对应的目录,修改目录的属主属组为系统用户
5.启动daemon模式

4.2客户端配置:

1.创建虚拟用户的密码文件,权限为600
2.向模块传输文件或者从目录拉取文件

如果出现错误:
1.检查日志
2.检查selinux、iptables是否启动
3.检查虚拟用户的目录权限所有组是否正确,以及secrets密码是600

5.重启服务

[root@harbor rsync]# ps -ef|grep rsync
root      84330      1  0 11:22 ?        00:00:00 rsync --daemon
root      85446  81838  0 11:37 pts/1    00:00:00 grep --color=auto rsync
[root@harbor rsync]# kill -9 84330
[root@harbor rsync]# rsync --daemon
[root@harbor rsync]# failed to create pid file /var/lock/rsync.pid: File exists
[root@harbor rsync]# rm -rf /var/lock/rsync.pid
[root@harbor rsync]# rsync --daemon
[root@harbor rsync]# lsof -i :873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   85521 root    3u  IPv4 502792      0t0  TCP *:rsync (LISTEN)
rsync   85521 root    5u  IPv6 502793      0t0  TCP *:rsync (LISTEN)

服务脚本存放位置
CentOS 7及以上版本
系统服务 :存放在 /usr/lib/systemd/system/ 目录下。

用户服务 :存放在 /usr/lib/systemd/user/ 目录下。

CentOS 6
服务脚本通常放在 /etc/init.d/ 目录下。

编写rsync脚本/usr/lib/systemd/system/rsyncd.service

[Unit]
Description=fast remote file copy program daemon
ConditionPathExists=/etc/rsyncd.conf

[Service]
EnvironmentFile=/etc/sysconfig/rsyncd
ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS"

[Install]
WantedBy=multi-user.target
~

6.执行操作

6.1 10.4.7.6客户端

[root@hdss7-6 ~]# rsync -avz /root/test vuser1@10.4.7.9::mod1
Password:
sending incremental file list
test/
test/10.txt
test/new.txt
test/old.txt
test/txt.patch

sent 490 bytes  received 104 bytes  108.00 bytes/sec
total size is 203  speedup is 0.34

6.2 10.4.7.9服务端

[root@harbor web1]# pwd
/rsync/web1
[root@harbor web1]# ls
test
rsync -avz /root/test vuser1@10.4.7.9::mod1 
会将整个test目录传递

rsync -avz /root/test/ vuser1@10.4.7.9::mod1
传递目录下面的文件

–delete 让客户端与服务器端的文件完全一致
–exclude 在进行文件传送的时候,排除指定的文件

7. rsync客户端排除指定文件方式

7. 1方式一:排除一个文件–exclude=file

[root@hdss7-6 test]# rsync -avz /root/test/ --exclude=3.txt vuser1@10.4.7.9::mod1
Password:
sending incremental file list
./
1.txt
10.txt
2.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
new.txt
old.txt
txt.patch

sent 887 bytes  received 255 bytes  175.69 bytes/sec
total size is 203  speedup is 0.18

7. 2方式二:排除多个个文件–exclude={file,file2,file3}

[root@hdss7-6 test]# touch {12,13,14}.txt
[root@hdss7-6 test]# ls
10.txt  12.txt  13.txt  14.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  new.txt  old.txt  txt.patch
[root@hdss7-6 test]# rsync -avz /root/test/ --exclude={3.txt,13.txt,14.txt} vuser1@10.4.7.9::mod1
Password:
sending incremental file list
./
12.txt

sent 331 bytes  received 46 bytes  68.55 bytes/sec
total size is 203  speedup is 0.54

7. 3 方式三:通配符的效果

[root@hdss7-6 test]# touch {a,b,c}.txt
[root@hdss7-6 test]# touch {a,b,c}.conf
[root@hdss7-6 test]# rsync -avz /root/test/ --exclude=*.txt vuser1@10.4.7.9::mod1
Password:
sending incremental file list
./
a.conf
b.conf
c.conf

sent 242 bytes  received 84 bytes  59.27 bytes/sec
total size is 143  speedup is 0.44

7. 4服务端配置

man rsyncd.conf配置文件

 exclude
              This parameter takes a space-separated list of daemon exclude patterns.  As with the client --exclude option, patterns can be qualified with "- " or "+ "
              to explicitly indicate exclude/include.  Only one "exclude" parameter can apply to a given module.  See the "filter" parameter for a description  of  how
              excluded files affect the daemon.

修改rsyncd.conf模块的参数exclude,列表以空格分开

exclude =a.txt b.txt c.txt

8.完全同步原理

在文件的传输过程中
–delete 使目标目录内容和源保持目录一致,删除不同的文件
1.测试客户端

[root@hdss7-6 test]# rsync -avz --delete /root/test/ vuser1@10.4.7.9::mod1 --password-file=/etc/rsync.passwd
sending incremental file list
deleting test/txt.patch
deleting test/old.txt
deleting test/new.txt
deleting test/10.txt
deleting test/
deleting txt.patch
deleting old.txt
deleting new.txt
deleting c.conf
deleting b.conf
deleting a.conf
deleting 9.txt
deleting 8.txt
deleting 7.txt
deleting 6.txt
deleting 5.txt
deleting 4.txt
deleting 2.txt
deleting 12.txt
deleting 10.txt
deleting 1.txt
./

sent 50 bytes  received 254 bytes  121.60 bytes/sec
total size is 0  speedup is 0.00

拉取文件

[root@hdss7-6 test]# rsync -avz --delete vuser1@10.4.7.9::mod1 /root/test/ --password-file=/etc/rsync.passwd
receiving incremental file list
./
deleting 3.txt
1.txt
2.txt

sent 69 bytes  received 171 bytes  96.00 bytes/sec
total size is 0  speedup is 0.00
[root@hdss7-6 test]# ls
1.txt  2.txt

inotify

1.功能

  • 可以监控指定目录下的文件,
  • 当文件发生了更改,则会触发事件,输出触发事件的文件信息
  • 监控事件
    创建
    删除
    修改
    移动

rsync+inotify实现文件实时同步

2.二进制方式安装intoify

2.1 下载安装包

$ wget https://codeload.github.com/rvoicilas/inotify-tools/zip/master 

2.2 编译安装

$ tar zxvf inotify-tools-*.*.tar.gz   
$ cd inotify-tools-*.*  
$ ./configure --prefix=/usr/local/inotify  
$ make && make install  

2.3 查看安装路径

[root@hdss7-6 test]# find /usr/local/ -name "inotify*"
/usr/local/inotify
/usr/local/inotify/share/doc/inotify-tools
/usr/local/inotify/share/man/man1/inotifywait.1
/usr/local/inotify/share/man/man1/inotifywatch.1
/usr/local/inotify/include/inotifytools
/usr/local/inotify/include/inotifytools/inotifytools.h
/usr/local/inotify/include/inotifytools/inotify-nosys.h
/usr/local/inotify/include/inotifytools/inotify.h
/usr/local/inotify/bin/inotifywait
/usr/local/inotify/bin/inotifywatch

2.4 创建软链接

[root@hdss7-6 bin]# ln -s  /usr/local/inotify/bin/inotifywait /usr/bin/inotifywait
[root@hdss7-6 bin]# ln -s  /usr/local/inotify/bin/inotifywatch /usr/bin/inotifywatch

3. inotifywait

inotify安装在客户端
inotifywait :真正实现文件监控程序
inotifywatch:数据统计

inotifywait:

3.1 参数选项

-r 递归,对目录中的子目录中的文件做监控
-q :仅仅打印少量信息打印监控事件
-m 一直处于监控状态 前端运行
-d 以守护进程方式运行 后台运行
-o file:将监控事件输出到文件
-s :将错误信息输出系统日志
—excludei:忽略文件的大小写
-e :指定要监控的事件
access:访问
modify:编辑事件
attrib:修改文件属性 修改文件元数据
close_write:
close_nowrite:
close: 无论以什么方式打开文件
move_to:移除
move:移动
create:创建
delete:删除
–timefmt :指定发生记录的事件的时间点格式
日期格式man date可以查看

  FORMAT controls the output.  Interpreted sequences are:

       %%     a literal %
       %a     locale's abbreviated weekday name (e.g., Sun)
       %A     locale's full weekday name (e.g., Sunday)
       %b     locale's abbreviated month name (e.g., Jan)
       %B     locale's full month name (e.g., January)
       %c     locale's date and time (e.g., Thu Mar  3 23:05:25 2005)
       %C     century; like %Y, except omit last two digits (e.g., 20)
       %d     day of month (e.g., 01)
       %D     date; same as %m/%d/%y
       %e     day of month, space padded; same as %_d
       %F     full date; same as %Y-%m-%d
       %g     last two digits of year of ISO week number (see %G)
       %G     year of ISO week number (see %V); normally useful only with %V
       %h     same as %b
       %H     hour (00..23)
       %I     hour (01..12)
       %j     day of year (001..366)
       %k     hour, space padded ( 0..23); same as %_H
       %l     hour, space padded ( 1..12); same as %_I
       %m     month (01..12)
       %M     minute (00..59)
       %n     a newline
       %N     nanoseconds (000000000..999999999)
       %p     locale's equivalent of either AM or PM; blank if not known
       %P     like %p, but lower case
       %r     locale's 12-hour clock time (e.g., 11:11:04 PM)
       %R     24-hour hour and minute; same as %H:%M
       %s     seconds since 1970-01-01 00:00:00 UTC
       %S     second (00..60)
       %t     a tab
       %T     time; same as %H:%M:%S
       %u     day of week (1..7); 1 is Monday
       %U     week number of year, with Sunday as first day of week (00..53)
       %V     ISO week number, with Monday as first day of week (01..53)
       %w     day of week (0..6); 0 is Sunday
       %W     week number of year, with Monday as first day of week (00..53)
       %x     locale's date representation (e.g., 12/31/99)
       %X     locale's time representation (e.g., 23:13:48)
       %y     last two digits of year (00..99)
       %Y     year
       %z     +hhmm numeric time zone (e.g., -0400)
       %:z    +hh:mm numeric time zone (e.g., -04:00)
       %::z   +hh:mm:ss numeric time zone (e.g., -04:00:00)
       %:::z  numeric time zone with : to necessary precision (e.g., -04, +05:30)
       %Z     alphabetic time zone abbreviation (e.g., EDT)

–format :指定当发生事件以后输出的信息,以及输出的个数
%f:记录发生事件的文件名
%w:记录事件发生的文件所在目录的绝对路径
%e: 记录发生时间的名称 如果多个事件,用空格分割
%xe:记录发生时间的名称 如果多个事件,用x分割
%T: 输出发生事件的事件

3.2 实列

10.4.7.6 inotify

[root@hdss7-6 test]# mkdir {a,b,c}
[root@hdss7-6 test]# mkdir {a1,b1,c1}
[root@hdss7-6 test]# mkdir {a11,b11,c11}
[root@hdss7-6 test]# rm -rf a11
[root@hdss7-6 test]# touch a.txt

监控前端运行 打印少量信息,递归监控子目录

[root@hdss7-6 src]# ./inotifywait  -mrq --timefmt "%F%T" --format '%T %w%f' -e create,delete,modify /root/test
2025-01-1410:34:20 /root/test/a
2025-01-1410:34:20 /root/test/b
2025-01-1410:34:20 /root/test/c
^C
[root@hdss7-6 src]# ./inotifywait  -mrq --timefmt "%F%T" --format '%T %w%f%e' -e create,delete,modify /root/test
2025-01-1410:35:23 /root/test/a1CREATE,ISDIR
2025-01-1410:35:23 /root/test/b1CREATE,ISDIR
2025-01-1410:35:23 /root/test/c1CREATE,ISDIR
^C
[root@hdss7-6 src]# ./inotifywait  -mrq --timefmt "%F%T" --format '%T %w%f %e' -e create,delete,modify /root/test
2025-01-1410:35:53 /root/test/a11 CREATE,ISDIR
2025-01-1410:35:53 /root/test/b11 CREATE,ISDIR
2025-01-1410:35:53 /root/test/c11 CREATE,ISDIR
2025-01-1410:36:20 /root/test/a11 DELETE,ISDIR
2025-01-1410:36:38 /root/test/a.txt CREATE

3.3 创建脚本,将监控变化的文件传递给10.4.7.9服务器

vi rsync_inotify.sh

#!/bin/bash
prog="inotifywait"
events="create,delete,modify,attrib"
iopt="-mrq"

lpath="/root/test/"

rhost="10.4.7.6"
vuser1="vuser1"
secfile="/etc/rsync.passwd"
ropt="-az --delete"
modName="mod1"

$prog $iopt --format "%w%f" -e $event $lpath |while read line
do
	echo $line
	rsync $ropt $line $vuser1@10.4.7.9::$modName --password-file=$secfile
done

sersync

1.功能简介

rsync+sersync
sersync(也称为rsync inotify)是一个基于rsync和inotify的文件同步工具。它可以在文件发生更改时实时同步文件或目录。

2.安装sersync

10.4.7.6

2.1 下载文件

[root@hdss7-6 ~]# wget https://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
--2025-01-15 15:51:34--  https://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
正在解析主机 down.whsir.com (down.whsir.com)... 111.180.191.24
正在连接 down.whsir.com (down.whsir.com)|111.180.191.24|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:727290 (710K) [application/octet-stream]
正在保存至: “sersync2.5.4_64bit_binary_stable_final.tar.gz”

100%[==================================================================================================================================>] 727,290     4.16MB/s 用时 0.2s

2025-01-15 15:51:34 (4.16 MB/s) - 已保存 “sersync2.5.4_64bit_binary_stable_final.tar.gz” [727290/727290])

2.2 解压文件

[root@hdss7-6 ~]# tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /root/
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml

2.3. 创建目录,复制配置文件,移动bin文件

[root@hdss7-6 ~]# mv GNU-Linux-x86 sersync
[root@hdss7-6 ~]# cd sersync
[root@hdss7-6 sersync]# ls
confxml.xml  sersync2
[root@hdss7-6 sersync]# mkdir bin conf logs
[root@hdss7-6 sersync]# cp confxml.xml ./conf/confxml1.xml
[root@hdss7-6 sersync]# mv sersync2 ./bin/sersync
[root@hdss7-6 sersync]# ls
bin  conf  confxml.xml  logs

2.4. 配置文件

1.设置监控事件类型
2.设置rsync服务端的ip,模块名称,本地监控的目录
3.设置传输文件的时候需要身份认证信息相关信息
4.设置传输失败信息记录的文件位置

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="false"/>
    <filter start="false">
	<exclude expression="(.*)\.svn"></exclude>
	<exclude expression="(.*)\.gz"></exclude>
	<exclude expression="^info/*"></exclude>
	<exclude expression="^static/*"></exclude>
    </filter>
    <inotify>
	<delete start="true"/>
	<createFolder start="true"/>
	<createFile start="true"/>
	<closeWrite start="false"/>
	<moveFrom start="false"/>
	<moveTo start="false"/>
	<attrib start="true"/>
	<modify start="true"/>
    </inotify>

    <sersync>
	<!--设置rsync服务端的ip,模块名称,本地监控的目录-->
	<localpath watch="/root/test/">
	    <remote ip="10.4.7.9" name="mod1"/>
	    <!--<remote ip="192.168.8.39" name="tongbu"/>-->
	    <!--<remote ip="192.168.8.40" name="tongbu"/>-->
	</localpath>
	<!--设置传输文件的时候需要身份认证信息相关信息-->
	<rsync>
	    <commonParams params="-artuz"/>
	    <auth start="true" users="vuser1" passwordfile="/etc/rsync.passwd"/>
	    <userDefinedPort start="false" port="874"/><!-- port=874 -->
	    <timeout start="false" time="100"/><!-- timeout=100 -->
	    <ssh start="false"/>
	</rsync
	<!--设置传输失败信息记录的文件位置-->
	<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
	<crontab start="false" schedule="600"><!--600mins-->
	    <crontabfilter start="false">
		<exclude expression="*.php"></exclude>
		<exclude expression="info/*"></exclude>
	    </crontabfilter>
	</crontab>
	<plugin start="false" name="command"/>
    </sersync>

    <plugin name="command">
	<param prefix="/bin/sh" suffix="" ignoreError="true"/>	<!--prefix /opt/tongbu/mmm.sh suffix-->
	<filter start="false">
	    <include expression="(.*)\.php"/>
	    <include expression="(.*)\.sh"/>
	</filter>
    </plugin>

    <plugin name="socket">
	<localpath watch="/opt/tongbu">
	    <deshost ip="192.168.138.20" port="8009"/>
	</localpath>
    </plugin>
    <plugin name="refreshCDN">
	<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
	    <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
	    <sendurl base="http://pic.xoyo.com/cms"/>
	    <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
	</localpath>
    </plugin>
</head>

2.5. 配置环境变量

 echo "export PATH=$PATH:/root/sersync/bin/">/etc/profile.d/sersync.sh
 #配置生效
 source /etc/profile

2.6. 测试sersync

[root@hdss7-6 sersync]# sersync -h
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

2.7. 执行监控命令

#测试同步,没问题执行监控
rsync -artuz -R --delete ./   --include="5.txt" --exclude=*  vuser1@10.4.7.9::mod1 --password-file=/etc/rsync.passwd
#修改权限
[root@hdss7-6 test]# chmod 600 /etc/rsync.passwd
[root@hdss7-6 test]# sersync -rdo /root/sersync/conf/confxml1.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -r      rsync all the local files to the remote servers before the sersync work
option: -d      run as a daemon
option: -o      config xml name:  /root/sersync/conf/confxml1.xml
daemon thread num: 10
parse xml config file
host ip : localhost     host port: 8008
will ignore the inotify createFile event
daemon start,sersync run behind the console
use rsync password-file :
user is vuser1
passwordfile is         /etc/rsync.passwd
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /root/test && rsync -artuz -R --delete ./ vuser1@10.4.7.9::mod1 --password-file=/etc/rsync.passwd >/dev/null 2>&1
[root@hdss7-6 test]# run the sersync:
watch path is: /root/test
#查看进程
[root@hdss7-6 /]# ps -aux|grep sersync
root      16438  0.0  0.0  92324   704 ?        Ssl  16:17   0:00 sersync -rdo /root/sersync/conf/confxml1.xml
root      16486  0.0  0.0 112824   976 pts/0    S+   16:18   0:00 grep --color=auto sersync

2.8. 测试文件

[root@hdss7-6 test]# touch {1,2,3}.txt
[root@hdss7-6 test]# rm -rf {1,2,3}.txt

2.9.在10.4.7.9观察

在这里插入图片描述
在这里插入图片描述

2.10 脚本(后面未测)

#!/bin/bash
flist="/root/test"
path="/tmp/"
backdir="/backup"
dabao='/bak'
serfile="/etc/rsync.passwd"
ipaddr=$(ip addr|sed -n '9p'|egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|sed -nr 's#^.*inet (.*) brd(.*)$#\1#gp'|sed -rn 's#^(.*)/24#\1#gp')
cp -aL $flist $backdir$bak
[ -d $backdir/$ipaddr ] || mkdir -p $backdir/$ipaddr
cd $backdir
tar -cf $ipaddr`date +%F%T`.tar.gz $bak

find $backdir -mtime +7 -exec rm -rf {} \;
rsync -az -delete $backdir/ vuser1@10.4.7.9::mod1 --password-file=$serfile

[root@harbor bak]# ip addr|sed -n '9p'|egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|sed -nr 's#^.*inet (.*) brd(.*)$#\1#gp'|sed -rn 's#^(.*)/24#\1#gp'
10.4.7.9

md5验证

[root@harbor bak]# ls
2025-01-16.tar.gz  cron  html  iptables  log  rc.local
[root@harbor bak]# md5sum 2025-01-16.tar.gz
c996fc13e7c80842dc42f3a2148d960c  2025-01-16.tar.gz
[root@harbor bak]# md5sum 2025-01-16.tar.gz >checksum.log
[root@harbor bak]# export LANG=en_US.UTF-8
[root@harbor bak]# md5sum -c checksum.log
2025-01-16.tar.gz: OK
[root@harbor bak]# md5sum /etc/passwd >1.log
[root@harbor bak]# md5sum -c 1.log
/etc/passwd: OK
[root@harbor bak]# find /etc/ -name *.conf |xargs md5sum >2.log
[root@harbor bak]# cat 2.log |less

安装邮件服务

 yum -y install mailx

vi /etc/mail.rc

set bsdcompat
set from="Tracy-5-Cui@163.com"
set smtp=smtp.126.com 
set smtp-auth-user=Tracy-5-Cui@163.com #登录邮箱
set smtp-auth-password=zx1234 #授权码
set smtp-auth=login  #认证方式

echo "this is test for mail"|mail -s "hi qq mail" 1509492514@qq.com

http://www.kler.cn/a/508089.html

相关文章:

  • 在 C# 中的Lambda 表达式
  • lwip单网卡多ip的实现
  • 基于华为云车牌识别服务设计的停车场计费系统【华为开发者空间-鸿蒙】
  • 4.Proto 3 语法详解
  • Maven 配置本地仓库
  • 当父级元素设置了flex 布局 ,两个子元素都设置了flex :1, 但是当子元素放不下的时候会溢出父元素怎么解决 (css 样式问题)
  • Lua项目下SSRF利用Redis文件覆盖lua回显RCE
  • 人工智能之深度学习_[3] -PyTorch自动微分模块和构建线性回归模型
  • 1.1初探大模型:起源与发展
  • 如何将数据库字符集改为中文,让今后所有的数据库都支持中文
  • 二十三种设计模式-代理模式
  • IF=24.5! 综述:机器人纹理识别触觉感知和机器学习进展
  • 请求响应-
  • 【算法】差分
  • python爬取Boss直聘,分析北京招聘市场
  • Android-V lmkd 中的那些属性值
  • WORD转PDF脚本文件
  • 如何攻击一个服务器(仅用于教育及娱乐实验目的)
  • 从零用java实现 小红书 springboot vue uniapp (10)系统消息模块 接收推送消息优化
  • 浅谈计算机网络04 | 现代网络需求与技术支撑
  • C++内存分布
  • C++异常处理详解
  • P6周:VGG-16算法-Pytorch实现人脸识别
  • 深度学习 Pytorch 张量的索引、分片、合并以及维度调整
  • 【优选算法】四数之和(双指针算法)
  • 3D扫描仪在文博行业的应用有哪些?