设为首页 收藏本站
查看: 864|回复: 0

[经验分享] rsync/rsync+inotify-tools/rsync+sersync

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-9 08:11:31 | 显示全部楼层 |阅读模式
                      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 user2@192.168.10.22:/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



    只要添加完此脚本,当然你得根据你自己的情况加以修改,其余的就如上面配置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$user1@$host1::$dst1
  /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src$user2@$host2::$dst2
  /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src$user3@$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>
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-42116-1-1.html 上篇帖子: linux目录结构详解附录运维网原创图解 下篇帖子: centos5.5下openjdk编译 服务器 可靠性 客户机 客户端 而且
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表