您的位置:首页 > 其它

rsync+inotify+ssh远程实时增量同步

2016-12-06 12:16 411 查看

一、准备工作

-主服务器:
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文件系统取消挂载,之后不再监听此文件系统。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ssh rsync inotify