rsync
rsync是lunix系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
优点:
1)、可以镜像保存整个目录树和文件系统。
2)、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3)、无须特殊权限即可安装。
4)、快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
5)、安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6)、支持匿名传输,以方便进行网站镜象。
缺点:
1)同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了rsync效率。
2)rsync不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。
rsync的4种工作模式
1) 拷贝本地文件 rsync -a /data /backup#
2)从远程rsync服务器中拷贝文件到本地机:rsync -av zroot@192.168.4.7:/databack /opt
3) 从本地机器拷贝文件到远程rsync服务器中 :rsync -av /opt root@192.168.4.7:/databack
4)列出远程机的文件列表:rsync -v root@192.168.4.7:/databack
rsync选项描述
-n:测试同步过程,不做实际修改
–delete:删除目标文件夹内多余的文档
-a:归档模式,相当于-rlptgoD
-v:显示详细操作信息
-z:传输过程中启用压缩/解压
inotify
inotify 是Linux 的一个内核特性,是一种强大的、细粒度的、异步的文件系统事件监控机制。它可以监控文件系统中的添加、删除、修改、移 动等各种细微事件,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。
rsync+inotify
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了rsync同步数据的实时性问题。
inotifywait监控
– inotifywait [选项] 目标文件夹
• 常用命令选项
– -m,持续监控(捕获一个事件后不退出)
– -r,递归监控、包括子目录及文件
– -q,减少屏幕输出信息
– -e,指定监视的 modify、move、create、delete、attrib 等事件类别
本例要求为两台Web服务器svr7、pc207的网页文档目录配置镜像同步,主要基于inotifywait监控技术实现实时触发操作,需要完成下列任务:
---------以 svr7 为发起方,原始目录为 /var/www/html/
---------以 pc207 为同步目标,基于SSH免密验证
编写 inotify+rsync 同步脚本,验证实时同步效果
一 :为主机svr7、pc207部署同步目录
1 确认svr7的目录内容(向目录提供测试文件)
[root@svr7 ~]# yum -y install httpd
[root@svr7 ~]# touch /var/www/html/text
[root@svr7 ~]# ls /var/www/html
text
2 确认pc207的目录内容
[root@pc207 ~]# yum -y install httpd
[root@pc207 ~]# ls /var/www/html //pc207的此目录下为空
二 :为svr7配置到pc207的SSH密钥对验证,实现免密码交互
1 检查当前用户是否已经有可用的SSH密钥对文件
[root@svr7 ~]# ls .ssh/id_*
/root/.ssh/id_rsa /root/.ssh/id_rsa.pub
如果找不到id_rsa、id_rsa.pub密钥对文件,则需要执行下列操作创建
[root@svr7 ~]# ssh-keygen (# 生成公钥,私钥对)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): //按回车,确认存放位
Enter passphrase (empty for no passphrase): //按回车,确认不要密码
Enter same passphrase again: //再次按回车,确认
Your identification has been saved in yes.
Your public key has been saved in yes[root@svr7 ~]#.pub.
The key fingerprint is:
SHA256:Bfz6TOoAEJ0RPQf/YASomPasiJspRe/n5ytO92IhbhE root@svr7.example.com
The key's randomart image is:
+---[RSA 2048]----+
| ..o*o+o |
| .+ ooo. |
| o.. o+.. |
|o.o. E. +. |
|..o.. .S.. |
| .o..o o . |
|o... .oo.* |
|++ ..=o=.o |
|=. =o*+o. |
+----[SHA256]-----+
[root@pc207 ~]# ls .ssh // 查看PC207上的远程管理文件
known_hosts
2 将当前用户的SSH公钥部署到远程主机
[root@svr7 ~]# ssh-copy-id root@192.168.4.207
[root@pc207 ~]# ls .ssh #当svr7将公钥传递给pc207后,/root/.ssh文件内多了公钥authorized_keys
authorized_keys known_hosts
3 验证免密码登录效果
[root@svr7 ~]# ssh root@192.168.4.207
Last login: Mon Oct 8 18:42:28 2018 from 192.168.4.254
[root@pc207 ~]# //确认已免密码连入远程主机
[root@pc207 ~]# exit //退出SSH登录环境
[root@svr7 ~]# //已返回客户机
三 在虚拟机sv7中安装inotify-tools工具,实现监控目录内容的变化
1 真机传递软件包到虚拟机svr7中
[root@room9pc01 ~]# scp /root/桌面/tools.tar.gz root@192.168.4.7:/
root@192.168.4.7's password:
tools.tar.gz 100% 766KB 20.0MB/s 00:00
2 在虚拟机svr7中解包tools.tar.gz,并安装源码包
[root@svr7 ~]# tar -xf /tools.tar.gz -C /root/
[root@svr7 ~]# ls
anaconda-ks.cfg isync.sh yes 模板 文档 桌面
initial-setup-ks.cfg passwd yes.pub 视频 下载
inotify-tools-3.13.tar.gz tools 公共 图片 音乐
[root@svr7 ~]# tar -xf /root/tools/inotify-tools-3.13.tar.gz -C . //解压缩到当前目录i
[root@svr7 ~]# ls
anaconda-ks.cfg isync.sh yes 模板 文档 桌面
initial-setup-ks.cfg passwd yes.pub 视频 下载
inotify-tools-3.13 tools 公共 图片 音乐
[root@svr7 ~]# cd inotify-tools-3.13/ //切换到此目录
[root@svr7 inotify-tools-3.13]# yum -y install gcc make //安装编译工具
[root@svr7 inotify-tools-3.13]# ./configure //完成系统检测与配置,并指定默认安装路径
[root@svr7 inotify-tools-3.13]# make //编译
[root@svr7 inotify-tools-3.13]# make install //安装
[root@svr7 inotify-tools-3.13]# which inotifywait #查询命令所对应的程序
/usr/local/bin/inotifywait
[root@svr7 inotify-tools-3.13]# ls /usr/local/bin/
inotifywait inotifywatch
四 编写镜像同步脚本并测试效果
1 编写脚本文件/root/isync.sh
[root@svr7 inotify-tools-3.13]# cd
[root@svr7 ~]# vim /root/isync.sh
#!/bin/bash
a="/var/www/html/"
b="rsync -az --delete $a root@192.168.4.207:/var/www/html/"
while inotifywait -rqq $a
do
$b
done &
[root@svr7 ~]# chmod +x /root/isync.sh //添加执行权限
2 运行脚本
[root@svr7 ~]# /root/isync.sh
[root@svr7 ~]# pgrep -l inotify //确认任务在运行
7318 inotifywait
3 测试同步效果,在svr7上向/var/www/html/目录下添加一个测试网页(触发同步):
[root@svr7 ~]# touch /var/www/html/a.txt
[root@svr7 ~]# ls /var/www/html/
a.txt text
4 在pc207上检查/var/www/html/目录,内容应该已经与svr7上的同名目录一致:
[root@pc207 ~]# ls /var/www/html
a.txt text
# 只要svr7的程序一直在运行,就能一直监控并同步pc207上Documentroot下的文件
5 结束测试后,在svr7上停止监控任务
[root@svr7 ~]# pkill -9 inotify
[root@svr7 ~]# /root/isync.sh: 行 7: 7367 已杀死 inotifywait -rqq $a
[root@svr7 ~]# pgrep -l inotify //确认已没有监控任务