首页 > 代码库 > Rsync + Inotify
Rsync + Inotify
Rsync
一、基础知识
1、rsync:是传输输工具,类似于scp
Scp的用法要知道远程主机的密码和账号
文件在本地上传到远程
Scp [option] source file [[user@]host1:] destions /file
文件在远程下载到本地
Scp [option] [[user@]host1:] destions /file source /file
rsync ?.a fast, versatile, remote (and local) file-copying tool man手册对rsync的解释
快速、通用、远程和本地主机cp file的tool
# yum -y install xinetd # chkconfig rsync on Rpm -ql rsync /etc/xinetd.d/rsync 服务启动脚本 /etc/rsyncd.conf 服务配置 /etc/rsyncd.passwd # service xinetd start 服务启动
监听于873/tcp 监听端口
rsync特点:
1、可以镜像保存整个目录树或文件系统;
2、较高的数据传输效率;
3、可以借助于ssh实现安全数据传输;
4、支持匿名传输;
rsync算法
rsync命令的工作模式:
第一种模式:shell模式,也称作本地模式; 第二种模式:远程shell模式,可以利用ssh协议承载其远程传输过程; 第三种模式:列表模式,仅列出源中的内容,-nv 第四种模式:服务模式,此时rsync工作为守护进程,能接收客户端的数据同步请求; rsync命令的选项: -n: 同步测试,不执行真正的同步过程; -v: --verbose 详细输出模式 -q: --quiet 静默模式 -c: --checksum,开启校验功能 -r: --recursive 递归复制 注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本向;
如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要;
上面的事传送目录
下面的是传送目录下的所有内容
-a: --archive 归档,保留文件的原有属性; -p: --perms保留文件的权限; -t: --times保留文件的时间戳; -l: 保留符号链接 -g: --group 保留属组 -o: (--owner) 保留属主 -D:same as --devices --specials 保留设备文件 -e --rsh=COMMAND ssh: 使用ssh作为传输承载; -z: --compress 压缩后传输; --progress: 显示进度条 --stats: 显示如何执行压缩和传输
rsync的服务模式:
1、设定rsync服务器端 # yum -y install xinetd # chkconfig rsync on 2、为rsync提供配置文件 /etc/rsyncd.conf 二、配置文件分两段: 全局配置段:1个 共享配置段:多个 [SHARE_NAME] 配置示例: 全局吗、配置段 # Global Settings uid = nobody 匿名用户 gid = nobody 匿名组 use chroot = no 允许用户出自己的家目录 max connections = 10 最大请求连接数 strict modes = yes 属性 pid file = /var/run/rsyncd.pid pid文件 log file = /var/log/rsyncd.log 日志文件 共享配置段 # Directory to be synced [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 root身份共享 gid = root root组身份共享 3、启动服务 Access via rsync daemon: 文件在远程 一般下载方式,(拉取)下载 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 共享方式拉取 rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] 文件在本地 上传文件 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST 共享方式上传 rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST 在客户端,使用周期性任务计划; 可以同步数据 inotify: 在服务器端,可用于定义监控指定的目录下的所有文件,一旦有文件的元数据发生改变,即会通知客户端来拉取; rsync + inotify: sersync
4、服务端启用用户认证的功能
在共享定义处加配置:
[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 用户密码保存位置,记住用户的密码不可以超过8个字符
说明: USERNAME LIST为以逗号分隔的在rsyncd.passwd中存在用户名的列表;
(2)创建密码文件/etc/rsyncd.passwd
username:password 密码文件格式书写
此文件不能允许其它用户有访问权限,且密码不能超过8个字符;
三、实验,完成rsync的共享及基于认证的功能
Vmware1 客户端 172.16.1.143
Vmware2 服务端 172.16.1.140
配置好ip时,最好先相互ping一下,确保能正常通讯,另外最好关闭防火墙,或者配置防火墙策略,不然影响实验结果
服务端
Yum -y install xinetd
Servcie xinetd restart
服务配置 /etc/xinetd.d/rsync
Vim /etc/rsyncd.conf
基于密码认证的用户密码配置
注意密码文件的权限
Chmod 600 /etc/rsyncd.passwd
实验结果
四、实验
Inotify 介绍
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,
通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件
就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
Inotifywait是一个监控等待事件,可以配合shell脚本使用它,下面介绍一下常用的一些参数:
inotifywait,用来监视文件的变化
inotifywatch,用来统计文件系统访问的次数,监视文件的元数据
l -m, 即--monitor,表示始终保持事件监听状态。
l -r, 即--recursive,表示递归查询目录。
l -q, 即--quiet,表示打印出监控事件。
l -e, 即--event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等。
工作示意图
服务端配置
1、下载软件
http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/
Tar xf inotify-tools/3.13 -C /usr/local
Cd inotify
./configure --frefix=/usr/local/inotify
Mak &&make install
Yum install xinetd -y
vim /etc/xinetd.d/rsync
Vim /etc/rsyncd.conf
Service xinetd restart
Ss -tnl 看873是否监听
创建目录 mkdir /momo
2、提供更新控制脚本
脚本控制推送
vim /bin/inotify.sh
#!/bin/bash
trap ‘echo "stop"‘ INT
source=/momo
Host=172.16.1.13
Dest=tools
Host1=172.16.1.23
/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib /momo | while read line
do
/usr/bin/rsync -ahqz -e ssh --delete --progress -v --stats ${source}/ ${Host}::$Dest
/usr/bin/rsync -ahqz -e ssh --delete --progress -v --stats ${source}/ ${Host1}::$Dest
done
3、密钥认证
生成密钥
给客户端认证密钥
保存到客户端/etc/.sshd/authorized_keys文件中
客户端配置
统一安装服务配置下面的内容,建共享目录,重启,查看监听,环境很重要,iptables,
vim /etc/rsyncd.conf
# Global Settings
uid = nobady
gid = nobady
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 = /momo
ignore errors = yes
read only = no
write only = no
hosts allow = 172.16.1.0/16
hosts deny = *
list = true
uid = root
gid = root
最后验证的话,服务端开启脚本,然后在服务端共享目录中添加,修改文件,在客户端哪里可以同步得到更新,同时可以再服务端用命令查看
inotifywait,用来监视文件的变化
inotifywatch,用来统计文件系统访问的次数,监视文件的元数据
实验中应该注意些什么,环境的搭建,原理及思路,最重要的是脚本,排错等
Rsync + Inotify