一、了解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、 了解inotify:linux内核提供文件系统变化监控并通知的机制,通过inotify—tool工具进行管理。
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 modify,create,move,delete,attrib 目录 选项:-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有读权限
发起端操作:
rsync -avzH r_get@192.168.100.151:/opt/data/ /tmp ##下载
rsync -avzH r_get@192.168.100.151:/opt/data /tmp ##对比差异
rsync -avzH r_get@192.168.100.151:/opt/data/ /tmp --delete ##保证数据一致,下行同步以同步源为依据
案例:上传
备份源操作:
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
确保rsync和sshd正常
发起端操作:
mkdir /data
touch /data/{1..9}.avi
rsync -avzH /data r_put@192.168.100.151:/opt/data_bak
rsync -avzH /data/ r_put@192.168.100.151:/opt/data_bak
rsync -avzH /data/ r_put@192.168.100.151:/opt/data_bak --delete
在备份源上验证结果。
案例:ssh密钥对认证后rsync同步
ssh-keygen -t rsa
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同理
执行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
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*
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
inotifywait -mrq -e modify,create,attrib,move,delete /root/data ##-m持续监控,r递归目录,q简化输出,-e指定监控事件:modify修改、create创建、attrib权限修改、move移动、delete删除;在其他终端操作文件,查看变化
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
chmod +x rsync_inotify.sh
rsync_inotify.sh & ##启动脚本
测试验证。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。