一、Rsync概念
1、rsync是Liunx系统下的数据镜像备份工具,可以远程同步数据,可以在不同主机之间进行同步,可以实现全量备份和增量备份,保持连接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适合用于架构集中备份或异地备份等应用。同时Rsync支持本地复制,或者与其他SSH、rsync主机同步
2、rsync与scp之间的区别比较:
scp无法备份大量数据,类似Windows的复制
rsync边复制,边统计,边比较
二、Rsync特性和优点
1、可以镜像保存整个目录树和文件系统
2、可以很容易做到保持原来文件的权限、时间、软硬连接等等
3、无须特殊权限即可安装
4、快速:第一次同步时rsync复制全部内容,但在下一次只传输修改过的文件
5、压缩传输:rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽
6、安全:可以使用scp、ssh等方式来传输文件
7、支持匿名传输,以方便进行网站镜像
8、选择性保持:符号链接、硬链接、文件属性、权限、时间等
三、Rsync的知识点
1、采用C/S的模式
2、端口号:873
3、配置文件:/etc/rsync.conf
4、rsync的术语
服务端:运行rsyncd服务,准备备份的文件(源文件)
客户端:存放备份文件的服务器
发起端(源端):执行rsync的命令的服务器
同步源(备份源):存放备份文件的服务器
四、rsync的命令选项
-a:--archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等。
-r:--recursive 复制所有下面的资料,递归处理。
-p:--perms 保留档案权限,文件原有属性。
-t:--times 保留时间点,文件原有时间。
-g:--group 保留原有属组。
-o:--owner 保留档案所有者(root only)。
-D:--devices 保留device资讯(root only)。
-l:--links 复制所有的连接,拷贝连接文件。
-z:--compress 压缩模式,当资料在传送到目的端进行档案压缩。
-H:--hard-links 保留硬链接文件。
-A:--acls 保留ACL属性文件,需要配合--perms。
-P:-P参数和 --partial --progress 相同,只是为了把参数简单化,表示传进度。
--version:输出rsync版本。
-v:--verbose 复杂的输出信息。
-u:--update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件。
--port=PORT:定义rsyncd(daemon)要运行的port(预设为tcp 873)。
--delete:删除那些目标位置有的文件而备份源没有的文件。(备份目录和源目录文件一致,把备份目录里不一致的文件删除)
--password-file=:从 指定密码文件中获取密码。
--bwlimit=KBPS:限制 I/O 带宽。
--filter “-filename”:需要过滤的文件。
--exclude=filname:需要过滤的文件。
--progress:显示备份过程。
通常常用的选项 –avz
rsync远程传输用法
rsync 选项 用户@IP ::共享模块(源数据) 备份路径
rsync 选项 源文件 备份路径(和scp基本一样)
rsync -az test 192.168.94.114:/root/
rsync -avz backup@192.168.94.114::share /databack
share:共享模块(目录),把共享目录下的文件传输到 /databack目录下
rsync -avz /databack backup@192.168.78.192::share
把/databack里的文件上传到共享目录(/var/www/html)下
五、Rsync的操作实验
两台机器
94.114(服务端)
94.115 (客户端)
1、关闭防火墙
关闭内核安全机制
配置yum 源
服务端操作(192.168.94.114)
2、安装rsync
yum -y install rsync
3、查看命令存放路径
which rsync
4、本地备份(文件)
rsync 源文件路径 备份路径
rsync /etc/hosts /opt
5、两个文件比较(编辑的方式对比)
vimdiff /etc/hosts /opt/hosts
6、本地备份目录
rsync -r /boot/ /opt
7、查看配置文件路径
rpm -qc rsync
8、修改配置文件
vim /etc/rsyncd.conf
全局配置
uid = root 指定用户和组
gid = root
use chroot = yes 禁锢到源目录(增加了安全性,root用户才可以指定)
max connections = 0 客户端连接数(0,表示,不限制有多少个客户端连接)
pid file = /var/run/rsyncd.pid pid文件
log file = /var/log/rsyncd.log 日志存放位置
transfer logging = yes 传输时记录日志
timeout = 900 超时时间900秒
address = 192.168.94.114 本机IP
port = 873 端口号
ignore nonreadable = yes 忽略不可读的文件
read only = no 是否为只读模式
ignore errors 忽略错误信息
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 支持压缩的类型
局部配置
[share] 模块名随意
path = /var/www/html/ 指定模块目录(共享目录)
comment = backup web 模块描述自己定义
hosts allow = 192.168.94.0/24 限制访问的网段
auth user = backup 认证的用户,不需要创建
secrets file =/etc/rsyncd.secrets 密码存放路径(backup的密码路径)
9、创建共享目录
mkdir -p /var/www/html
cd /var/www/html/
touch aa bb 创建目录文件,验证用
10、创建密码文件
echo “backup:123456” > /etc/rsyncd.secrets
11、修改密码权限
chmod 600 /etc/rsyncd.secrets
12、启动rsync
rsync --deamon (停止,只能杀死)
systemctl start rsyncd
用rsync启动杀死后,再用systemctl启动会报错
把/var/run/rsyncd.pid 删除就好了
netstat -anpt | grep rsync
客户端(94.115)
1、下载rsync
yum -y install rsync
下载就好了,不用修改配置文件,启动
2、远程传输验证
rsync -az test 192.168.94.114:/root/ (和scp一样)
把当前目录下的test文件传输(上传)到94.154服务端的/root目录下
rsync -avz 192.168.94.114:/root/a.test /root
把94.114服务端的/root/a.test文件 (下载)到本机的/root
rsync -avz --progress --delete backup@192.168.94.114::share /databack
把94.114共享模块(/var/www/html)下的文件 下载到 本机的/backup目录下
--progress :传输时显示详细信息
--delete :不/databack目录里跟共享目录不一致的文件删除
3、定时任务
crontba -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/rsyncd.secrets backuper@192.168.94.114::share /backup
4、创建密码文件
vim /etc/rsyncd.secrets
密码:123456
5、修改密码文件权限
chmod 600 /etc/rsyncd.secrets
systemctl restart crontab
六、rsync数据同步+inotify实时同步
计划任务不能实时同步数据(每秒,数据没改变,浪费资源)
Linux 内核从 2.6.13 版本开始提供了 inotify 通知接口,用来监控文件系统的各种变化情况,
如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将 inotify 机制与 rsync 工具相结合,可以实现触发式备份(实时同步)——只要原始位置的文档发生变化,则立即启动增量备份操作;
否则处于静默等待状态,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
客户端(94.115)
1、修改内核参数
vim /etc/sysctl.conf
max_queue_events =16384(监控事件队列,默认值为16384)
max_user_instances =1024 (最多监控实例数,默认值为128)
max_user_watches =1048576(每个实例最多监控文件数,默认值为8192)
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。
sysctl -p
2、下载依赖包
yum -y install gcc gcc-c++ make
3、安装 inotify-tools
tar zxvf inotify-tools-3.14.tar.gz -C /usr/src
cd /usr/src/inotify-tools-3.14/
./configure && make && make install
4、查看软件存放目录
which inotifywait
inotifywait:持续性监控,实时输出
inotifywatch:短期的监控,在监控任务完成之后才会输出结果
5、inotifywait的用法
inotifywait -mrq -e modify,create,move,delete /var/www/html
选项“-e”用来指定要监控哪些事件: modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件
选项“-m”表示持续监控,选项“-r”表示递归整个目录,选项“-q”简化输出信息。
监控/var/www/html目录,目录下一有变化,立刻输出结果
6、编写触发式同步脚本
vim /opt/inotify_rsync.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /backup/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/rsyncd.secrets /backup/ backup@192.168.94.115::share"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
# read 查看 DIRECTORY:目录 EVENT :事件 FILE:文件
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
7、给脚本权限
chmod +x /opt/inotify_rsync.sh
8、后台运行
nohup sh /opt/inotify_rsync.sh > /dev/null 2>&1 &
9、验证
监控目录下创建文件
touch /backup/888
94.115 模块下查看
ls -lh /var/www/html