Rsync
一款快速增量备份工具
支持远程同步,支持上传和下载
命令:
Rsync [选项] 原始位置 目标位置
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬连接文件
-A:保留ACL属性信息
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据对象的校验和来决定是否跳过文件
上传:rsync -avz A(/opt/) B(root@目标IP:/root/html)
rsync -avz A(/opt/
) B(root@目标IP::wwwroot)
:: 表示连接的是共享文件夹
将A主机的文件上传到主机B
下载:rsync -avz B(root@IP:/root/html) A(/opt/)
rsync -avz B(root@目标IP::wwwroot) A(/opt/
)
A是客户端,B是服务器
实验:2台linux
服务器:192.168.80.182
客户端:192.168.80.181
客户端:安装rsync工具
服务器:
1 yum install -y rsync
2 vi /etc/rsyncd.conf uid = nobody
gid = nobody
use chroot = yes
address = 192.168.80.182
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.80.0/24
[wwwroot]
path = /var/www/html
comment = Document Root of www.benet.com
read only = no
dont compress = .gz .bz2 .tgz .zip .rar .z auth users = zlx
Secrets file = /etc/rsyncd_users.db
3建立虚拟用户zlx(客户端以虚拟用户访问服务器)
vi /etc/rsyncd_users.db zlx:abc123
4设置权限chmod 600 /etc/rsyncd_users.db
5启动程序:rsync --daemon
6检查:netstat -anpt | grep rsync 出现873口
注释:源主机文件位置/var/www/html 共享名wwwroot
客户端使用命令进行下载操作:
rsync -avz [email protected]::wwwroot/ ./
有密码交互,可以设置去除:
export RSYNC_PASSWORD=abc123 (永久生效则写入/etc/ profile中)
客户端使用命令进行上传操作:
1,注意共享文件夹的属性:read only = no
2,文件的属主改为nobody
确认权限没问题后执行本地文件上传操作:
rsync -avz /bin/b
[email protected]::wwwroot
·
--delete的使用
rsync -avzH --delete [email protected]::wwwroot /opt
客户端删除与服务器共享文件夹内不符的文件,同时根据要求下载共享文件夹内的数据
实验2:rsync+inotify实时同步:
服务器(92.168.80.182)安装inotify监控,若发生改变则将上行同步至客户端(192.168.80.181)
服务器:
1编译安装inotify
确保有c++,gcc,make工具
tar xf inotify-tools-3.14.tar.gz -C /opt
cd /opt/inotify-tools-3.14/
./configure
make && make install
2配合inotify触发备份、调整内核参数
vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 //监控队列大小
fs.inotify.max_user_instances = 1024 //最多监控实例数
fs.inotify.max_user_watches = 1048576 //每个实例最多监控文件数
3 查看参数设置:sysctl –p
4通过脚本完成出发备份任务
vi /opt/inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait –mrq -e modify,create,attrib,move,delete /var/www/html"
RSYNC_CMD="rsync -azH --delete /var/www/html/ [email protected]:/srv"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 50 ] ; then
$RSYNC_CMD
fi
Done
注:去除交互,脚本才能正常执行。
5执行脚本,开始监控:sh /opt/inotify_rsync.sh &
实时测试
1首先将服务器共享文件夹内的文件删除
2将客户端内/srv文件夹内数据删除(脚本:是服务器共享问件夹和客户端/srv文件夹的同步)
3在服务器上新建文件夹abc (监控端有反应)
4查看客户端是否同步
检查完毕!