rsync概述
1.rsync定义
rsync是一个开源的快速备份工具,可以在不同主机之间同步整个目录树。
在此远程同步任务中,一个是源端,一个是发起端(发起端和源端同步),
源端负责文件的原始位置,发起端和源端的文件同步。
rsync的特点
拷贝文件,连接文件、设备等
可以保持源文件或者目录的权限不变,时间、软硬连接、所有者、所在组等均可以保持不变
可以实现增量同步,即只同步发生变化的数据,数据传输效率很高
可以支持匿名认证
同步方式
1、完整备份,第一次同步都是完整备份
2、往后同步,都是增量备份(差异备份),只同步变化的数据
2.scp和rsync的区别
功能差距
rsync远程拷贝可以附带软链接/硬链接。(参数-l 保留软链接,-H 保留硬链接)
scp不支持链接的拷贝。
效率差异
简单的解析scp和rsync,前是复制,后是同步。
rsync和scp在文件夹均不存在时,执行时间相差不大,但是文件夹存在的情况下差异很大。
原因:scp是复制,若目的地文件不存在则新建,若存在则覆盖。
rsync是同步,比较两边文件是否相同,相同的话,就什么都不做,若存在差异就直接更新。
起到同步的作用时用rsync会快一些,起到复制作用时两者均可(目的地无文件)。视情况来选择rsync或scp。
3.rsync命令选项
格式:rsync [选项] 原始位置 目标位置
选项 | 作用 |
-r | 递归模式,目录包含子目录里面的所有 |
-I | 复制连接文件,软连接 |
-v | 显示同步过程中的详细信息 |
-z | 传输文件时,进行压缩 |
-a | 归档模式,保留文件的权限、属性等等 |
-p | 保留文件的权限标记(所有者、所在组) |
-t | 保留时间标记 |
-g | 保留文件的所在组(管理员) |
-o | 保留文件的所有者(管理员) |
-H | 保留硬连接 |
-D | 保留设备文件和其他特殊文件 |
--delete | 删除目标位置有,但是原始位置没有的文件 |
实现rsync下行同步
从源端同步到客户端
源端配置
实验配置:
20.0.0.10:源端
20.0.0.20:客户端(发起端)
systemctl stop firewalld
setenforce 0
rpm -q rsync #一般系统已默认安装rsync
#建立/etc/rsyncd.conf配置文件
vim /etc/rsyncd.conf #添加以下配置项
uid = root
gid = root
use chroot = yes #禁锢在源目录
address = 20.0.0.10 #监听地址
port = 873 #监听端口tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log #日志文件位置
max connections = 4
pid file = /var/run/rsyncd.pid #存放进程ID的文件位置
hosts allow = 20.0.0.0/24 #允许访问的客户机地址。多个地址以空格分隔
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
[test] #共享模块名称
path = /opt/test #源目录的实际路径
comment = test
read only = yes #是否为只读。yes表示客户端只能读取目录内容,不能写入。只允许下行,不允许上行。
auth users = backuper #授权账户,多个账号以空格分隔。授权用户,允许读取的用户名。
secrets file = /etc/rsyncd_users.db
#存放授权账户信息的数据文件
#如采用匿名的方式,只要将其中的“auth users"和“secrets file"配置项去掉即可。
#为备份账户创建数据文件。
vim /etc/rsyncd_users.db
backuper:123456 #无须建立同名系统用户。backuper为用户名,123456为密码。
chmod 600 /etc/rsyncd_users.db
cd /opt
mkdir test
chmod 777 test
mkdir -p /var/www/html
rsync --daemon
#启动rsync 服务,以独立监听服务的方式(守护进程)运行
netstat -anpt | grep rsync
#关闭rsync服务
kill $(cat /var/run/rsyncd.pid)
或者
rm -rf /var/run/rsyncd.pid
同步测试
源端:
cd /opt/test/
touch 123 456 789
echo 123 > 123
echo 456 > 456
echo 789 > 789
发起端配置
#将指定的资源下载到本地/opt目录下进行备份。密码123456
rsync -avz backuper@20.0.0.10::test /opt/
#rsync:发起同步的命令
#-avz:保留文件权限,显示详细过程,同步过程中对文件进行压缩
#backuper指的是我在同步的时候用的哪个用户身份
#20.0.0.10::test中test为模块名称
#/opt/指的是同步到本地的目录
#源端:
touch 000
echo 000 > 000
发起端免密登录
#发起端:
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
#源端:
echo 456 >> 456
#发起端:
rsync -avz --password-file=/etc/server.pass backuper@20.0.0.10::test /opt
实现rsync上行同步
发起端配置
cd /opt/
--拖入inotify工具压缩包--
tar -xf inotify-tools-3.14.tar.gz
cat /proc/sys/fs/inotify/max_queued_events #监控时间队列
cat /proc/sys/fs/inotify/max_user_instances #最多能监控的实例数
cat /proc/sys/fs/inotify/max_user_watches #每个实例最多监控的文件数
#inotify:
通知接口,可以用来监控文件系统的各种变化情况,文件存取、删除、移动、修改都可以被监控
inotify机制和rsync配合在一起使用。既可以通知变化,也可以实现同步。
vim /etc/sysctl.conf
--添加--
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
cd inotify-tools-3.14/
./configure
make && make install
cd /opt/
mkdir test
inotifywait -mrq -e modify,create,move,delete /opt/test/
#-m:表示持续监控
#-r:递归整个目录
#-q:信息提示
#-e:指定监控的事件,多个事件逗号隔开
#发起端再开一个终端进行操作
实现同步到源端
#发起端:
cd /opt/
mkdir data
cd data/
touch one two three
cd ..
chmod 777 data/
rsync -azH --delete --password-file=/etc/server.pass /opt/data backuper@20.0.0.10::test/
脚本实现监控和上行同步结合
#发起端:
cd /opt/
vim inotify.sh
--
#!/bin/bash
CMD="inotifywait -mrq -e modify,create,move,delete /opt/data"
rsync_cmd="rsync -azH --delete --password-file=/etc/server.pass /opt/data backuper@20.0.0.10::test/"
$CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ]
then $rsync_cmd
fi
done
--
bash -x inotify.sh
chmod 777 inotify.sh
chmod +x /etc/rc.d/rc.local
echo '/opt/inotify.sh' >> /etc/rc.d/rc.local
crontab -e -u root
* * * * * /opt/inotify.sh
验证:
实现rsync快速删除大量文件
#建立空空目录
mkdir /home/blank
#创建文件
cd /opt/
mkdir test1
touch {1..50000}.txt
rsync --delete-before -a -H -v --progress --stats /home/blank/ /opt/test1