目录
rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
准备两台服务器,并下载rsync工具:
修改rsync的配置文件:
到/opt目录下创建所定义的文件,目录:
添加文件授权:
到发起端进行获取文件:
命令格式:rsync [选项] 原始位置 目标位置
常用选项:
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)。
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
-p:保留文件的权限标记。
-t:保留文件的时间标记。
-g:保留文件的属组标记(仅超级用户使用)。
-o:保留文件的属主标记(仅超级用户使用)。
-H:保留硬连接文件。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
--delete:删除目标位置有而原始位置没有的文件。
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
格式一:将指定的资源下载到本地/opt 目录下进行备份:
rsync -avz 授权用户@源服务器地址::模块名? 本地路径
先在发起端test3创建空目录:
格式二:rsync -avz rsync://授权用户@源服务器地址/模块名? 本地路径
我们在进行一次看下是否会再次进行文件同步:
没有在进行同步操作。
说明只会同步增量的数据。
rsync-daemon方式
先给源服务器添加几个文件:
方法1:rsync -az --delete --password-file=密码文件 ? 用户名@源服务器地址::共享模块名 ? 本地目录
方法2:rsync -az --delete --password-file=密码文件 ? rsync://用户名@源服务器地址/共享模块名 ? 本地目录
我们将源服务器的abc文件删除,创建新的文件在进行传输同步:
看下发送端的目录下文件:
查看定时任务内容:
要实现定时任务要确保服务开启:
先创建1w个文件:
创建空目录:
方式一:先做ssh密钥对免交互(空密码,ssh-agent bash + ssh-add)
rsync -az (--delete) -e 'ssh -p ssh端口' ?用户名@源服务器地址:共享目录/ ? 本地目录
先给源服务器复制目录:
生成密钥对:
方式二:rsync -az (--delete) -e 'sshpass -p 'ssh密码' ssh -p ssh端口 (-o StrictHostKeyChecking=no)' ?用户名@源服务器地址:共享目录/ ? 本地目录
给源服务器的/opt/www目录下添加文件:
在发送端下载sshpass工具:
将配置文件设为no:
定时同步 ?rsync + crontab
实时同步 ?rsync + inotifywait
使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
先过滤进程并杀死:
启动:
默认的inotify机制提供了三个调控参数:max_queue_events(监控事件队列,默认值为16384)、max_user_instances(最多监控实例数,默认值为128)、max_user_watches(每个实例最多监控文件数,默认值为8192)。当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。
inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
进行创建文件,删除,移动等操作:
在发送端编写触发式同步脚本(注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效)
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /root/ky33/"
RSYNC_CMD="rsync -azH --delete --password-file=/opt/usrlist /root/ky33/ cxk@192.168.233.20::cxk"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
do
if [ $(pgrep rsync | wc -l) -le 1 ]
then
#如果rsync未在执行,则立即启动
$RSYNC_CMD
fi
done
给文件授权:
给源服务器共享的文件授权:
在源服务端查看下内容: