inotify+rsync实现实时同步

引言:rsync实现数据备份,inotify监控文件系统提供通知功能,二者结合能够实现服务器之间文件的实时同步。

rsync

特性:

可以镜像保存整个目录树和文件系统;

增量同步数据,文件传输效率高;

可以保持原有文件的权限、时间等属性;

加密传输数据,保证了数据的安全性;

支持断点续传;

可以使用rcp、ssh等方式传输文件,也可以通过socket连接传输文件;

支持匿名传输;

rsync4种模式

本地shell

远程shell

查询(列表)模式

服务器模式

本地shell模式:

rsync -av orgi/file1 dest/

-a archive,归档模式,递归并保持文件属性

-v verbose

注意斜杠  目录名带斜杠orgi/ 表示复制目录下的所有文件,不带斜杠,复制目录本身

远程shell模式

rsync orgi [email protected]:/home/weblogic

默认情况下使用ssh作为传输机制

列表模式:

rsync -a [email protected]192.168.2.17:/home/weblogic

服务器模式:

基于C/S

A:服务器端,需要备份的文件

B:客户端,备份服务器

A配置:/etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log

[ixdba]
path = /home/weblogic/orgi
comment = ixdba file
igonre errors
read only = no
write only = no
hosts allow = *
hosts deny =
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass
/etc/server.pass
backup:ixdba123

B配置:

备份机不做任何配置,只需执行rsync同步操作即可;

rsync –vzrogpt --delete --progress --exclude “*access*”--exclude “debug*”[email protected]::ixdba  ixdba.net --password-file=/etc/server.pass

/etc/server.pass文件内容:

ixdba123

chmod 600 /etc/server.pass

--delete 指以服务器端A为基准,保持客户端和服务器端目录完全一直

放入定时任务即可实现文件定时同步

inotify+rsync实现数据实时备份:

查看内核是否支持inotify

ll /proc/sys/fs/inotify/

max_queued_events 表示调用inotify_init时分配inotify 实例中可排队的event数的最大值

max_user_instances 每一个real user可创建inotify实例上限

max_user_watches 每个inotify实例可监控最大目录数量

编译安装inotify-tools,https://ncu.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

安装后的两个命令行工具:

inotifywait

inotifywatch

inotify实时同步脚本:

说明:脚本按文件变更所在目录进行同步,对于百万级的文件数目也能实现很好的实时同步,如果全量同步,rsync进行文件校验时就会花费大量的时长和服务器资源,综合考虑,按目录进行同步数据较为理想。

#!/bin/bash
# 需要同步的源路径
src=/home/weblogic/orgi/
# 目标服务器上 rsync --daemon 发布的名称
des=ixdba
# rsync验证的密码文件
rsync_passwd_file=/etc/server.pass
# 目标服务器1
ip1=192.168.12.23
# 目标服务器2
#ip2=192.168.0.19
# rsync --daemon定义的验证用户名
user=backup

# 把监控到有发生更改的"文件路径列表"循环
/usr/local/bin/inotifywait -mrq --format  ‘%Xe %w%f‘ -e modify,create,delete,attrib,close_write,move ${src} | while read file
  do
        # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
        INO_EVENT=$(echo $file | awk ‘{print $1}‘)
	# 把inotify输出切割 把文件路径部分赋值给INO_FILE
        INO_FILE=$(echo $file | awk ‘{print $2}‘)
        echo "-------------------------------$(date)------------------------------------"
        echo $file
        #增加、修改、写入完成、移动进事件
        #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
        #判断事件类型
        if [[ $INO_EVENT =~ ‘CREATE‘ ]] || [[ $INO_EVENT =~ ‘MODIFY‘ ]] || [[ $INO_EVENT =~ ‘CLOSE_WRITE‘ ]] || [[ $INO_EVENT =~ ‘MOVED_TO‘ ]]
        then
                echo ‘CREATE or MODIFY or CLOSE_WRITE or MOVED_TO‘
		# INO_FILE变量代表路径哦  -c校验文件内容
                rsync -avzc --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
                #rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
                #仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
        fi
        #删除、移动出事件
        if [[ $INO_EVENT =~ ‘DELETE‘ ]] || [[ $INO_EVENT =~ ‘MOVED_FROM‘ ]]
        then
                echo ‘DELETE or MOVED_FROM‘
                rsync -avz --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
                #rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
                #看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间
        fi
        #修改属性事件 指 touch chgrp chmod chown等操作
        if [[ $INO_EVENT =~ ‘ATTRIB‘ ]]
        then
                echo ‘ATTRIB‘
                # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
                if [ ! -d "$INO_FILE" ]
                then
                        rsync -avzc --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
                        #rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
                fi
        fi
done

inotifywait 参数说明


参数名称


参数说明


-m,–monitor


始终保持事件监听状态


-r,–recursive


递归查询目录


-q,–quiet


只打印监控事件的信息


–excludei


排除文件或目录时,不区分大小写


-t,–timeout


超时时间


–timefmt


指定时间输出格式


–format


指定时间输出格式


-e,–event


后面指定删、增、改等事件

inotifywait events事件说明


事件名称


事件说明


access


读取文件或目录内容


modify


修改文件或目录内容


attrib


文件或目录的属性改变


close_write


修改真实文件内容


close_nowrite

 

close

 

open


文件或目录被打开


moved_to


文件或目录移动到


moved_from


文件或目录从移动


move


移动文件或目录移动到监视目录


create


在监视目录下创建文件或目录


delete


删除监视目录下的文件或目录


delete_self

 

unmount


卸载文件系统

时间: 2024-07-28 13:04:08

inotify+rsync实现实时同步的相关文章

inotify+rsync实现实时同步部署

1.1.架构规划 1.1.1架构规划准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server-inotify-tools) 192.168.1.14 Centos6.7 x86_64 rsync服务器端(rsync热备服务器) 192.168.1.17 1.1.2架构图 2.1 部署前检查 2.1.1 检查rsync热备服务器daemon是否起来 1 [[email protected] data]# lsof -i:873 2 COMMAND PID

CentOS 6.5 inotify+rsync做实时同步-企业实例(1.0)

inotify+rsync实时同步起源及简介 inotify服务机制 inotify实施准备 inotify配置是建立在rsync服务的基础上 inotify,sersync,lsyncd sersync功能更多,可以做各种过滤,但从性能上看,通过测试得出inotify性能更高,每秒钟能同步好几百张图片,inotify 150张就不能实时了 实施前检查rsync daemon是正常 [[email protected] oldboy]# ps -ef |grep daemon root     

inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)

1.准备环境 # 系统支持的话,下面的目录就会存在 ls /proc/sys/fs/inotify/ rpm -qa inotify-tools yum -y install inotify-tools 2.inotifywait监控目录状态变化 /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,close_write /data # 可以把时间去掉 /usr/bin/

inotify+rsync做实时同步

一.配置inotify随机启动 vi /etc/rc.local nohup /home/jenkins/inotify/inotify.sh > nohup.out 2>&1 & 二.inotify同步脚本 #!/bin/bash #param src=/home/jenkins/conf/ dst_module=/home/jenkins/conf/ user=jenkins /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:

inotify+rsync监控实时同步

监控到Centos7-001机器上的网站内容发生变化时,就同步Centos7-001:/var/www/html/目录到Centos7-002上 Centos7-001上所做的操作 安装 rsync # yum install rsync -y 生成密钥对 [[email protected] ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh

rsync、inotify实现web实时同步

. rsync.inotify实现web实时同步,布布扣,bubuko.com

sersync基于rsync+inotify实现数据实时同步

一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192.168.1.243 实时同步/var/atlassian目录到从服务器. 二.实施 1.从服务器192.168.1.243 rsync服务搭建 1.1安装软件包 wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz tar xf r

利用rsync+inotify实现数据实时同步脚本文件

将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133.96.7.101 host3=133.96.7.102 src=/data/www/ dst1=web1 dst2=web2 dst3=web3 user1=web1 user2=web2 user3=web3 /usr/local/inotify/bin/inotifywait -mrq --ti

20190308 samba服务、inotify和rsync实现实时同步、防火墙

Samba服务[root@centos7 ~]#yum install samba[root@centos7 ~]#systemctl start smb[root@centos7 ~]#ss -ntluNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 50 :139 : tcp LISTEN 0 50 :445 端口已开启 : 可以做共享了. 主配置文件:/etc/samba/smb.conf