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

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

特点:

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

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

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

、 支持匿名传输

工作模式:

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

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

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

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

 

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

rsync常用命令的选项:

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

详细输出模式

静默模式

,开启校验功能

递归复制

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

保留文件的权限;

保留文件的时间戳;

保留符号链接

保留属组

保留属主

:保留设备文件

 

使用ssh作为传输承载;

压缩后传输;

 

显示进度条

显示如何执行压缩和传输

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

 



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




 

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

rsync服务模式

1、设定rsync服务器端

   # yum -y install xinetd

   # chkconfig rsync on

2、为rsync提供配置文件

   /etc/rsyncd.conf

配置文件分两段:

全局配置段:1个

共享配置段:多个

配置示例:

   # Global Settings

运行RSYNC守护进程的用户

运行RSYNC守护进程的组

不使用chroot

最大连接数无限制

是否工作在严格模式下

锁文件的存放位置

日志记录文件的存放位置

   # Directory to be synced

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

需要做同步的目录,不可缺少

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

非只读

非只写

允许哪些主机来访问,做白名单的

黑名单

是否允许用户列出文件列表

   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

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

密码和用户名对比表,密码文件自己生成

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

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

格式:username:password

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

 

 

Rsync+inotify的使用

实例是用两台服务器简单实现的,其中文件服务器的IP为172.16.25.1,inotify服务器的IP为172.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 -i_运维

注: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的目录中创建一个文件之类,然后就可以看到刚才编写的脚本有相关提示,并可在文件服务器上查看到已经同步过来的文件了。




 

 



转载于:https://blog.51cto.com/nydia/1545806