Rsync

一、基础知识

1、rsync:是传输输工具,类似于scp

Scp的用法要知道远程主机的密码和账号

文件在本地上传到远程

Scp [option]  source file  [[user@]host1:]  destions /file

文件在远程下载到本地

Scp [option] [[user@]host1:]  destions /file   source /file

Rsync + Inotify_第1张图片

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 + Inotify_第2张图片

rsync算法

rsync命令的工作模式:

第一种模式:shell模式,也称作本地模式;
第二种模式:远程shell模式,可以利用ssh协议承载其远程传输过程;
第三种模式:列表模式,仅列出源中的内容,-nv
第四种模式:服务模式,此时rsync工作为守护进程,能接收客户端的数据同步请求;
rsync命令的选项:
-n: 同步测试,不执行真正的同步过程;
-v: --verbose 详细输出模式
-q: --quiet 静默模式
-c: --checksum,开启校验功能
-r: --recursive 递归复制
注意:rsync命令中,如果源路径是目录,且给复制路径时末尾有/,则会复制目录中的内容,而非目录本向;

如果末尾没有/,则会同步目录本身及目录中的所有文件;目标路径末尾是否有/无关紧要;

Rsync + Inotify_第3张图片

上面的事传送目录

下面的是传送目录下的所有内容

-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 + Inotify_第4张图片

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

Rsync + Inotify_第5张图片

Vim /etc/rsyncd.conf

Rsync + Inotify_第6张图片

基于密码认证的用户密码配置

注意密码文件的权限

Chmod 600 /etc/rsyncd.passwd

Rsync + Inotify_第7张图片

实验结果

wps_clip_p_w_picpath-16787

Rsync + Inotify_第8张图片

四、实验

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等。

工作示意图

Rsync + Inotify_第9张图片

服务端配置

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

Rsync + Inotify_第10张图片

 

Vim /etc/rsyncd.conf

Rsync + Inotify_第11张图片

Service xinetd restart

Ss -tnl 看873是否监听

创建目录 mkdir /momo

2、提供更新控制脚本

Rsync + Inotify_第12张图片

脚本控制推送

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、密钥认证

生成密钥

Rsync + Inotify_第13张图片

给客户端认证密钥

Rsync + Inotify_第14张图片

保存到客户端/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,用来统计文件系统访问的次数,监视文件的元数据

实验中应该注意些什么,环境的搭建,原理及思路,最重要的是脚本,排错等