一、rsync的概念
一款快速的增量备份工具,rsync是一款开源的、快速的、多功能的、可实现全量以及增量的本地或远程数据同步备份的
优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。远程同步,
支持本地复制(RSYNC 做本地复制的话首先就爱那个源文件和目标位置的文件对比,找出差异部分根据目的位置的文件与源文件差异的部分,进行一致性的同步)cp是将我们源文件完整复制 到 指定路径下全备。或者与其他SSH、rsync主机同步。
1.1 rsync的同步方式
全量备份: 原有的数据全部传送
,把原来的文件和新的文件一起统一传送,全量复制,效率低。
增量备份: 在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比
,把不一致的数据通过网络传输增量复制,效率高。
1.2 rsync的特性
- 可以镜像保存整个目录和文件系统
- 可以很容易做到保持原有的权限、时间、软硬链接等。
- 无须特殊权限即可安装
快速 第一次同步时:rsync会复制全部内容
,但是在下一次传输修改过的文件
,rsync在传输数据的过程中可以实行压缩以及解压缩
操作,因此可以使用更少的宽带。
安全
可以使用scp、ssh等方式来传输文件
也可以通过socket连接
支持匿名传输,以方便进行网站镜像
1.3 rsync与cp、scp对比
cp命令是一种典型的将文件完整的拷贝到一个位置。而rsync是,第一次拷贝,在目标位置没有的时候,rsync是全量拷贝过去,但是第二次拷贝的时候,只会对差异项进行同步拷贝。所以如果对同一个文件进行二次备份的话,rsync速度对相较于cp而言更快。
cp只支持本地,而rsync支持远程
scp是基于cp原理,也是属于完整性的拷贝文件。假设rsync和scp拷贝的文件都是第一,目标地址都没有要同步的文件,此时,这两者的差异就在于,第一个,这个要传输的文件大不大,第二个要看在传输的过程中,用的带宽大不大。如果文件不大的情况下,scp是把数据从磁盘中的块存储提取出来,封装一下,网络传过去,scp更快,如果是更大的文件,比如说40G的,带宽只支持100M的带宽,scp想要传输,需要拆分数据,一段一段的传输。而rsync会根据一个逻辑意义上的空间,把数据划分出来,把数据先压缩在传输,所以这种方式而言,带宽校验,文件大,这个时候先压缩在传输会比较快。此时适合用rsync远程同步。
1.4 rsync同类服务
sync同步: 刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级快。
async异步: 将数据先放入缓冲区,再周期性(一般是30s)的去同步到磁盘。
rsync远程同步: remote synchronous
1.5 备份的方式
发起端:负责rsync 同步操作的客户机叫做发起端,通知服务器我要备份你的数据
备份源:负责响应来自客户机rsync 同步操作的服务器叫做备份源,需要备份的服务器
服务端:运行rsyncd服务,一般来说,需要备份的服务器
客户端:存放备份数据
二、rsync源服务器的关系(下行同步、上行同步)
- rsync同步源
- 指备份操作的远程服务器,也称为备份源
例:
A服务器同步B服务器的数据,B服务器就是备份源
反过来,B服务器同步A服务器的数据,那么A服务器就是备份源。
在远程同步任务中,负责发起rsync同步操作的客户机称为客户端,而负责响应来自客户端的rsync同步操作的服务器称为备份源,也称之为同步源。
1.在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限。
2.在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限。
在做rsync的时候,从哪个端发起的就是(发起端),发起端到同步源就是 上行! 反之就是下行!
三、rsync命令
命令使用语法
rsync 【选项】原始位置 目标位置
常用选项
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)。
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
-p:保留文件的权限标记。
-t:保留文件的时间标记。
-g:保留文件的属组标记(仅超级用户使用)。
-o:保留文件的属主标记(仅超级用户使用)。
-H:保留硬连接文件。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
--delete:删除目标位置有而原始位置没有的文件。
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
常用的是-avz
四、配置rsync源
1、基本思路
- 建立rsyncd.conf配置文件、独立的账号文件
- 启用rsync的 --daemon模式
2、配置文件rsyncd.conf
- 认证配置auth users、secrets file,不加则为匿名
3、独立的账号文件
- 用户名:密码
- 每行一个用户记录
- 独立的账号数据,不依赖系统账号
4、启用rsync服务
- 通过 --daemon独自提供服务,rsync --daemon
- 执行kill $(cat /var/run/rsyncd.pid)关闭服务
五、rsync本地复制实例
以下两者区别是什么?
- rsync -avz zzh/ /opt/:只会拷贝abc目录下面的文件,而不会拷贝abc这个目录
- rsync -avz /zzh /opt/: 会连着目录一起拷贝到opt下
六、配置源的两种表达方法
格式一:
用户名@主机地址::共享模块名
rsync -avz backuper@192.168.10.22::wwwroot /opt/…
#backuper:指的是我在同步的时候用的哪个用户身份
#wwwroot:代表的是模块,模块下面会写同步的默认路径和一些特性,所以我们只需要写模块就好了
#/root:指的是本地节点格式二:
rsync://用户名@主机地址/共享模块名
rsync -avz rsync://backuper@192.168.10.22/wwwroot /opt/URL:具体的位置点,例如:>http://www.baidu.com./class1/men/id01.html
URI:标识的是拥有同一类特性或类型的一个集合 ,例如http://www.baidu.com./class1/men
七、inotify简介
可以监控文件系统的变动情况,并做出通知响应
-
调整inotify内核参数(优化)
-
/etc/sysctl.conf(内核参数配置文件)
max_queue_events #监控事件队列大小
max_user_instances #最多监控实例数
max_user_watches #每个实例最多监控文件数
-
inotifywait:用于持续监控,实时输出结果
-
inotifywatch:用于短期监控,任务完成后再输出结果
例子:inotifywait -mrq -e modify,create,move,delete /var/www/html
选项 | 说明 |
---|---|
-m | 持续进行监控 |
-r | 递归监控所有子对象 |
-q | 简化输出信息 |
-e | 指定要监控哪些事件类型 |
modify | 修改 |
create | 创建 |
move | 移动 |
delete | 删除 |
八、配置rsync下行同步
环境配置
主机 | 操作系统 | IP地址 | 软件 / 安装包 / 工具 |
---|---|---|---|
Master | CentOS7 | 192.168.200.12 | rsync |
Slave | CentOS7 | 192.168.200.14 | rsync / inotify-tools-3.14.tar.gz |
- 安装包链接:inotify-tools-3.14.tar.gz
- 下行同步:将master服务器数据备份到slave服务器
8.1 将 Master 服务器数据备份到 Slave 服务器
master(192.168.200.12)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#关闭防火墙及安装机制
yum install -y httpd rsync
#rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
vim /etc/rsyncd.conf
#编辑rsync配置文件
uid = root
gid = root
use chroot = yes
address = 192.168.10.29
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.10.0/24
[wwwroot]
path = /var/www/html
comment = Document Root of www.zzh.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper
secrets file = /etc/rsyncd_users.db
----详解----
uid = root #用户id,表示共享权限能执行的身份
gid = root #组id
use chroot = yes #开启,禁锢在源目录,表示允许在访问我备份的目录或文件的时候,使用的角色是root,同时你访问本地目录时拥有的也是root权限
address = 192.168.10.28 #监听地址
port 873 #默认端口号为873
log file = /var/log/rsyncd.log #日志文件存放位置
pid file = /var/run/rsyncd.pid #存放进程id的文件位置
hosts allow = 192.168.10.0/24 #允许访问的主机网段,有点类似于黑白名单
[wwwroot] #共享模块的名称,rsync默认调用该模块,默认我调用的路径是该模块指定的路径
path = /var/www/html #源目录路径
comment = Document Root of www.zzh.com #
read only = yes #是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型,因为同步时,-avz已经进行压缩
auth users = backuper #授权用户,使用wwwroot模块的用户是哪个用户,多个账户以空格隔开
secrets file = /etc/rsyncd_users.db #存放账号信息的数据文件,一行一个
----
vim /etc/rsyncd_users.db
backuper:123123
#编辑用户账号文件,固定格式为[名称:密码],一行一个
chmod 600 /etc/rsyncd_users.db
#官方要求,最好只是赋权600!
#保证所有用户对源目录/var/www/html 都有读取权限
chmod +r /var/www/html/
ls -ld /var/www/html/
rsync --daemon
#开启服务
netstat -natp | grep rsync
#检测端口号,确认服务是否成功开启
cd /var/www/html
#切换至共享目录下
touch aaa.html bbb.html
ls
#关闭 rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
8.2 server(192.68.200.14)
systemctl stop firewalld.service
setenforce 0mkdir /opt/kgc_backup
rsync -avz ccc@192.168.200.12::wwwroot /opt/kgc_backup/ls /opt/kgc_backup/
#免交互格式配置:echo "123456" > /etc/server.pass
chmod 600 /etc/server.passrm -rf ky36.txt
echo "cxj xihuan cph">ky36.txt
echo "cph xihuan cxj">ky37.txt
九、rsync+inotify 上行同步
9.1 服务端(192.168.200.12)
vim /etc/rsyncd.conf
read only = no
kill `cat /var/run/rsyncd.pid`
rm -rf /var/run/rsyncd.pid
rsync --daemon
netstat -natp | grep rsync
#mkdir /data/
chmod 777 /data
9.2 应用服务器(192.168.200.14)
mkdir /var/www/html/kgc/ -p 先创建一个要上传的文件
yum -y install gcc gcc-c++
#放入安装包
tar zxvf inotify-tools-3.14.tar.gz -C /opt
cd /opt/inotify-tools-3.14/
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 = 1045876
sysctl -p./configure
make && make install
#可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /var/www/html 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
inotifywait -mrq -e modify,create,move,delete /var/www/html操作验证查看是否能看到
在另外一个终端编写触发式同步脚本(注意,脚本名不可包含 rsync 字符串,否则脚本不生效)
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/kgc"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/kgc ccc@192.168.200.12::ky35"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
##while判断是否接收到监控记录
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
cd /opt/
chmod +x inotify.sh
#给脚本赋权
chmod +x /etc/rc.d/rc.local
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local
#设置开机自启动
sh -x inotify.sh
#执行脚本
cd /opt/abc
touch jingjing.html
rm -rf jiang.html
#创建一个新的html文件并删除之前的qwe
ls
十、总结
rsync的特点
1.能够镜像保存整个目录树和文件系统。
2.能够很容易作到保持原来文件的权限、时间、软硬连接等等。
3.无须特殊权限便可安装。
4.快速:第一次同步时 rsync 会复制所有内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程当中能够实行压缩及解压缩操做,所以可使用更少的带宽。
5.安全:可使用scp、ssh等方式来传输文件,固然也能够经过直接的socket链接。
6.支持匿名传输,以方便进行网站镜象。
rsync的优势与不足
优势:
1.与传统的cp、tar备份方式相比,rsync具备安全性高、备份迅速、支持增量备份等优势,经过rsync能够解决对实时性要求不高的数据备份需求,例如按期的备份文件服务器数据到远端服务器,对本地磁盘按期作数据镜像等。
缺点:
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了不少不足,首先,rsync同步数据时,须要扫描全部文件后进行比对,进行差量传输。若是文件数量达到了百万甚至千万量级,扫描全部文件将是很是耗时的。并且正在发生变化的每每是其中不多的一部分,这是很是低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它能够经过linux守护进程的方式进行触发同步,可是两次触发动做必定会有时间差,这样就致使了服务端和客户端数据可能出现不一致,没法在应用故障时彻底的恢复数据。