标签:文件 Rsync 同步 inotify 备份 rsync html
目录:
1、概念
2、Rsync同步方式
3、优点
4、缺点
5、适用场景
6、常用Rsync命令
7、实验
8、Rsync实时同步
Rsync+inotify问题
实验
Rsync
概念
一款快速增量备份工具可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
可实现全量备份与增量备份,保持链接和权限且采用优化的同步算法
传输前执行压缩,因此非常适合用于架构集中式备份或异地备份等应用。同时支持本地复制或者与其他 SSH、rsync 主机同步
本地复制与rsync区别:
cp将源文件完整的复制到指定路径下
rsync做本地复制
①首先将源文件和目标的位置文件做比对
②根据目的位置的文件与源文件差异的部,进行一致性同步
监听的端口:873
C/S模式
rsync同步方式:
(1)完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地。
(2)差异备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)
(3)增量备份:备份上次备份以后有变化的数据(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性)
优点:
(1)可以镜像保存整个目录树和文件系统。
(2)可以很容易做到保持原来文件的权限、时间、软硬链接等等。
(3)无须特殊权限即可安装。
(4)快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
(5)安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
(6)支持匿名传输,以方便进行网站镜像。
(7)跨平台:可在不同操作系统之间同步数据
缺点:
(1)客户端需要对多个文件数据块进行多次计算与比较验证码,对 CPU 的消耗比较大;服务端需要根据原文件和客户端传送过来的差异数据进行文件内容重组,对 IO 的消耗比较大。
(2)rsync 每次同步都需要先进行所有文件的扫描和计算、对比,最后才能进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且如果改动的只是其中很小的一部分,这就是非常低效的方式。
(3)rsync 不能实时的去监测、同步数据,虽然它可以通过 crontab 守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据(无法实现实时同步),而且繁忙的轮询会消耗大量的资源。
适用场景
需要同步的文件改动越频繁,则客户端需要计算和比较的数据块验证码就越多(遇到数据块内容不相同时,只能跳过一个字节继续往后计算与比较,相同则可跳过一个数据块),对 CPU 的消耗就会越大;需要同步的文件越大,服务端每次都需要从一个很大的文件中复制相同的数据块进行新文件重组,几乎相当于直接 cp 了一个大文件,对 IO 的消耗也就越大。 所以 rsync 适合对改动不频繁、大小比较小的文件进行同步,对于改动频繁的大文件,只能偶尔同步一次,相当于备份的功能,而不是同步。
常用Rsync命令
格式:
rsync [选项] 原始位置 目标位置
选项:
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-p:保留文件的权限标记。
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-H:保留硬连接文件
-A:保留ACL属性信息
-D:保留设备文件及其他特殊文件。
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据对象的校验和来决定是否跳过文件
实验:
rpm -q rsync #正常情况下已安装
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes #禁锢在源目录
address = 192.168.63.100 #监听地址
port = 873 #监听端口号 tcp/udp 873
log file =/var/log/rsycd.log #日志地址
pid file = /var/run/rsyncd.pid #存放进程ID的文件位置
host allow =192.168.63.0/24 #允许访问的客户机地址
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #同步时不再压缩的文件类型
[wwwroot] #共享模块名称
path = /var/www/html #原目录实际路径
comment = web service #备注
read only = yes #是否只读
auth users =backuper #授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件
#如果采用匿名的方式,只要将其中的“auth users” 和“secrets file” 配置项去掉即可
vim /etc/rsyncd_users.db #为备份账户创建数据文件
backuper:123123 #建立同步用户
chmod 600 /etc/rsyncd_users.db #一定要600 权限(多了也不行)
yum install httpd -y
chmod +r /var/www/html
ls -ld /var/www/html
启动rsync
rsync --daemon #守护进程后台运行
netstat -anpt |grep rsync
客户端:
配置
//
配置源的2种表达方法:
① 用户名@主机地址::共享模块名
rsync -avz
[email protected]::wwwroot /opt/
②rsync://用户名@主机地址/共享模块名
rsync -avz rsync://
[email protected]/wwwroot /opt/
//
rsync -avz
[email protected]::wwwroot /opt/
密码:123123
免交互:
echo "123123" > /etc/server.pass
chmod 600 /etc/server.pass
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass
[email protected]::wwwroot /opt/
systemctl restart crond
systemctl enable crond
测试:
服务端:
vim index.html
this is abc
客户端:
rsync -avz
[email protected]::wwwroot /opt/
cd /opt
ll
能看到同步了index
mv index.html index1.html
rsync -avz
[email protected]::wwwroot /opt/
ll
能看到再次同步过来index
rsync -avz --delete
[email protected]::wwwroot /opt/
ll
能看到,与服务器不同的文件全部删除
rsync实时同步
使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
因为inotify通知机制由 Linux内核提供,因此主要做本机监控,在触发式备份中,应用时更适合上行同步。
rsync + inotify 问题
1. 同一个操作会触发多个事件。
2. inotifywait 存在缺陷,当向监控目录下拷贝复杂层次目录(多层次目录中包含文件),或者向其中拷贝大量文件时,inotifywait 经常会随机性地遗漏某些文件。
3. 并发如果大于 200 个文件(10-100K),同步会有延迟。
4. 监控到事件后,调用 rsync 同步是单线程的。
实验:
服务器
vim /etc/rsyncd.conf
read only = no #修改只读模式为no
kill $(cat /var/run/rsyncd.pid)
ss -ntap |grep rsync
chmod 777 /var/www/html/
客:
调整inotify内核参数
max_queue_events:监控队列大小 默认16384
max_user_instances:最多监控实例数 默认 128
max_user_watches:每个实例最多监控文件数 默认8192
cat /proc/sys/fs/inotify/max_queued_events
16383
cat /proc/sys/fs/inotify/max_user_instances
128
cat /proc/sys/fs/inotify/max_user_watches
8192
vi /etc/sysctl.conf
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
安装inotify (发起端→客户端)
安装inotify-tools辅助工具
inotifywait:用于持续监控,实时输出结果(增删改属性修改)
inotifywatch:用于短期监控,任务完成后再出汇总结果
yum install make gcc gcc-c++ -y
cd /opt
tar zxvf inotify-tools-3.14.tar.gz -C /opt
cd inotify-tools-3.14/
./configure
make && make install
yum install httpd -y
#可以先执行“inotifywait”命令,然后另外再开启一个新的终端向 /var/www/html 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
[root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html
-e 用来指定要监控哪些事情
-m 表示持续监控
-r 表示递归整个目录
-q 简化输出信息
开启客户端的另外1个窗口后进行操作
vim /var/www/html/index1.html
this is qwe
可以在客户端的第一个窗口看到变动
脚本触发
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /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
chmod +x /opt/inotify.sh
chmod 777 /var/www/html/
chmod +x /etc/rc.d/rc.local
echo '/opt/inotify.sh' >> /etc/rc.d/rc.local
bash /opt/inotify.sh
测试:
服:
rsync --daemon
cd /var/www/html/
客:
上述脚本用来检测本机/var/www/html 目录的变动情况,一旦有更新发rsync 同步操作,上传备份至服务器 192.168.63.100 的 wwwroot共享目录下。
在本机(客户机)运行/opt/inotify.sh脚本程序
用客户机的另外1个窗口切换到本机(客户机)的/var/www/html目录
进行创建、修改等操作查看变化
查看服务端中的wwwroot目录下的变化
扩展:
sersync可以去看一看
级联服务器:
查端口去看:
用telnet ,侦测端口,他还可以用来防断开(升级openssl)
参考:
https://www.cnblogs.com/wujuntian/p/16410235.html
标签:文件,
Rsync,
同步,
inotify,
备份,
rsync,
html
From: https://www.cnblogs.com/qfrg/p/16969857.html