文件同步rsync
rsync介绍
我们经常需要在不同目录或者服务器之间做文件同步和更新,LINUX提供了很多内置命令可以使用比如SCP等等,但是今天我们介绍一个更加强大的工具rsync。rsync命令是一个远程同步工具,可以通过LAN\WAN快速同步多台主机间的文件,它使用的就是rsync算法达到本地和远程两个主机之间文件同步,该算法是增量算法,即只同步两个文件的不同部分,而不是每次同步整个文件,所以速度是相当快
一. 同步源
1. 基于SSH的同步源
setfacl
rsync -avz 用户名@服务器地址:/服务器目录/* /本地目录/
2. 基于RSYNC的同步源
/etc/rsyncd.conf
/etc/rsyncd_users.db 权限为600
上行同步时,read only = no 且 nobody需要有写入权限
/etc/rsyncd.conf文件:
address = 192.168.0.198
port 873
pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
[share]
comment = soft
path = /server/rsync
read only = no
dont compress = *.gz *.bz *.bz2 *.zip
auth users = wang
secrets file = /etc/rsyncd_users.db
对rsyncd.conf文件选项个别解释(上面有的没有写):
uid 指定当前模块传输文件时的守护进程应该具有的用户ID,默认是"nobody"
gid 指定当前模块传输文件时守护进程应该具有的用户组ID,默认是"nobody"
max_connections 指定模块的最大并发连接数量,以保护服务器超过限制的连接请求,将被暂时限制。默认是0,也就是没有限制。
/etc/rsyncd_users.db文件格式为: wang:123456
启动rsync守护进程:/usr/bin/rsync --daemon
权限: 服务权限 --> 用户权限,即只有服务权限还不行,必须还要有用户权限
rsync命令的用法:
基本格式: rsync [选项] 原始位置 目标位置
rsync的命令格式可以为:
1. rsync [OPTION]... SRC [SRC]... DEST
2. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
3. rsync [OPTION]... [USER@]HOST:SRC DEST
4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync有六种不同的工作模式:
1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启该模式。
6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信种工作模式。
常用选项:
-a :归档模式,递归并保留对象属性,等同于 -rlptgoD
-v : 显示同步过程的详细(verbose)信息
-z : 在传输文件时进行压缩(compress)
-H : 保留硬连接文件
-A : 保留ACL属性信息
--delete : 删除目标位置有而原始位置没有的文件
--timeout : 指定超时时间
--progress : 显示备份过程
--port :指定rsync服务端口
--password-file :指定客户端的密码文件
-a ::
-r : 递归模式,包含文件目录及子目录中所有文件
-l : 对于符号链接文件仍然复制为符号链接文件
-p : 保留文件的权限标记
-t : 保留文件的时间标记
-g : 保留文件的属组标记(仅超级用户使用)
-o : 保留文件的属主标记(仅超级用户使用)
-D : 保留设备文件及其他特殊文件
二. 实时同步
免密码验证
1. 基于SSH的同步源
通过秘钥对实现
2. 基于RSYNC同步源
通过系统变量实现,export RSYNC_PASSWORD=123456
实时同步 inotify+rsync
1. 安装inotify-tools辅助工具
inotifywait :用于持续监控,实时输出结果
inotifywatch :用于短期监控,任务完成后再出结果
inotifywait -mrq -e create,delete /server/rsync
m:持续监控 r:递归监控 即:监控目录及其子目录的内容
q:简化输出
2.首先实现免密码验证,在执行下面的脚本文件
#!/bin/bash
a="/usr/local/bin/inotifywait -mrq -e create,delete /tmp/test1"
b="/usr/bin/rsync -avz /tmp/test1/* user1@192.168.0.162:/tmp/test2/"
$a | while read directory event file
do
$b
done