文章目录

  • 1.rsync简介
  • 1.1rsync数据同步备份方式
  • 1.2 rsync命令语法
  • 2. rsync远程同步
  • 2.1部署rsync服务器
  • 2.2测试、远端同步
  • 3.rsync+inotify实时同步
  • 3.1实验


1.rsync简介

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多操作系统平台。
Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。
rsync监听端口:873 ,rsync运行模式:C/S

1.1rsync数据同步备份方式

全量备份
所有数据全部传送
把原来的文件和新的文件一起统一传送
全量复制,效率低

增量备份
在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输
增量复制,效率较高

1.2 rsync命令语法

本地备份

rsync [OPTION...] SRC [DEST]

远程备份

#拉操作(下载)
rsync [OPTION...] [USER@]HOST:SRC [DEST]
##SRC:需要下载的远端文件  DEST:本地存取此文件的路径
#推操作(上传)
rsync [OPTION...] SRC [USER@]HOST:DEST
##SRC:本端需要上传的文件  DEST:远端存取此文件的路径

[option]选项参数
-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. rsync远程同步

2.1部署rsync服务器

安装rsync

yum -y install rsync

修改rsync主配置文件

vi /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no           		#是否禁锢家目录
address = 192.168.20.10     	#提供同步服务的地址
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.20.0/24       #允许同步的网段

[html]
path = /var/www/html   	#同步的目录
comment = www.test.com
read only = yes      	#只读模式开启
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2   #这些结尾的文件同步时不再压缩
auth users = html     
secrets file = /etc/rsyncd_users.db   #用户密码存放路径

创建rsync程序用户

useradd -M -s /sbin/nologin rsync

添加rsync用户密码信息并给文件加权限

vi /etc/rsyncd_users.db
html:123456

chmod 600 /etc/rsyncd_users.db

启动服务

rsync --daemon		#守护进程启动模式
systemctl start rsync		#直接启动服务
netstat -napt | grep rsync		#检查873端口是否开启

给备份目录修改属主属组并添加文件

chown rsync:rsync /var/www/html
vi index.html
<h1>THIS IS TEST PAGE</h1>

2.2测试、远端同步

客户端做远端同步

rsync -avz html@192.168.20.10::html /var/www/html
rsync -avz rsync://html@192.168.20.10/html /var/www/html
##两种下载方式,输入命令后交互输入密码,开始同步

查看客户端本地目录,文件已同步

cat /var/www/html/index.html
<h1>THIS IS TEST PAGE</h1>

免密方式同步文件

#客户端创建密码文件
vi /etc/rsync.password
123456

chmod 600 /etc/rsync.password		#为密码文件添加权限
rsync -avz html@192.168.20.10::html /var/www/html --password-file=/etc/rsync.password

3.rsync+inotify实时同步

定期同步的不足
执行备份的时间固定,延迟明显,实时性差
当同步源长期不变化时,密集的定期任务是不必要的
实时同步的优点
一旦同步源出现变化,立即启动备份
只要同步源无变化,则不执行备份

3.1实验

在rsync客户端配置inotify

##调整inotify内核参数
vi /etc/sysctl.conf 
fs.inotify.max_queued_events = 16384	##监控事件队列大小
fs.inotify.max_user_instances = 1024	##最多监控实例数
fs.inotify.max_user_watches = 1048576	##每个实例最多监控文件数

##安装inotify-tools软件
tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14/
./configure 
make && make install

在rsync服务端修改配置文件

vi /etc/rsyncd.conf
read only = no  	#关闭只读模式

rsync客户端开启实时inotify实时监控

inotifywait -mrq -e modify,create,move,delete /var/www/html/		#实时监控目录文件的读写修改操作

编写脚本,将inotify实时监控和rsync远端同步结合
当监控到同步的目录内容发生变化,立刻执行rsync同步命令

vi inotify.sh
#!/bin/bash
INOTIFY="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC="rsync -avz --delete --password-file=/etc/rsync.password /var/www/html/ html@192.168.20.10::html/"
$INOTIFY | while read DIRECTORY EVENT FILE   
do
        if [ $(pgrep rsync | wc -l) -le 0 ];then
            $RSYNC
        fi
done

客户端和服务器两端需同步的目录设置权限,执行脚本

#rsync服务器
chmod 777 /var/www/html
#rsync客户端
chmod 777 /var/www/html
chmod +x inotify.sh
./inotify.sh

测试
rsync客户端

vi /var/www/html/test.html
<h1>THIS IS inotify+rsync TEST</h1>

rsync服务端

cat /var/www/html/test.html
<h1>THIS IS inotify+rsync TEST</h1>