欢迎来到云服务器

系统配置

Linux系统主动触发式文件同步的实现方法

当大家使用阿里云的SLB的时候就会遇到文件同步的问题,一般我们会选择Rsync进行定期同步,单这样的同步频率和效率对业务影响往往较大,因此这里简单介绍下Linux下触发同步的实现方式以及其他在该特性基础上实现文件防篡改的方式。

 

一、什么是rsync

Rsync(remotesynchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件。Rsync 使用所谓的“Rsync 算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送个文件的不同部分,而不是每次都整份传送,因此速度相当快。rsync 同时也在拷贝文件时,加--partial可支持断点续传,比cp要好多了,同时也rsync也可以拷贝链接文件,这一点是cp做不到的。

 

二、什么是inotify

inotify 是文件系统事件监控机制,作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify 是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。

 

三、配置rsync + inotify触发式同步

前提条件,linux内核版本高于2.6.13才能支持inotify特性

由于执行脚本需要输入目标服务器口令,因此我们需要先配置无密码登录

执行ssh-keygen -t rsa,一路回车生成公钥与密钥

执行ssh-copy-id -i~/.ssh/id_rsa.pub root@被控端IP 拷贝公钥到被控端

 
需要输入被控端密码 
 
 
下载所需的程序: 
Inotify-toolshttps://github.com/rvoicilas/inotify-tools/wiki 
Rsynchttp://rsync.samba.org/ftp/rsync 
 
 
安装所需程序: 
tarzxvf rsync-3.1.1.tar.gz 
cdrsync-3.1.1 
./configure–prefix=/usr/local/rsync 
make&& make install 
tarzxvf inotify-tools-3.14.tar.gz 
cdinotify-tools-3.14 
./configure 
make&& make install 
 
 
配置同步脚本(以下内容保存为sh文件,例如rsync.sh): 
#!/bin/sh 
#源目录 
src=/home/wwwroot/ 
#目标目录 
des=/home/wwwroot 
#目标IP 
ip=192.168.1.2 
ip2=192.168.1.3 
#设置inotifywait可以监视的文件数量 
echo 50000000 >/proc/sys/fs/inotify/max_user_watches 
#设置inotify实例事件(event)队列可容纳的事件数量 
echo 327679 >/proc/sys/fs/inotify/max_queued_events 
 
/usr/local/bin/inotifywait -mrq--timefmt '%d/%m/%y %H:%M' --format  '%T%w%f' -e modify,delete,create,attrib ${src} | while read  file 
       do 
                rsync -avz --delete --progress${src} root@${ip}:${des} && 
                echo "${src} wasrsynced" 
                echo"-----------------------------------------------------" 
                rsync -avz --delete --progress${src} root@${ip2}:${des} && 
                echo "${src} wasrsynced" 
                echo"-----------------------------------------------------" 
       done 
将脚本添加到随机启动文件/etc/rc.local中,执行nohup sh rsync.sh &即后台执行 
 
 
脚本相关注释: 
   -m 是保持一直监听 
   -r 是递归查看目录 
   -q 是打印出事件~ 
   rsync -aHqzt $SRC $DST 
   -a 存档模式 
   -H 保存硬连接 
   -q 制止非错误信息 
   -z 压缩文件数据在传输 
   -t 维护修改时间 
   -delete 删除于多余文件 
当要排出同步某个目录时,为rsync添加--exclude=PATTERN参数,注意,路径是相对路径。详细查看man rsync 
当要排除都某个目录的事件监控的处理时,为inotifywait添加--exclude或--excludei参数。详细查看man inotifywait 
 
 
注意:inotifywait可以监视文件的动作有: 
        access         文件或目录的内容被读 
        modify         文件或目录的内容被写 
        attrib          文件或目录的属性被修改 
        close_write     文件或目录以可写模式关闭 
        close_nowrite   文件或目录以只读模式关闭 
        close           文件或目录关闭,不管是什么模式 
        open            文件或目录被打开 
        moved_to        文件或目录移入监控目录 
        moved_from      文件或目录移出监控目录 
        move            文件或目录移动 
        create           文件或目录创建 
        delete          文件或目录在监控目录中删除 
        delete_self       文件或目录删除 
        unmount         未挂载的文件或目录 
 
 
四、其他 
1、高效触发式同步软件sersync2 
下载地址:https://code.google.com/p/sersync/downloads/list 
程序包含2个文件:confxml.xml配置文件和sersync2执行程序 
 
 
配置文件说明: 
修改sshstart="true'以SSH方式传输文件 
<rsync> 
     <sshstart="true"/> 
</rsync> 
开启文件过滤 
<filter start="true"> 
<excludeexpression="^info/*"></exclude> 
<excludeexpression="(.*).gz"></exclude> 
</filter> 
同步源目录和目标目录设置 
<localpath watch="/home/wwwroot"> 
<remote ip="192.168.1.2"name="/home/wwwroot"/> 
</localpath> 
 
 
执行程序: 
执行前如果是SSH传输先配置好SSH免密码登陆 
./sersync2–d 后台执行 
./sersync2–r 先执行一次完整同步 
./sersync2–o confxml.xml 指定配置文件 
./sersync2–n num 指定线程数,默认10个线程 
 
 
监控程序: 
checksersync.sh 
执行后会判断进程中是否有sersync2存在,没有就自动执行 
如果有修改过配置文件名称,那么相应监控脚本内也需要修改对应 
 
 
2、防篡改的实现 
通过Inotiry和Rsync我们可以实现文件同步,根据Inotiry的特性我们也可以实现文件的放篡改,方法是将脚本中SCP反向传输即可,例如: 
rsync -avz --delete --progressroot@${ip}:${des} ${src} && 
 
实现图例: 
WEB服务器检测到行为1执行行为2 
防篡改源服务器检测到行为3执行行为2 
腾讯云代理

Copyright © 2003-2021 MFISP.COM. 国外vps服务器租用 梦飞云服务器租用 版权所有 粤ICP备11019662号