首页 > 代码库 > rsync+inotify+ssh远程实时增量同步
rsync+inotify+ssh远程实时增量同步
一、准备工作
-主服务器:
Rsync,发起端
Inotify
Ssh
IP:192.168.10.128
-备份服务器
ssh,备份端
IP:192.168.10.129
二、部署过程
1、备份端建立上传用户,并设置权限
-创建用户
[root@backup ~]# useradd rput [root@backup ~]# passwd rput
-为同步目录设置访问权限
[root@backup ~]# chown -R rput:rput/var/www/html/ [root@backup ~]# ls -ld /var/www/html/ drwxr-xr-x. 2 rput rput 4096 8月 14 2013 /var/www/html/
2、发起端操作
-创建ssh密钥对,实现免交互
--创建密钥对
[root@master ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key(/root/.ssh/id_rsa): #回车 Enter passphrase (empty for no passphrase):#回车 Enter same passphrase again: #回车 Your identification has been saved in/root/.ssh/id_rsa. Your public key has been saved in/root/.ssh/id_rsa.pub. The key fingerprint is:
--将公钥发送至对端服务器
[root@master ~]# ssh-copy-id rput@192.168.10.129
-配置inotify
--调整inotify内核参数
[root@master ~]# vim /etc/sysctl.conf fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576 [root@master ~]# sysctl –p
---注:
max_queue_events:监控队列大小 max_user_instances:最多监控实例数 max_user_watches:每个实例最多监控文件数
-安装inotify-tools辅助工具
[root@master ~]# cd /usr/src/ [root@master src]# ll 总用量 360 drwxr-xr-x. 2 root root 4096 9月 23 2011 debug -rw-r--r--. 1 root root 358772 9月 25 20:53inotify-tools-3.14.tar.gz drwxr-xr-x. 3 root root 4096 9月 25 19:35 kernels [root@master src]# tar zxfinotify-tools-3.14.tar.gz [root@master src]# cd inotify-tools-3.14 [root@master inotify-tools-3.14]#./configure && make && make install
-编写脚本实现远程实时增量同步
[root@master ~]# vim rsync_inotify_ssh.sh #!/bin/bash rsync_cmd="rsync -azH --delete/var/www/html/ rput@192.168.10.129:/var/www/html" inotify_cmd="inotifywait -mrq -emodify,create,attrib,move,delete /var/www/html/" $inotify_cmd | while read a b c do if [ $(pgrep ^rsync$ | wc -l) -le 0 ];then $rsync_cmd fi done [root@master ~]# chmod 755rsync_inotify_ssh.sh
三、测试
-发起端
[root@master ~]# /root/rsync_inotify_ssh.sh& [1] 6788 [root@master ~]# touch /var/www/html/test1 [root@master ~]# touch /var/www/html/test2
-备份端
[root@backup ~]# ll /var/www/html/ 总用量 0 -rw-r--r--. 1 rput rput 0 9月 25 2016 test1 -rw-r--r--. 1 rput rput 0 9月 25 2016 test2
四、附录
1、rsync命令用法
-基本格式:
rsync [选项] 原始位置 目标位置
-常用选项:
-a:归档模式,递归并保留对象属性,等同于–rlptgoD --注: -r:递归模式,包含目录及子目录中所有文件 -l:对于符号链接文件仍然复制为符号链接文件 -p:保留文件的权限标记 -t:保留文件的时间标记 -g:保留文件的属组标记(仅超级用户使用) -o:保留文件的属主标记(仅超级用户使用) -D:保留设备文件及其他特殊文件 -v:显示同步过程的详细(verbose)信息 -z:在传输文件时进行压缩(compress) -H:保留硬连接文件 -A:保留ACL属性信息 --checksum:根据对象的校验和来决定是否跳过文件
2、关于inotify
-参考:
https://www.centos.bz/2012/06/inotify-tools-introduction/
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
-语法:
inotifywait [-hcmrq] [-e ] [-t ][–format ][–timefmt ] [… ]
-常用选项:
-h,–help 输出帮助信息 @ 排除不需要监视的文件,可以是相对路径,也可以是绝对路径。 –fromfile 从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。 -m, –monitor 接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。 -d, –daemon 跟–monitor一样,除了是在后台运行,需要指定 –outfile 把事情输出到一个文件。也意味着使用了–syslog。 -o, –outfile 输出事情到一个文件而不是标准输出。 -s, –syslog 输出错误信息到系统日志 -r, –recursive 监视一个目录下的所有子目录。 -q, –quiet 指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。 –exclude 正则匹配需要排除的文件,大小写敏感。 –excludei 正则匹配需要排除的文件,忽略大小写。 -t,–timeout 设置超时时间,如果为0,则无限期地执行下去。 -e, –event 指定监视的事件。 -c, –csv 输出csv格式。 –timefmt 指定时间格式,用于–format选项中的%T格式。 –format 指定输出格式。 %w 表示发生事件的目录 %f 表示发生事件的文件 %e 表示发生的事件 %Xe 事件以“X”分隔 %T 使用由–timefmt定义的时间格式
-可监听事件
access | 文件读取 |
modify | 文件更改。 |
attrib | 文件属性更改,如权限,时间戳等。 |
close_write | 以可写模式打开的文件被关闭,不代表此文件一定已经写入数据。 |
close_nowrite | 以只读模式打开的文件被关闭。 |
close | 文件被关闭,不管它是如何打开的。 |
open | 文件打开。 |
moved_to | 一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发。 |
moved_from | 一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发。 |
move | 包括moved_to和 moved_from |
move_self | 文件或目录被移除,之后不再监听此文件或目录。 |
create | 文件或目录创建 |
delete | 文件或目录删除 |
delete_self | 文件或目录移除,之后不再监听此文件或目录 |
unmount | 文件系统取消挂载,之后不再监听此文件系统。 |
本文出自 “JackeyGe” 博客,请务必保留此出处http://jackeyge.blog.51cto.com/12241288/1879944
rsync+inotify+ssh远程实时增量同步