Rsync的简单介绍及rsync+inotify实现实时同步更新

rsync是类unix系统下的数据镜像备份工具——remotesync。一款快速增量备份工具 Remote Sync,远程同步支持本地复制,或者与其他SSHrsync主机同步。Rsync是超级进程来管理的,服务端口为873

    特点:   

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

        2、有较高的数据传输效率;

        3、可借助于SSH实现安全数据传输;

        4 支持匿名传输

    工作模式:

        1shell模式,也称作本地模式

        2、远程shell模式,可以利用ssh协议承载其远程传输过程,命令有两种

        3、列表模式,仅列出源中的内容,-nv

        4、服务模式,此时rsync工作为守护进程,能接收客户端的数据同步请求;

 

下面为大家介绍rsync工具的使用

rsync常用命令的选项:

  -n: 同步测试,不执行真正的同步过程;

  -v: 详细输出模式

  -q: 静默模式

  -c: checksum,开启校验功能

  -r: 递归复制

  -a: 归档,保留文件的原有属性;

  -p: 保留文件的权限;

  -t: 保留文件的时间戳;

  -l: 保留符号链接

  -g: 保留属组

  -o: 保留属主

  -D:保留设备文件

 

  -e ssh: 使用ssh作为传输承载;

  -z: 压缩后传输;

 

  --progress: 显示进度条

  --stats: 显示如何执行压缩和传输

注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本向;如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要;

 

使用示例:
         [root@localhost~]# rsync -r --stats -e ssh --progress /etc/pam.d root@172.16.25.2:/rmp/
         从本机复制文件到另一主机


 

以下简单说下rsync工具的服务模式及rsyncinotify的组合使用实现数据实时同步更新

rsync服务模式

1、设定rsync服务器端

   # yum -y install xinetd

   # chkconfig rsync on

2、为rsync提供配置文件

   /etc/rsyncd.conf

   配置文件分两段:

   全局配置段:1

   共享配置段:多个

   配置示例:

   # Global Settings

   uid = nobody//运行RSYNC守护进程的用户

   gid = nobody//运行RSYNC守护进程的组

   use chroot = no//不使用chroot

   max connections = 10// 最大连接数无限制

   strict modes = yes//是否工作在严格模式下

   pid file = /var/run/rsyncd.pid//锁文件的存放位置

   log file = /var/log/rsyncd.log//日志记录文件的存放位置

   # Directory to be synced

   [tools]//这里是认证的模块名,在client端需要指定

   path = /data//需要做同步的目录,不可缺少

   ignore errors = yes//表示在复制文件的过程中,若发生错误,是继续复制(yes)还是终止复制(no)

   read only = no// 非只读

   write only = no//非只写

   hosts allow = 172.16.0.0/16//允许哪些主机来访问,做白名单的

   hosts deny = *//黑名单

   list = false//是否允许用户列出文件列表

   uid = root//

   gid = root

3、启动服务

   # service xinetd start

  启动以后查看是否监听于873/tcp端口

4、使用服务器启用认证功能

1)在共享定义处加配置便可实现

 [tools]

   path = /data

   ignore errors = yes

   read only = no

   write only = no

   hosts allow = 172.16.0.0/16

   hosts deny = *

   list = false

   uid = root

   gid = root

   auth users = USERNAME LIST//认证的用户名,如果没有这行则表明是匿名,此用户与系统无关

   secrets file = /etc/rsyncd.passwd//密码和用户名对比表,密码文件自己生成

   说明: USERNAME LIST为以逗号分隔的在rsyncd.passwd中存在用户名的列表;

2)创建密码文件(文件权限为600,此文件不能允许其他用户有权限,并且用户密码不能超过8位数)

  格式:username:password

3)重启下服务便实现认证功能

 

 

Rsync+inotify的使用

 实例是用两台服务器简单实现的,其中文件服务器的IP172.16.25.1inotify服务器的IP172.16.25.2

 先搭建文件服务器所需要的环境

[root@localhost ~]# yum install xinetd –y   //安装超级守护进程
[root@localhost ~]# mkdir /root/data              //创建共享目录
[root@localhost data]# vim /etc/rsyncd.conf  //配置rsync的服务配置文件(下面的文件配置项在上面的rsync服务模式中都已做详细的介绍,这里不在详细的说明)
# Global Settings
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
# Directory to be synced
[tools]
path = /root/data/
ignore errors = yes
read only = no
write only = no
hosts allow = 172.16.0.0/16
hosts deny = *
list = false
uid = root
gid = root
auth users = nydia
secrets file = /etc/rsyncd.passwd
[root@localhost data]# vim/etc/rsyncd.passwd //创建认证用户的密码文件
nydia:nydia  //文件内容只需填入用户和密码并使用:隔开即可,并设定此文件的权限为600
[root@localhost data]# chkconfig rsync on     //将服务加入启动列表中
[root@localhost data]# service xinetd start  //然后启动超级守护进程服务即完成rsync文件服务器的配置


 

Inotify服务器配置

先为大家介绍下inotify的概述及使用,然后再开始配置服务

Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。

inotifywait

语法:
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定义的时间格式

inotifywatch

语法:
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
参数:
-h, –help
输出帮助信息
-v, –verbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile 
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, –zero
输出表格的行和列,即使元素为空
–exclude 
正则匹配需要排除的文件,大小写敏感。
–excludei 
正则匹配需要排除的文件,忽略大小写。
-r, –recursive
监视一个目录下的所有子目录。
-t , –timeout 
设置超时时间
-e , –event 
只监听指定的事件。
-a , –ascending 
以指定事件升序排列。
-d , –descending 
以指定事件降序排列。

可监听事件

rsync的简单介绍及rsync+inotify实现实时同步更新_简单介绍

注:inotifywatch中的信息转载于http://www.51rhca.com/archives/133文中

简单的介绍完以后就接着开始配置服务了

[root@localhost ~]#yum installinotify-tools –y  //安装工具包
[root@localhost ~]# /usr/bin/inotifywait-mrq -e modify,delete,create,attrib /root/data //使用此命令测试inotify工具的效果,在/root/data下创建一个文件可看到inotify工具会做出相应的提醒
[root@localhost ~]# vim /tmp/inotify.sh  //编辑inotify自动同步更新的脚本
#!/bin/bash
/usr/bin/inotifywait -mrq –timefmt '%d/%m/%y%H:%M'--format '%T %w%f' -e modify,delete,create,attrib /root/data/ | while read file
do
/usr/bin/rsync -vzrtopg --delete  --password-file=/etc/rsyncd.passwd  --progress /root/data/  nydia@172.16.25.1::tools
echo "${files} was rsynced">>/var/log/rsync.log 2>&1
done
[root@localhost ~]# vim /etc/rsyncd.passwd          //创建此文件并在其中填入文件服务器设定的用户密码
nydia
[root@localhost tmp]# bash +x inotify.sh        //创建完以后就可以运行此文件了,inotify服务也配置完成了,现在只需测试了
[root@localhost data]# touch 3.abc                 //在本服务器的/root/data的目录中创建一个文件之类,然后就可以看到刚才编写的脚本有相关提示,并可在文件服务器上查看到已经同步过来的文件了。