文章目录
- 一、Rsync同步服务介绍
- Rync服务器
- 全量备份
- 增量备份
- 应用场景
- 包括如下的一些特性
- 二、备份案例
- 2.1 全量备份
- 2.2 增量备份
- 2.3 异地的备份
- 2.4 代替删除(相当于全覆盖)
- 2.5 远程数据备份
- 三、配置Rsync远程同步
- 3.1、rsync同步源简介
- 3.2、如何配置rsync源
- 3.3、环境
- 3.4、具体步骤
- 1、rsync源站配置
- 2、发起端验证
- 免密方式同步文件
- 四、Rsync实时同步
- 4.1、为什么要实时同步
- 4.2、关于inotify
- 4.3、Rsync+inotify实时同步
一、Rsync同步服务介绍
Rync服务器
- Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。
Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。 - rsync监听端口:873
- rsync运行模式:C/S
全量备份
- 所有数据全部传送
- 把原来的文件和新的文件一起统一传送
- 全量复制,效率低
假设客户端上有 file1 file2 file3 文件,服务端上有 file1 文件,现要将客户端上的数据备份至服务端
完全备份方式:
增量备份
- 在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输
- 增量复制,效率较高
假设客户端上有 file1 file2 file3 文件,服务端上有 file1 文件,现要将客户端上的数据备份至服务端
增量备份方式:
应用场景
“推”
即由客户端推送数据至服务器,比如个人电脑上传数据至云盘。
“拉”
即由客户端拉取服务器上的数据,比如利用个人电脑下载云盘文件。
包括如下的一些特性
- 能更新整个目录树和文件系统
- 有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等
- 传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用
- 能用rsh、ssh 或直接端口做为传输端口
- 支持匿名rsync 同步文件,是理想的镜像工具
Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。
二、备份案例
2.1 全量备份
[root@server1 ~]# mkdir /aa #创建目录
[root@server1 ~]# cd /aa
[root@server1 aa]# touch 1 2 3 #创建文件
[root@server1 aa]# rsync -azv /aa /opt/ #备份该目录及目录下文件
rsync -azv /root/aa/ /opt # 备份目录下的文件
2.2 增量备份
[root@server1 aa]# touch 4
[root@server1 aa]# rsync -azv /aa/ /opt
2.3 异地的备份
[root@server1 ~]# rsync -zva /aa/ root@192.168.40.12:/opt
- 进入客户端1查看相关目录下文件
2.4 代替删除(相当于全覆盖)
注:源目录中的文件对目标目录做全覆盖
[root@server1 ~]# mkdir /bb
[root@server1 ~]# echo "I'm iron man " > /bb/index.html
[root@server1 ~]# cat /bb/index.html
I'm iron man
[root@server1 ~]# rsync -avz --delete /bb/ root@192.168.40.12:/opt
- 进客户机1查看信息,发现原文件及目录被删除,只剩下新备份的文件
2.5 远程数据备份
rsync下载操作
在客户机1上直接备份服务器上面的数据:
[root@client1 ~]# rsync -azv root@192.168.40.11:/opt/ /opt
rysnc上传操作
在服务器上面的数据备份到客户机1:
[root@server1 ~]# rsync -avz /opt/ root@192.168.40.12:/opt/
客户端:
三、配置Rsync远程同步
3.1、rsync同步源简介
3.2、如何配置rsync源
1、基本思路
修改rsyncd.conf配置文件、独立的密码文件
启用rsync的--daemon模式
2、应用示例
用户backuper,允许下行同步
操作的目录为/var/www/html
3、配置文件rsyncd.conf
语法类似于Samba配置
认证配置auth users、secrets file,不加则为匿名(nobody)
4、rsync账号文件
采用“用户名:密码”的记录格式,每行一个用户记录
独立的账号数据,不依赖于系统账号(安全)
5、如何启动和关闭rsync
启动rsync:rsync --daemon
关闭rsync:kill $(cat /var/run/rsyncd.pid)
6、rsync命令的用法
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 | 让目标目录和源目录数据保持一致 |
3.3、环境
名称 | IP地址 |
源地址 | 192.168.40.11 |
客户端地址 | 192.168.40.12 |
同步目录 | /var/www/html |
3.4、具体步骤
1、rsync源站配置
- 确认rsync是否已经安装(Centos 7.6自带安装)
[root@Rsync ~]# rpm -qa rsync
rsync-3.0.9-18.el7.x86_64
- 修改配置文件
[root@Rsync ~]# vi /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes #禁锢家目录
address = 192.168.40.11 #提供同步服务的地址
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.40.0/24 #允许同步的网段
[wwwroot]
path = /var/www/html #同步的目录
comment = www.bb.com #描述信息
read only = yes #只读模式开启
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #这些结尾的文件同步时不再压缩
auth users = backuper #指定来访用户
secrets file = /etc/rsyncd_users.db #用户密码存放在secrets file中
- 创建backuper用户的密码文件
[root@Rsync ~]# vi /etc/rsyncd_users.db
backuper:123456
- 服务端的密码文件要600权限
[root@Rsync ~]# chmod 600 /etc/rsyncd_users.db
- 启动服务并查看状态
[root@Rsync ~]# rsync --daemon
[root@Rsync ~]# netstat -anpt | grep rsync
tcp 0 0 192.168.40.11:873 0.0.0.0:* LISTEN 52158/rsync
[root@Rsync ~]# yum -y install httpd #安装apache
[root@Rsync ~]# cd /var/www/html/
[root@Rsync html]# vi index.html
<h1>Avengers Assemble !</h1>
[root@Rsync ~]# chmod 777 /var/www/html/ #给/var/www/html所有权限
2、发起端验证
方法一:
yum -y install httpd
[root@client ~]# rsync -avz backuper@192.168.40.11::wwwroot /var/www/html
Password: #输入密码,不显示
方法二:
[root@client ~]# rsync -avz rsync://backuper@192.168.40.11/wwwroot /opt
Password:
免密方式同步文件
要先在客户端本地创建密码文件/etc/server.pass
[root@client ~]# vi /etc/server.pass
123456
[root@client ~]# mkdir /backup
[root@client ~]# chmod 600 /etc/server.pass
[root@client ~]# rsync -az --password-file=/etc/server.pass backuper@192.168.40.11::wwwroot /backup
[root@client ~]# cd /backup/
[root@client backup]# ls -lh
总用量 4.0K
-rw-r--r-- 1 root root 8 12月 15 13:21 index.html
四、Rsync实时同步
4.1、为什么要实时同步
1、定期同步的不足
执行备份的时间固定,延迟明显,实时性差
当同步源长期不变化时,密集的定期任务是不必要的
2、实时同步的优点
一旦同步源出现变化,立即启动备份
只要同步源无变化,则不执行备份
4.2、关于inotify
1、Linux内核的inotify机制
从版本2.6.13开始提供
可以监控文件系统的变动情况,并做出通知响应
辅助软件: inotify-tools
2、调整inotify内核参数
max_queue_events:监控事件队列大小
max_user_instances:最多监控实例数
max user watches:每个实例最多监控文件数
3、安装inotify-tools辅助工具
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
4、inotify命令
#m:持续监听
#-r:使用递归形式监视目录
#-q:减少冗余信息,只打印出需要的信息
#-e指定要监视的事件,多个时间使用逗号隔开
4.3、Rsync+inotify实时同步
客户端调整inotify内核参数
[root@client ~]# vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 #监控事件队列大小
fs.inotify.max_user_instances = 1024 #最多监控实例数
fs.inotify.max_user_watches = 1048576 #每个实例最多监控文件数
[root@client ~]# sysctl -p
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
源站修改配置文件
[root@Rsync ~]# vi /etc/rsyncd.conf
read only = no
安装inotify-tools辅助工具
[root@client ~]# tar zxf inotify-tools-3.14.tar.gz -C /opt
[root@client ~]# cd /opt/inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure
[root@client inotify-tools-3.14]# make && make install
开启监控
[root@client inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
-m:持续进行监控
-r:递归监控所有子对象
-q:简化输出信息
-e:指定要监控哪些事件类型
modify:修改;create:创建;move:移动;delete:删除
再开一个客户端终端会话,测试监控
[root@client ~]# cd /var/www/html/
[root@client html]# touch aaa
[root@client html]# rm -rf aaa
客户端上编写脚本,将inotify监控和rsync远程同步结合起来
[root@client ~]# vi inotify.sh
#!/bin/bash
INOTIFY="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html"
RSYNC="rsync -avz --delete --password-file=/etc/server.pass /var/www/html backuper@192.168.40.11::wwwroot/" #本地路径在前为源与本地同步
$INOTIFY | while read DIRECTORY EVENT FILE #逐条读取监控记录
do
if [ $(pgrep rsync | wc -l) -le 0 ];then
$RSYNC
fi
done
同步两边目录权限都为777
chmod 777 /var/www/html
ls -lh /var/www #同步源,发起端
运行脚本,在客户端/var/www/html目录下创建文件,查看源端/var/www/html目录是否同步到
客户端
[root@client ~]# sh inotify.sh
另一端:
[root@client ~]# cd /var/www/html/
[root@client html]# echo '<h1>Avengers Assemble</h1>' > index1.html
客户端监控:
源站:
[root@Rsync ~]# cd /var/www/html/
[root@Rsync html]# ls -lh
[root@Rsync html]# cd html/
[root@Rsync html]# ls -lh
[root@Rsync html]# cat index.html