实验rsync+inotify 实现文件实时同步

实验目标

rsync 远程同步

实战1: 备份/var/www/html 目彔

实战2: 使用ssh密钥实现无交互备份

实战3: 配置rsync 服务器及需要备份的目彔,不使用系统用户

实战4: 配置rsync+inotify实时同步

实战5: 防止网页被篡改

实验概述

软件简介

Rsync ( Remote sync)是一个远程数据同步工具,使用与unix/Linux/windows等多种平台。 可通过LAN/WAN 快速同步多台主机间的文件。Rsync 本来是用以取代rcp 的一个工具,它当前由 Rsync.samba.org 维护。Rsync 使用所谓的“Rsync 演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行 Rsync server 的机器也叫 backup server,一个 Rsync server 可同时备份多个 client 的数据;也可以多个Rsync server 备份一个 client 的数据。

Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。Rsync server 会打开一个873的服务通道(port),等待对方 Rsync 连接。连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

Rsync 支持大多数的类 Unix 系统,无论是 Linux、Solaris 还是 BSD 上都经过了良好的测试。此外,它在windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS。

Rsync 的基本特点如下:

可以镜像保存整个目录树和文件系统;

可以很容易做到保持原来文件的权限、时间、软硬链接等;

无须特殊权限即可安装;

优化的流程,文件传输效率高;

可以使用 rcp、ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;

支持匿名传输。

Rsync优点:

支持增量备份。

选择性的保持 : 符号链接,硬链接,文件属性,权限 及时间 等。

传输前执行压缩。适用于异地备份 ,镜像服务器等应用 。

使用ssh做为传输端口。 sftp ,ssh xshell

Rsync和scp的区别:

当文件数据很大时候: scp 无法备份大量数据, 特点: 先统一信息,像windows复制。

scp每次拷贝都是完整拷贝。无法增量拷贝。rsync 边复制,边比较,边统计。

端口: 873 模式:C/S

Rsync同步备份的原理

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。

关闭SELINUX 和防火墙

vi /etc/selinux/config #编辑防火墙配置文件

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存,退出

setenforce 0  #立即生效

[root@RsyncA bin]# systemctl stop firewalld

[root@RsyncA bin]# systemctl disable firewalld

确认下rsync是否安装好了,默认一般系统自带

rpm -qa | grep rsync

81be11f77f324ec9baf45ce8f43bbe44

yum install xinetd -y

67c73e831dda481b9b7cfc4dbb26b947

启动并加入自启动

[root@RsyncA bin]# systemctl start xinetd

[root@RsyncA bin]# systemctl enable xinetd

vi /etc/xinetd.conf

e8ecc769d5e4444690c08bacd5d33e94

启动服务:

rsync  --daemon

netstat -anutp | grep 873

1ec08b375d0345fa83b7a3e666b7e70f

以下是rsync的语法:

Local: rsync [OPTION...] SRC... [DEST]

Access via remote shell:

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

Access via rsync daemon:

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

主机上push方式推送文件

rsync -avz --progress /usr/shared/* root@192.168.10.132:/usr/shared

1c5d285b396a41c3b5857c81594b6830

备机上已经有2个文件了

592c6fc1f0e24e6da68e8f360fd30738

备机上pull

rsync [OPTION...] [USER@]HOST::SRC... [DEST]

rsync -avz --progress root@192.168.10.131:/usr/shared/* /usr/shared/

dcf1062b1b814eea961c1f5496630408

在主机上touch了一个3.txt再次pull一下3.txt就过来了

2bb61691b8b744358cf2de093f194f83

ssh-keygen -t rsa

ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.132

c1d3ac357d09436fb643bfabbb3b6650

ssh-keygen -t rsa

ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.10.131

74cce0b82d6543f49dc974229cdb970c

两台机器都有复制ssh key之后,执行pull 或者push 就不用密码了,省的再用--password file去指定某一个用户名和密码,没有明文密码,更加安全一点

9d6ac21c1e524c679c0d52477cac85ba

加入启动项

echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local

写个脚本,测试下是否能够运行

[root@RsyncB usr]# chmod +x rsync.sh

[root@RsyncB usr]# ./rsync.sh

59cc07086b8e435882193975b8743f09

加crontab定时同步

crontab -e

0 */1 * * * /usr/rsync.sh

*/1 * * * * /usr/rsync.sh

测试下每小时,等不及加了每分钟同步一次

ed2b66e4337c48f3b73b32527a474f1f

好了文件来了

确认下inotify 已经安装

ll /proc/sys/fs/inotify

6253587343244b8ba0a27ae8bae0b5f3

安装inotify

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

tar xzf inotify-tools-3.14.tar.gz ;cd inotify-tools-3.14

./configure --prefix=/usr && make && su -c 'make install'

863adf47f1224a989df86658755e1f90

查看这目录时候,报错了

inotifywait -rm /usr/shared

inotifywait: error while loading shared libraries: libinotifytools.so.0: can

源码安装的时候找不到动态库了啊

ld.so.conf动态链接库装载器,操作系统会根据这里面写的路径去找库。

ldconfig是告诉操作系统要引入新的变量了,需要重新识别一下。

echo "/usr/lib64/mysol" >> /etc/ld.so.conf

ldconfig

84c579edc73d490bab8475cf0d7edd77

已经建立观察,但我在/home中操作文件的时候,已经发现文件夹进入,创建文件,关闭文件等用户行为了

f8a1da937ab144689bc67eed569b7f3f

59e8a27523e240f9929e811ffac29544

使用例子

#!/bin/sh # get the current path CURPATH=`pwd` inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' \ -e close_write /tmp/test | while read date time dir file; do FILECHANGE=${dir}${file} # convert absolute path to relative FILECHANGEREL=`echo "$FILECHANGE" | sed 's_'$CURPATH'/__'` rsync --progress --relative -vrae 'ssh -p 22' $FILECHANGEREL usernam@example.com:/backup/root/dir && \ echo "At ${time} on ${date}, file $FILECHANGE was backed up via rsync" done

inotify 官网

https://github.com/rvoicilas/inotify-tools/wiki

python 版本

https://github.com/seb-m/pyinotify

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值