rsync/rsync+inotify-tools/rsync+sersync

rsync要想实现自动同步,必须配合脚本以及定时事务来完成

rsync+inotify-tools可以通过inotify这一个工作在内核空间的进程,来时刻监控着指定目录下面的文件,当发生变动时,通知客户端来完成rsync,当然也需要脚本来实现。只是不需要定时任务了,因为,有inotify在实时监控着指定的目录,这样看来inotify的实时性可靠性与完整性都要好过仅仅通过rsync和cron的组合。

rsync+sersync

一、RSYNC

1、概念

rsync(remote synchronize)它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,在CentOS6.5中系统已经提供了该服务。

 

2、安装

setenforce 0

iptable -F

在CenOS6.5中仅仅需要安装xinetd就可以提供rsync服务

yum -y install xinetd

vim /etc/xinetd.d/rsync

更改disable = no 即可启动rsync功能,当然你的xinetd必须是已经启动的服务,谁让他是超级服务进程呢

server xinetd start 即可启动xinetd

或者通过chkconfig rsync on 也可以启动rsync服务

3、配置rsync

必须手动在/etc目录下创建rsyncd.conf

然后加入如下配置,即可完成rsync的基础服务配置

uid = nobody

gid = nobody

use chroot = no

max connections = 10

strict modes = yes

[web2]             #web2的模块配置,上面是全局配置,默认情况下模块配置会继承全局配置,如

果配置相同以模块配置为准,模块可以根据你同步的目录进行添加

path = /www/web02  #允许同步数据的目录

comment = web2 file #目录描述

ignore errors        #忽略I/O错误

read only = no        #可以上传文件到/www/web02目录下

write only = no        #可以修改/www/web02下的文件和目录

hosts allow =192.168.10.55 #仅允许该IP访问/www/web02目录

hosts deny = *            #其他任何主机不允许访问

list = false                #不允许查看主机的目录列表

auth users = user2            #只允许以user2用户登录主机

secrets file = /etc/rsyncd.secrets #在该文件下保存着user2的用户和密码的对应格式为(user2:1)

4、rsync命令的使用

rsync -arv [email protected]:/www/web02 /root

rsync -auv

-r 同步目录以及目录下的子目录

-u 仅仅同步变化的数据

-v 显示同步过程

-a all

rsync有六种不同的工作模式:

  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
  2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
  3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
  6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
  -a 以archive模式操作、复制目录、符号连接 相当于-rlptgoD

  rsync中的参数

  -r 是递归 
  -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
  -z 传输时压缩;
  -P 传输进度;
  -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
  -e ssh的参数建立起加密的连接。
  -u只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
  --progress是指显示出详细的进度情况
  --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
  --password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

二、rsync+inotify

1、下载inotify-tools源码包并安装

yum -y install gcc*

tar zxvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure

make && make install

此脚本来源于南非蚂蚁http://ixdba.blog.51cto.com/2895551/580280/

只要添加完此脚本,当然你得根据你自己的情况加以修改,其余的就如上面配置rsync一样,

这样就可以实现通过inotify-toosl中的inotifywait来完成自动数据同步了

inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可

以递归地监控整个目录树。
    inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。

#!/bin/bash
host1=192.168.12.131
host2=192.168.12.132
host3=192.168.12.133

src=/web/wwwroot/
dst1=web1
dst2=web2
dst3=web3
user1=web1user
user2=web3user
user3=web3user

/usr/local/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f%e‘ -e modify,delete,create,attrib  $src \
| while read files
        do
        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src[email protected]$host1::$dst1
  /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src[email protected]$host2::$dst2
  /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src[email protected]$host3::$dst3
                echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
         done
脚本相关解释如下:
--timefmt:指定时间的输出格式。
--format:指定变化文件的详细信息。
这两个参数一般配合使用,通过指定输出格式,输出类似与:
15/04/10 00:29 /web/wwwroot/ixdba.shDELETE,ISDIR was rsynced
15/04/10 00:30 /web/wwwroot/index.htmlMODIFY was rsynced
15/04/10 00:31 /web/wwwroot/pcre-8.02.tar.gzCREATE was rsynced
这个脚本的作用就是通过inotify监控文件目录的变化,进而触发rsync进行同步操作,由于这个过程是一种主动触发操作,通过系统内核完成的,所以,比起那些遍历整个目录的扫描方式,效率要高很多。
有时会遇到这样的情况:向inotify监控的目录(这里是/web/wwwroot/)写入一个很大文件时,由于写入这个大文件需要一段时间,此时inotify就会持续不停的输出该文件被更新的信息, 这样就会持续不停的触发rsync去执行同步操作,占用了大量系统资源,那么针对这种情况,最理想的做法是等待文件写完后再去触发rsync同步。 在这种情况下,可以修改inotify的监控事件,即:“-e close_write,delete,create,attrib”。
接着,将这个脚本命名为inotifyrsync.sh,放到/web/wwwroot目录下,然后给定可执行权限,放到后台运行:
chmod 755 /web/wwwroot/inotifyrsync.sh
/web/wwwroot/inotifyrsync.sh &

三、rsync+sersync

1、安装sersync

yum -y install gcc*

tar -zxf sersync2.5_source.tar.gz

cd sersync2.5_source

make && make install

2.配置confxml.xml

cd /usr/local/sersync/conf

vi confxml.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<head version="2.5">

# 设置本地IP和端口

<host hostip="localhost" port="8008"></host>

# 开启DUBUG模式

<debug start="false"/>

# 开启xfs文件系统

<fileSystem xfs="false"/>

# 同步时忽略推送的文件(正则表达式),默认关闭

<filter start="false">

<exclude expression="(.*)\.svn"></exclude>

<exclude expression="(.*)\.gz"></exclude>

<exclude expression="^info/*"></exclude>

<exclude expression="^static/*"></exclude>

</filter>

<inotify>

# 设置要监控的事件

<delete start="true"/>

<createFolder start="true"/>

<createFile start="true"/>

<closeWrite start="true"/>

<moveFrom start="true"/>

<moveTo start="true"/>

<attrib start="true"/>

<modify start="true"/>

</inotify>

<sersync>

# 本地同步的目录路径

<localpath watch="/data">

# 远程IP和rsync模块名

<remote ip="192.168.100.29" name="data"/>

<!--<remote ip="192.168.8.39" name="tongbu"/>-->

<!--<remote ip="192.168.8.40" name="tongbu"/>-->

</localpath>

<rsync>

# rsync指令参数

<commonParams params="-auvzP"/>

# rsync同步认证

<auth start="true" users="user" passwordfile="/etc/rsync.pas"/>

# 设置rsync远程服务端口,远程非默认端口则需打开自定义

<userDefinedPort start="false" port="874"/><!-- port=874 -->

# 设置超时时间

<timeout start="true" time="100"/><!-- timeout=100 -->

# 设置rsync+ssh加密传输模式,默认关闭,开启需设置SSH加密证书

<ssh start="false"/>

</rsync>

# sersync传输失败日志脚本路径,每隔60会重新执行该脚本,执行完毕会自动清空。

<failLog path="/usr/local/sersync/log/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

# 设置rsync+crontab定时传输,默认关闭

<crontab start="false" schedule="600"><!--600mins-->

<crontabfilter start="false">

<exclude expression="*.php"></exclude>

<exclude expression="info/*"></exclude>

</crontabfilter>

</crontab>

# 设置sersync传输后调用name指定的插件脚本,默认关闭

<plugin start="false" name="command"/>

</sersync>

# 插件脚本范例

<plugin name="command">

<param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->

<filter start="false">

<include expression="(.*)\.php"/>

<include expression="(.*)\.sh"/>

</filter>

</plugin>

# 插件脚本范例

<plugin name="socket">

<localpath watch="/opt/tongbu">

<deshost ip="192.168.138.20" port="8009"/>

</localpath>

</plugin>

<plugin name="refreshCDN">

<localpath watch="/data0/htdocs/cms.xoyo.com/site/">

<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>

<sendurl base="http://pic.xoyo.com/cms"/>

<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>

</localpath>

</plugin>

</head>

时间: 2024-10-16 04:42:32

rsync/rsync+inotify-tools/rsync+sersync的相关文章

rsync结合inotify实现实时同步

背景介绍 中小企业的web应用场景中,web服务器可能是由2台服务器组成,通过DNS的轮询作为负载均衡,此时就需要对2台服务器之间同步的实时性有较高的要求,上一篇文章所介绍的rsync+crontab就不能满足此需求,本章就来介绍使用rsync+inotify完成服务器之间的实时同步 实验说明 操作系统:CentOS6.8,inotify要求内核版本必须为2.6.13以上 源服务器:172.16.10.10/24 目标服务器:172.16.10.20/24 实验目的:将源服务器上的/rsync目

Sersync实现触发式文件同步 替代inotify和rsync

参考文章 http://blog.chinaunix.net/uid-20639775-id-3011124.html http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=10738&page=1&extra=#pid113148 http://zyan.cc/sersync/ mrsync https://sourceforge.net/projects/mrsync/ 服务器端1.安装rsync  两边都要做yum

(转)Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步

Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步原文:http://www.summerspacestation.com/linux%E4%B8%8B%E9%80%9A%E8%BF%87rsync%E4%B8%8Einotify%E5%BC%82%E6%AD%A5%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%BA%8B%E4%BB%B6%E7%9B%91%E6%8E%A7%E6%9C%BA%E5%88%B6%E5%AE%9E

rsync 加 inotify 实现无缝数据同步

rsync 是远程差异同步数据的工具,把一份数据复制到另一台机器上.它的同步特性是,在整个文件域中,根据rsync算法计算文件的特征码,只同步有改变的文件,但在同步整个域的时候,会计算整个域中所有文件的特征,这样使得在文件数据过多情况下计算文件特性就花费了很多时间.如果不借助其它软件,rsync无法做到真正的即时同步数据.rsync可以对目录或整个文件系统做同步,可能借助ssh加密后安全传输,因为只同步差异数据,所以效率较高,还支持匿名传输等特性.rsync分为服务端和客户端,做为服务端随时等待

20190308 samba服务、inotify和rsync实现实时同步、防火墙

Samba服务[root@centos7 ~]#yum install samba[root@centos7 ~]#systemctl start smb[root@centos7 ~]#ss -ntluNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 50 :139 : tcp LISTEN 0 50 :445 端口已开启 : 可以做共享了. 主配置文件:/etc/samba/smb.conf

inotify和rsync实现数据实时同步

数据的实时同步 ?实现实时同步 ?要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 ?发现目录中数据产生变化,就利用rsync服务推送到备份服务器上 ?实现实时同步的方法 ?inotify+rsync 方式实现数据同步 ?sersync :金山公司周洋在 inotify 软件基础上进行开发的,功能更加强大 ?inotify: 异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过in

rsync、inotify实现web实时同步

. rsync.inotify实现web实时同步,布布扣,bubuko.com

rsync 与 inotify 实现双机实时同步

折腾了一个上午,终于实现了rsync与inotify来实现双机实机的同步,现分享出来,操作步骤如下: A机:192.168.1.67 B机:192.168.1.68 先在A机上操作如下: 1:安装rsync 及inotify-tools 直接yum -y install rsync inotify-tools  安装就好.(inotify-tool需要安装epel的扩展源) 2:创建公钥(为了同步时不输入验证密码) 步骤如下: 1: ssh-keygen 2:scp -r /root/.ssh/

烂泥:rsync与inotify集成实现数据实时同步更新

本文首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要分以下几个步骤: 1.rsync的优点与不足 2.inotify是什么 3.检测OS是否支持inotify 4.inotify相关参数详解 5.inotify监控的文件事件类似 6.inotify-tools是什么 7.安装inotify-tools 8.inotifywait使用详解 9.inotifywatch使用详解

rsync结合inotify实现数据自动同步

rsync+inotify rsync介绍 rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件.它使用所谓的"rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据:也可以多个rsync server备份一个client的数