一、了解rsync

1、 rsync是一款类unix增量备份工具,可以实现快速的镜像同步。

2、 rsync的特点:

1) 同步整个目录(递归同步)树

2) 能保持文件的属性(权限、时间、软硬链接)

3) 快速:首次同步时完全复制,再次同步只同步修改部分,且传输是压缩的。

4) 安全:可以调用ssh协议加密传输

5) 支持匿名的站点同步,实现公共资源共享。

3、 rsync工作原理:

1) rsync的架构:C/S;角色分为同步源(备份源)、发起端。

发起端:发起rsync请求的。

同步端:相应rsync请求的。

2) 同步的方向:

上行同步:数据在发起端,本地登陆用户对数据必须有读取权限,远程用户必须对目录有写的权限

下行同步:数据在同步源,本地登陆用户对目录必须有写入权限,远程用户必须对数据有读的权限

二、rsync的基本使用

1、 基本语法:

本地同步:rsync [选项]  数据  目标目录

远程上行同步: rsync  [选项]  数据   用户@IP:/目标目录

远程下行同步: rsync  [选项]  用户@IP:/数据/  目标目录

2、 常用的选项:

-avzH   ##a归档并保留属性,v显示详细信息,z压缩,H保留硬链接

--delete  ##删除目标目录有但源数据中没有的文件

3、 注意事项

1) 源数据加“/ 表示同步目录的内容;不加”/“表示同步目录本身及其内容。

2) --delete选项经常用来删除大文件,速度很快。

4、 远程同步:推荐使用SSH的方式,即安全又方便。

1) 创建用户(同时在发起端和同步源上完成)

2) Setfacl设置权限,保证rsync的权限和远程程序权限

3) 配置ssh的密钥队登陆实现rsync无密码执行

4) 编写脚本和计划任务,完成定时的同步

三、rsync+inotify自动同步

1、 了解inotifylinux内核提供文件系统变化监控并通知的机制,通过inotifytool工具进行管理。

2、 调整内核参数:

max_queue_events:监控队列大小

max_user_instances:最多监控实例数

max_user_watches:每个实例最多监控文件数

fs.inotify.max_queued_events = 16384

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 1048576

3、 inotify-wait命令的语法:

inotifwait  -mrq  -e  modifycreatemovedeleteattrib 目录  选项:-m持续监控、r递归、q简化输出,-e指定监控事件

4.      编写脚本并设置后台开机运行

[lu01@localhost bin]$ cat rsync_ inotify.sh

#!/bin/bash

##by  www.linuxfan.cn 2016-11-25

DIR=/var/www/html/

RSYNC="rsync -azH --delete $DIR ru01@192.168.100.151:$DIR"

INOTIFY="inotifywait -mrq -e modify,move,create,attrib,delete $DIR"

$INOTIFY |while read DIRECTORY EVENT FILE;do

$RSYNC

done

/home/lu01/bin/rsync_inotify.sh & ##后台运行

注:rsync+inotify只在上行同步使用


案例:下载

备份源操作:

mkdir /opt/data

touch /opt/data/{1..9}.txt

useradd r_get

echo 123123 |passwd  --stdin  r_get

rpm -qa  rsync ##确认已经安装rsync软件

netstat -uptln  |grep  22

确认r_get用户对/opt/data有读权限

wKioL1hAHH-CQD_nAAH3U3PrgTY904.jpg-wh_50

发起端操作:

rsync -avzH r_get@192.168.100.151:/opt/data/ /tmp   ##下载

wKiom1hAHH_yCXC4AACRB-lUKkA381.jpg-wh_50

wKiom1hAHICTsLpFAABOEJ9uTIU084.jpg-wh_50

rsync  -avzH r_get@192.168.100.151:/opt/data /tmp   ##对比差异

wKioL1hAHIGwdF_7AABkkmG1R0k108.jpg-wh_50

wKiom1hAHIHiTke6AACx8gB4UBI058.jpg-wh_50

rsync -avzH r_get@192.168.100.151:/opt/data/ /tmp  --delete  ##保证数据一致,下行同步以同步源为依据

wKioL1hAHILgvpsbAAGJbQ5uAQQ649.jpg-wh_50

wKioL1hAHIKSwaszAABng11_bO0784.jpg-wh_50

wKiom1hAHIOwYDnHAABlWumwx6g330.jpg-wh_50

案例:上传

备份源操作:

mkdir /opt/data_bak

useradd r_put

echo 123123 |passwd  --stdin  r_put

setfacl -m  u:r_put:rwx  /opt/data_bak   ##确保用户对目标目录有写入权限

getfacl /opt/data_bak

确保rsyncsshd正常



wKiom1hAHVLQ7_0-AAHPsOGpqvo862.jpg

发起端操作:

mkdir /data

touch /data/{1..9}.avi

rsync -avzH  /data  r_put@192.168.100.151:/opt/data_bak

wKiom1hAHVPSMXpJAAC3-0zLS2c885.jpg

wKioL1hAHVOjuBIEAABHqJ280RY451.jpg

rsync -avzH  /data/  r_put@192.168.100.151:/opt/data_bak

wKioL1hAHVPDGQQaAACAtawCuRQ413.jpg

rsync -avzH  /data/  r_put@192.168.100.151:/opt/data_bak  --delete

wKiom1hAHVTyXT6wAAB2D9AxMLA975.jpg

wKiom1hAHVTyF09AAACHN-ygOPs685.jpg

wKioL1hAHVTgdU16AAB5TjFQcAc841.jpg

在备份源上验证结果。


案例:ssh密钥对认证后rsync同步

ssh-keygen -t  rsa

wKioL1hAHnbji6dRAACq7BGV7AQ925.jpg-wh_50

ssh-copy-id r_get@192.168.100.151  ##给下载用户上传公钥匙

ssh-copy-id r_put@192.168.100.151 

ssh r_get@192.168.100.151  ##登录验证,r_put同理

wKiom1hAHnfDIuBvAAEgy6cstx0216.jpg-wh_50

执行rssync同步验证:

vi /root/bin/rsync.sh

#!/bin/bash

rsync -avzH  /data/  r_put@192.168.100.151:/opt/data_bak  --delete

rsync -avzH r_get@192.168.100.151:/opt/data/ /tmp  --delete

grep rsync  /var/spool/cron/root

if [ $? -ne  0  ];then

echo "30  0  *  * 6 /root/bin/rsync.sh  &>/var/log/rsync.log"  >/var/spool/cron/root

:wq

chmod +x  /root/bin/rsync.sh


wKioL1hAHhuyAYHqAAHfjqB0z58776.jpg-wh_50

2.inotify+rsync实时同步:上行同步

1)安装inotify-tools

tar zxvf  inotify-tools-*.tar.gz  -C /usr/src/

cd /usr/src/inotify-tools-*/

./configure &&make &&amake install

ls /usr/local/bin/inotify*

wKiom1hAHhyhCPZcAAGkI0WAowk954.jpg-wh_50

2)inotify的使用:

vi /etc/sysctl.conf

fs.inotify.max_queued_envents = 16384  ##监控事件队列数

fs.inotify.max_user_instances = 1024   ##监控实例数

fs.inotify.max_user_watches = 1048576  ##监控的文件数量

:wq

sysctl -p

wKiom1hAHhzg71PwAAGm1_qk7gs350.jpg-wh_50

inotifywait -mrq  -e  modify,create,attrib,move,delete  /root/data ##-m持续监控,r递归目录,q简化输出,-e指定监控事件:modify修改、create创建、attrib权限修改、move移动、delete删除;在其他终端操作文件,查看变化

wKioL1hAHh2D2zP9AAEW9neoKIk870.jpg-wh_50

wKioL1hAHh6DvS6tAAFHQFwq8pk371.jpg-wh_50

vi rsync_inotify.sh   ##实时同步脚本

#!/bin/bash

RSYNC="rsync -avzH /root/data/ r_put@192.168.100.151:/opt/data_bak/ --delete"

INT_CMD="inotifywait -mrq -e modify,create,move,delete,attrib /root/data/"

$INT_CMD |while read DIRECOTRY EVENT FILE;do

$RSYNC

done

:wq


wKiom1hAHh7Duq8iAADkhZ30-GE837.jpg-wh_50

chmod +x  rsync_inotify.sh

rsync_inotify.sh  & ##启动脚本

测试验证。

wKiom1hAHh_ztCtqAADpSlNRrhw032.jpg-wh_50

wKioL1hAHiDzOpu3AAGcrmMULYA215.jpg-wh_50