Rsync的简单介绍及rsync+inotify实现实时同步更新
rsync是类unix系统下的数据镜像备份工具――remotesync。一款快速增量备份工具 Remote Sync,远程同步支持本地复制,或者与其他SSH、rsync主机同步。Rsync是超级进程来管理的,服务端口为873。
特点:
1、可以镜像保存整个目录树或文件系统;
2、有较高的数据传输效率;
3、可借助于SSH实现安全数据传输;
4、 支持匿名传输
工作模式:
1、shell模式,也称作本地模式
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 [email protected]:/rmp/ 从本机复制文件到另一主机
以下简单说下rsync工具的服务模式及rsync和inotify的组合使用实现数据实时同步更新
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的使用
实例是用两台服务器简单实现的,其中文件服务器的IP为172.16.25.1,inotify服务器的IP为172.16.25.2
先搭建文件服务器所需要的环境
[root@localhost ~]# yum install xinetd �Cy //安装超级守护进程 [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,�Chelp
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
�Cfromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, �Cmonitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, �Cdaemon
跟�Cmonitor一样,除了是在后台运行,需要指定�Coutfile把事情输出到一个文件。也意味着使用了�Csyslog。
-o, �Coutfile
输出事情到一个文件而不是标准输出。
-s, �Csyslog
输出错误信息到系统日志
-r, �Crecursive
监视一个目录下的所有子目录。
-q, �Cquiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
�Cexclude
正则匹配需要排除的文件,大小写敏感。
�Cexcludei
正则匹配需要排除的文件,忽略大小写。
-t , �Ctimeout
设置超时时间,如果为0,则无限期地执行下去。
-e , �Cevent
指定监视的事件。
-c, �Ccsv
输出csv格式。
�Ctimefmt
指定时间格式,用于�Cformat选项中的%T格式。
�Cformat
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由�Ctimefmt定义的时间格式
inotifywatch
语法:
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
参数:
-h, �Chelp
输出帮助信息
-v, �Cverbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
�Cfromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, �Czero
输出表格的行和列,即使元素为空
�Cexclude
正则匹配需要排除的文件,大小写敏感。
�Cexcludei
正则匹配需要排除的文件,忽略大小写。
-r, �Crecursive
监视一个目录下的所有子目录。
-t , �Ctimeout
设置超时时间
-e , �Cevent
只监听指定的事件。
-a , �Cascending
以指定事件升序排列。
-d , �Cdescending
以指定事件降序排列。
可监听事件
注:inotifywatch中的信息转载于http://www.51rhca.com/archives/133文中
简单的介绍完以后就接着开始配置服务了
[root@localhost ~]#yum installinotify-tools �Cy //安装工具包 [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 �Ctimefmt '%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/ [email protected]::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的目录中创建一个文件之类,然后就可以看到刚才编写的脚本有相关提示,并可在文件服务器上查看到已经同步过来的文件了。