目录
一、概述
1、关于rsync
2、rsync的特点:
3、备份方式:
4、同步方式:
二、rsync相关命令
1、rsync常用命令的选项:
2、启动和关闭rsync服务:
3、关闭 rsync 服务
三、 免交互:
1、免密同步:
2、定期同步:
四、inotify工具:
1、发送端安装inotify工具:
2、inotify 内核参数
3、设置监控实例和实例文件修改:
4、inotify命令:
五、实验:
1、下行同步:
2、上行同步:
3、使用rsync快速删除大量文件
rsync远程同步:是开源的快速备份工具。可以在不同主机之间同步整个目录
在远程同步任务重,一个是源端,还有一个是发起端(客户端)
源端负责文件的原始位置,发起端和源端的文件同步
拷贝文件,链接文件,设备
可以保持源文件或者目录的权限不变(时间、软硬连接、所有者、所在组等均可以保持不变)
可以实现增量同步。只同步发生变化的数据,数据传输效率很高
支持匿名认证。
完整备份,第一次同步都是完整的备份
往后的同步,都是增量备份(差异备份)。只同步变化的数据
下行同步:
从源端同步到客户端
上行同步:
从客户端同步到源端
rsync -r:递归模式,目录包含子目录里面的所有文件
rsync -l:复制链接文件,软链接
rsync -v:显示同步过程中的详细信息
rsync -z:传输文件时进行压缩
rsync -a:归档模式,可以保留文件的权限、属性等等
rsync -p:保留文件的权限标记(所有者和所在组)
rsync -t:保留时间标记(时间戳)
rsync -g:保留文件的所在组(管理员)
rsync -o:保留文件的所有者(管理员)
rsync -H:保留硬链接
rsync -D:保留设备文件和其他特殊文件
rsync --delete:删除目标位置有,但是原始文件没有的文件(相同的数据不作操作)
启动 rsync 服务,以独立监听服务的方式(守护进程)运行
rsync --daemon
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
rsync -avz --password-file=/etc/server.pass [email protected]::test /opt/
举个例子
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/
为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。
#在执行 rsync 同步时使用选项 “--password-file=/etc/server.pass” 指定即可。
systemctl restart crond
systemctl enable crond
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make -j2 && make install
在Linux内核中,默认的inotify机制提供了三个调控参数
1)max_queue_events(监控事件队列,默认值为16384)
2)max_user_instances(最多监控实例数,默认值为128)
3)max_user_watches(每个实例最多监控文件数,默认值为8192)
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。
cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
rsync同步速度很快,适合同步大文件,可以结合数据库同步使用
inotify:通知接口,可以用来监控文件系统的各种变化情况,文件存取,删除移动修改,都可以被监控
inotify机制和rsync配置在一块使用。既可以通知变化,也可以实现同步。
只监控,同步是rsync
inotifywait -mrq -e modify,create,move,delete /opt/test/
-m:持续监控
-r:递归整个目录
-q:信息提示
-e:指定监控的事件,多个事件用逗号隔开
架构:
test1 源端 20.0.0.21
test2 发起端(客户端) 20.0.0.22
关防火墙安全机制
systemctl stop firewalld
setenforce 0
查看安装情况:
rpm -q rsync
rsync是linux自带的软件
rpm -qc rsync
下行同步的格式:
rsync [选项] 源服务器位置 本地位置
举个例子
格式一:
rsync -avz [email protected]::message /opt/
格式二:
rsync -avz rsync://[email protected]/message /opt/
test为配置文件中的授权账户
IP地址为同步源地址
message 为配置文件中定义的共享模块
配置源端rsync:
改配置文件:
vim /etc/rsyncd.conf #添加以下配置项
uid = root
gid = root
use chroot = yes #禁锢在源目录
address = 20.0.0.21 #监听地址
port = 873
#监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log #日志文件位置
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
write only = yes #是否为只读
auth users = backuper #授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件
#如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
#为备份账户创建数据文件
给授权账户添加密码
vim /etc/rsyncd_users.db
backuper:123456 #无须建立同名系统用户
设置只有文件的所有者可以读取和修改密码文件
chmod 600 /etc/rsyncd_users.db
保证所有用户对源目录/data都有读取权限
mkdir /opt/test
chmod 777 /opt/test
启动 rsync 服务,以独立监听服务的方式(守护进程)运行
rsync --daemon
观察是否启动成功
ss -napt | grep rsync
服务端同步数据到客户端:
rsync -avz [email protected]::test /opt
-avz:保留文件权限 v显示详细过程 z同步过程中对文件进行压缩
20.0.0.21::test
往后的同步都是增量同步,只有新增的才会同步
rsync -avz [email protected]::test /opt
将发起端(客户端)修改,更新到源端
还是在客户端执行命令:
rsync -azH --delete --password-file=/etc/server.pass /opt/data [email protected]::test/
将监控和同步一起执行
脚本:
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 [email protected]::test/"
$CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -gt 0 ]
then
$reync_cmd
fi
done
也可以设置定时任务
在文件数量较多的情况下,比如百万和千万级别的文件,rm -rf *速度很慢
rsync 可以实现大量删除
此时,利用rsync的替换原理,结合--delete选项,可以实现快速删除大量文件,比如服务的缓存
现在主机模拟生成大量垃圾文件:
mkdir test1
cd test1/
touch {1..9999}.txt
touch demo.txt
#demo.txt用作测试
再创建一个空文件
mkdir test2
cd test2
touch demo.txt
进行同步删除
rsync --delete-before -avH --progress --stats /opt/test2/ /opt/test1
--delete-before:在传输的过程中进行删除
-a:归档模式
-H:硬链接
-v:输出信息
--progress:显示传输的过程
--stats:给出文件的传输状态