1.什么是rsync
rsync是 Linux / UNIX 系统下的文件同步和数据传输工具,通过rsync可以将同一个服务器的数据从一个分区备份到另外一个分区,也可以将本地系统的数据通过网络传输方式备份到任何一个远程主机上,可以执行完整备份或增量备份。
2.rsync的安装与基本操作
2.1 yum安装rsync,或源码包安装
[root@test1 ~]# yum -y install rsync
2.2 rsync的基本操作
命令用法 :rsync 选项 源目录 目标目录
选项:
-a 归档模式,相当于-rlptgoD
-v 显示同步过程详细信息
-z 传输过程启用压缩
-H 保留硬连接文件
-A 保留文件的ACL权限
-n 测试同步过程,不做实际修改
--delete 修改目标文件夹的多余文件,保持源目录与目标目录的一致
2.3 本地同步
格式:
# rsync 选项 本地目录1 本地目录2//将本地目录1同步到本地目录2的文件夹中
# rsync 选项 本地目录1/ 本地目录2//将本地目录1的子文件同步到本地目录2的文件夹中
2.4 rsync + ssh 同步
2.4.1 客户端与ssh服务端同步:
下行:rsync 选项 user@host:源目录 本地目录
上行:rsync 选项 本地目录 user@host:目标目录
2.4.2 服务端的要求
1)服务端应开启sshd服务,并提供授权的用户,密码
2)此用户必须对服务端的目录具有相应的权限
2.5 rsync + rsync 同步
2.5.1 客户端与rsync服务端同步
下行:rsync 选项 user@host::共享名 本地目录
上行:rsync 选项 本地目录 user@host::共享名
2.5.2 服务端要求
1)服务端主机运行 rsync 服务模式
2)指定要分享的文件夹,并设置分享名,分享权限
3)根据需要启用用户验证
2.5.3 rsync服务端配置
1)建立rsync账户
# vim /etc/rsyncd_users.db
user1:pwd123
user2:pwd456
# chmod 600 /etc/rsyncd_users.db
2)配置rsyncd.conf 文件
# vim /etc/rsyncd.conf
[tools] // 共享名
path = /usr/src
commet = Rsync Share Test
read onlu = yes
dont compress = *.gz *.bz2 *.tgz *.zip
auth users = user1
secrets file = /etc/rsyncd_users.db
3)启用rsync共享服务
# yum -y install xinetd
# chkconfig rsync on
# chkconfig xinetd on
# service xinetd start
# rsync 192.168.14.1:://查看服务端192.168.14.1的共享资源
# rsync user1@192.168.14.1::tools//验证密码后可查看tools共享文件夹的资源
# rsync --password-file=密码文件//将密码保存在文件中,免除交互式验证
3.inotify 实时同步
3.1 源码包安装inotify
# tar -xzf inotify-tools-3.13.tar.gz
# cd inotify-tools-3.13
# ./configure
# make && make install
3,2 inotifywait 监控命令
基本用法: inotifywait 选项 目标文件夹
选项:
-m 启用监控
-r 递归监控,监控本目录以及所有子目录
-q 减少输出信息
-e 设置要监视的事件类型
事件类型:modify, move, create, delete, attrib
//监控文件夹 /opt,当/opt 发生变动时,会输出相应信息
# inotifywait -mrq -e modify,move,create,delete,attrib /opt
3.3 inotify + rsync 实现实时同步
基本思路:
- inotifywait 监控文件夹 | while 检测,同步
# vim /root/rsync.sh
#!/bin/bash
TARGET_DIR="/data/opt/"
RSYNC_CMD="rsync -az --delete /data/opt/ /data/opt2/"
inotifywait -mrq -e create,move,modify,delete,attrib $TARGET_DIR |
while read -n5 X
do
eval $RSYNC_CMDdone &
# chmod u+x /root/rsync.sh
# /root/rsync.sh