一、rsync概述
- rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
- rsync是一个快速和非常同样的文件复制工具。它能本能复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制
①Remote Sync,远程同步
②支持本地复制,或者与其他SSH、rsync主机同步
③rsync软件适用于unix/ linux/windows等多种操作系统平台④rsync还可以跨节点复制
⑤rsync监听端口:873
⑥rsync运行模式:C/S
⑦delta-transfer算法闻名
二、配置rsync源服务器
- rsync同步源
是备份操作的远程服务器,也称为备份源
2.1配置rsync源的方法
- 建立rsyncd.conf配置文件、独立的账号文件(远程登录使用或管理rsync相关功能)
- 启用rsync的–daemon模式
- 账号文件
①需要对应配置文件模块(使用不同的账号+功能模块),就可以使用不同的同步策略、方式
②在同步时,我们需要指定账号+功能模块来指定我们同步的策略
例如:
①用户backupr,允许下行同步
②操作目录为/var/www/html/
2.2配置文件rsyncd.conf
- 需要手动建立,语法类似于Samba配置
- 认证配置auth users、secrets file ,不加则为匿名
2.3rsync账号文件
- 采用“用户名:密码”的记录格式,每一行一个用户记录
- 独立的账号数据集,不依赖于系统账号
2.4启用rsync服务
- 通过–daemon独自提供服务
- 执行kill $(cat /var/run/rsyncd.pid)关闭rsync服务
三、rsync备份工具
3.1rsync配置源的方法
- 格式1
用户名@主机地址::共享模块名
rsync -avz backuper@192.168.27.135::wwwroot /root
- 格式2
rsync://用户名@主机地址/共享模块名
rsync -avz rsync://backuper@192.168.27.133::/wwwroot /root
3.2同步方式
- 全量备份
- 源有的数据全部传送
- 把原来的文件和新文件一起统一传送
- 全量复制,效率低
3.3增量备份
- 在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输增量复制,效率高
3.4rsync命令
- 语法
rsync [选项] 原始位置 目标位置
- 常用选项
四、rsync远程同步部署
4.1实验环境:远程复制(下行复制)
systemctl stop firewalld
getenforce
setenforce 0
ntpdate ntp1.aliyun.com
4.2下载rsync源服务器
[root@rsync ~]# rpm -q rsync
[root@rsync ~]# yum -y install rsync
4.3修改rsync的配置文件
[root@rsync ~]# vim /etc/rsyncd.conf
uid = nobody //root
gid = nobody //root
use chroot = yes //禁锢在源目录
address = 192.168.27.134 //监听地址
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 = 192.168.27.0/24 //允许访问的客户机地址
[ wwwroot ]
path = /var/www/html //源目录的实际路径
comment = Document Root of www.1jm.com
read only = yes //是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z //同步时不在压缩的文件类型
auth users = backuper //授权账号,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db //存放账号信息得到数据文件
- 共享模块全局模块配置
- 共享模块(可以为多个)可以对应不同的“源目录”和授权账号信息
- 此配置文件是为rsync --daemon,模式设置的
4.4为备份账号创建数据文件,存放用户和用户密码
:
[root@rsync ~]# vim /etc/rsyncd_users.db
backuper:sl //无需创建同名系统用户
[root@rsync ~]# chmod 600 /etc/rsyncd_users.db //给密码文件 /etc/rsyncd_users.db一个权限
4.5保证所有用户对源目录/var/www/html 都有读的权限
[root@rsync ~]# mkdir -p /var/www/html
[root@rsync ~]# chmod +r /var/www/html/
[root@rsync ~]# ls -ld /var/www/html/
- 启动rsync服务程序
[root@rsync ~]# rsync --daemon
[root@rsync ~]# netstat -antp | grep rsync
- 关闭rsync服务
[root@rsync ~]# kill $(cat /var/run/rsyncd.pid)
[root@rsync ~]# rm -rf /var/run/rsyncd.pid
4.6测试远程同步
- 服务端
[root@rsync ~]# cd /var/www/html/
[root@rsync html]# echo "hello world" >> 1.txt
4.6.1交互型:验证客户端是否实现远程共享
[root@client /]# mkdir /abc
[root@client /]# rsync -avz backuper@192.168.27.134::wwwroot /abc/ //clietnt进程远程共享
4.6.2免交互格式配置
[root@client abc]# rm -rf 1.txt
[root@client abc]# ls
[root@client abc]# cd ..
[root@client /]# vim /etc/server.pass
sl
[root@client /]# cat /etc/server.pass
sl
[root@client /]# chmod 600 /etc/server.pass
[root@client /]# rsync -avz backuper@192.168.27.134::wwwroot /abc/
Password:
receiving incremental file list
./
1.txt
1.txtls
sent 65 bytes received 192 bytes 17.72 bytes/sec
total size is 24 speedup is 0.09
4.6.3服务端删除1.txt
[root@rsync html]# rm -rf 1.txtls
[root@rsync html]# ls
1.txt
[root@rsync html]# rm -rf 1.txt
[root@rsync html]# ls
[root@client abc]# ls
1.txt 1.txtls
[root@client abc]# rsync -avz --password-file=/etc/server.pass backuper@192.168.27.134::wwwroot /abc
receiving incremental file list
./
1.txt
sent 52 bytes received 102 bytes 14.67 bytes/sec
total size is 12 speedup is 0.08
- 实现的是同步应该是本地也删除1.txt,加上–delete即可实现
[root@client abc]# rsync -avz --delete --password-file=/etc/server.pass backuper@192.168.27.134::wwwroot /abc
receiving incremental file list
deleting 1.txt
./
sent 27 bytes received 47 bytes 6.43 bytes/sec
total size is 0 speedup is 0.00
4.7rsync实时同步
- 定期同步的不足
执行备份的时间固定,延迟明显,实时性差
当同步源长期不变化时,密集的定期任务是不必要的 - 实时同步的优点
一旦同步源出现变化时,立即启动备份
只要同步源无变化,则不执行备份
五、inotify
5.1inotify概述
- 可以监控文件系统的变动情况,并作出通知响应
- 调整inotify内核参数(优化)
/etc/sysctl.conf //内核参数配置文件
inotifywait //用于持续监控,实时输出结果
inotifywatch //用于短期监控,任务完成后再输出结果
max_queue_events //监控事件队列大小
max_user_instances //最多监控实例数
max_user_watches //每个实例最多监控文件数
5.2inotifywait 持续监控并实时输出监控结果
- 格式
inotifywait [参数]
- 参数
常见参数 说明
-m //持续进行监控
-r //递归监控所有子对象
-q //简化输出信息
-e //指定要监控哪些事件类型
六、rsync+inotify实验
6.1修改服务端rsync配置文件
[root@rsync html]# vim /etc/rsyncd.conf
uid = root ##修改为root
gid = root ##修改为root
[wwwroot]
read only = no ##关闭只读,上行同步需要可写权限
[root@rsync html]# kill `cat /var/run/rsyncd.pid`
[root@rsync html]# rsync --daemon
[root@rsync html]# netstat -antp | grep rsync //验证是否开启
6.2客户端修改inotify内核参数
[root@client ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 32768 ##监控时间队列,默认为16384
fs.inotify.max_user_instances = 1024 ##最多监控实例数,默认为128
fs.inotify.max_user_watches = 1048576 ##每个实例最多监控文件数,默认为8192
当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值
[root@client ~]# sysctl -p ## 刷新
6.3客户端安装inotify-tools
[root@client ~]# yum -y install gcc gcc-c++
[root@client ~]# cd /opt
[root@client opt]# rz -E
[root@client opt]# tar zxvf inotify-tools-3.14.tar.gz
[root@client opt]# cd inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure
[root@client inotify-tools-3.14]# make && make install
6.4执行“inotifywait"命令,查看监控
- 在服务器向/var/www/html目录下添加文件、移动文件、跟踪屏幕输出结果
[root@client inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /abc
##新开一个窗口
[root@client ~]# cd /abc/
[root@client abc]# ls
[root@client abc]# touch 1.txt //创建1.txt
[root@client abc]# vim 1.txt
this is sl
[root@client abc]# mv 1.txt 2.txt
[root@client abc]# ls
2.txt
6.5客户端编写触发同步脚本
[root@client opt]# vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /abc/"
RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /abc/ backuper@192.168.27.134::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ]; then
$RSYNC_CMD
fi
done
- INOTIFY_CMD:持续监听并时时报告指定目录下的报告
- RSYNC_CMD:把本地推送到对方192.168.35.40同步源的共享目录里面
- inotify_cmd:监听abc的动态变化,但是无法同步,这时就需要rsync -apzH(H:符号连接)将abc目录下的数据同步,那么同步给谁,backuper@192.168.226.128::wwwroot/:表示同步给rsycn源服务器;数据同步指的是:本地abc的内容同步给wwwroot的模块内/var/www/html内
[root@client opt]# chmod +x /opt/inotify.sh
[root@client opt]# chmod +x /etc/rc.d/rc.local //启动脚本
[root@client opt]# echo "/opt/inotify.sh" >> /etc/rc.d/rc.local
[root@client opt]# sh -x inotify.sh
[root@client opt]# cd /abc/
[root@client abc]# touch 2.txt
## 去查看rsync服务器,已同步