一、rsync服务基本介绍
1.1 Rync服务器
- Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。
- Rsync是一个快速rsync监听端口:873和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。
- rsync监听端口:873
- rsync运行模式:C/S
1.2 全量备份与增量备份
1.2.1 全量备份
- 所有数据全部传送
- 把原来的文件和新的文件一起统一传送
- 全量复制,效率低
假设客户端上有 file1 file2 file3 文件,服务端上有 file1 文件,现要将客户端上的数据备份至服务端
- 完全备份方式:
1.2.2 增量备份
- 在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输
- 增量复制,效率较高
假设客户端上有 file1 file2 file3 文件,服务端上有 file1 文件,现要将客户端上的数据备份至服务端
- 增量备份方式:
二、rsync参数及部署
2.1 rsync命令参数
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代 rsh 的 shell 程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--partial #断点续传
--delete #让目标目录和源目录数据保持一致
2.2 rsync守护进程部署
修改rsync主配置文件/etc/rsync.conf
[root@server1 ~]# vi /etc/rsyncd.conf
uid = nobody # 匿名 删除前面的注释
gid = nobody # 匿名 删除前面的注释
use chroot = yes # 不锁定宿主目录,删除前面的注释
max connections = 200 # 后台最大连接数,删除注释
pid file = /var/run/rsyncd.pid # 删除注释
log file = /vsr/log/rsync.log # 后添加日志目录
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 指定一些固定结尾的文件不压缩
hosts allow = 192.168.10.0/24
address = 192.168.10.11
port 873
[wwwroot] # 复制目录修改内容,及以下内容
path = /www # 目录位置
comment = web site page # 目录描述
read only =yes # 权限为只读
auth users = zhangsan # 授权账户名
secrets file = /etc/user.db # 账户信息存储位置(用户数据文件)
设置账户信息
[root@server1 ~]# vi /etc/user.db
zhangsan:123456
[root@server1 ~]# chmod 600 /etc/user.db
[root@server1 ~]# rsync --daemon
[root@server1 ~]# netstat -anpt | grep 873
tcp 0 0 192.168.10.11:873 0.0.0.0:* LISTEN 61088/rsync
2.3 验证
-
方式一:
创建/www目录,在目录下面创建新文件。其他目录访问不成功。
进入客户机备份数据:
[root@server2 opt]# rsync -azv [email protected]::wwwroot /opt
-
方式二:
[root@server2 ~]# rsync -azv rsync://[email protected]/wwwroot /bak
-
方式三:免交互
[root@server2 ~]# rsync -azv --password-file=/root/password rsync://[email protected]/wwwroot /bak2
获取信息成功
2.4 rsync实时同步
2.4.1 定期同步的不足
- 执行备份的时间固定,延迟明显、实时性差
- 当同步源长期不变化时,密集的定期任务是不必要的
2.4.2 实时同步的优点
- 一旦同步源出现变化,立即启动备份
- 只要同步源无变化,则不执行备份
三、案例
3.1 全量备份
mkdir aa
cd aa
touch a b c
rsync -azv /root/aa /opt # 备份目录下的文件

rsync -azv /root/aa/ /opt # 备份该目录及目录下文件
3.2 增量备份
[root@server1 aa]# touch d
[root@server1 aa]# rsync -azv /root/aa /opt
3.3 异地的备份
[root@server1 ~]# rsync -zva /root/aa/ [email protected]:/opt
进入客户端2查看相关目录下文件
3.4 代替删除(相当于全覆盖)
[root@server1 ~]# mkdir /bb
[root@server1 ~]# echo "bbbbbbb" > /bb/11
[root@server1 ~]# cat /bb/11
bbbbbbb
[root@server1 ~]# rsync -avz --delete /bb/ [email protected]:/opt
进客户机2查看信息,发现原文件及目录被删除,只剩下新备份的文件
3.5 远程数据备份
rsync下拉操作
在客户机2上面直接备份1上面的数据:
[root@server2 opt]# rsync -azv [email protected]:/root/aa/ /opt
四、关于inotify
4.1 Linux内核的inotify机制
- 从版本2.6.13开始提供
- 可以监控文件系统的变动情况,并做出通知响应
- 辅助软件: inotify-tools
4.2 调整inotify内核参数
- max_queue_events:监控事件队列大小
- max_user_instances:最多监控实例数
- max user watches:每个实例最多监控文件数
4.3 安装inotify-tools辅助工具
- inotifywait:用于持续监控,实时输出结果
- inotifywatch:用于短期监控,任务完成后再出结果
4.4 inotify命令
命令 | 描述 |
---|---|
#m | 持续监听 |
#-r | 使用递归形式监视目录 |
#-q | 减少冗余信息,只打印出需要的信息 |
#-e | 指定要监视的事件,多个时间使用逗号隔开 |
4.5 对于inotify监控调整内核参数
[root@server2 html]# vi /etc/sysctl.conf
//添加以下
fs.inotify.max_queued_events = 16384 #监控事件的最大队列数
fs.inotify.max_user_instances = 1024# #监控最大实例数
fs.inotify.max_user_watches = 104876 #监控每个实例的最大文件数
[root@server2 html]# sysctl -p # 写入系统内存
4.6 rsync+inotify
需要分清客户端与服务器上面配置的差异;
客户端 | 服务器 |
---|---|
rsync关闭状态 | rsync开启状态 |
netstat -anpt | grep 873无返回值 |
pgrep rsync无返回值 | pgrep rsync有返回值 |
-
服务器上面的配置:
rsync配置文件中需要关闭只读选项,即可以修改目录。vi /etc/rsync.conf [wwwroot] path = /var/www/html comment = web site page read only = no auth users = zhangsan secrets file = /etc/user.db
对应的/etc/user.db文件也应该是有对应内容及权限为600。
- 客户端的配置:
导入并解包inotify-tools-3.14.tar.gz
[root@server2 ~]# tar zxvf inotify-tools-3.14.tar.gz
[root@server2 ~]# cd inotify-tools-3.14/
[root@server2 inotify-tools-3.14]# ./configure && make && make install
配置自动检测脚本
[root@server1 ~]# vi /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,delete,move /var/www/html"
RSYNC_CMD="rsync -avz --delete --password-file=/root/password /var/www/html/ [email protected]::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ]
then $RSYNC_CMD
fi
done
另外需要在根目录下设置免交互密码
vi password
123456
运行程序即可
sh /opt/inotify.sh
然后可以新开一个客户端窗口,在目录/var/www/html/目录下新建一个网页文本,脚本就会自动检测并执行同步到服务器端,形成同步。