首页 > 代码库 > 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远程实时增量同步