Sersync实现触发式文件共

Sersync实现触发式文件共

 

序言:如果我们后端有差不多大网站服务器或者文件服务器,而且没有好之文书共机制,那么当我们升级程序还是更新文件之上,就用每令服务器或者目录都如翻新,这样特别易出问题,并非常爱导致个别止的公文未一致,从而出现众多莫民其妙的问题。因此我们要用好之文书共方式来促成几乎独后端服务器文件之共同,目前普遍采取的方案是利用rsync+inotify的章程来贯彻公文之接触更新。原理是运用inotify来针对文本进行督查,当监控及文件发出文件发出改变的时节,就会调用rsync实现触发式实时同步!本文就来详细介绍金山之一个高居inotify+rsync进行二次开发实现文件并的有些器sersync,能够挺方便之兑现公文触发式同步

一、   inotify简介

Inotify 是冲inode级别的文件系统监控技术,是一致种植强大的、细粒度的、异步的体制,它满足各种各样的文书监控需要,不仅限于安全以及性质,内核要求2.6.13以上,inotify能监控坏多之文件系统事件,通过监控这些事件来监督文件是否来变动,然后经过rsync来更新发生转移的公文,Inotify 可以监视的文件系统事件包括:

·         IN_ACCESS,即文件为访

·         IN_MODIFY,文件被 write

·         IN_ATTRIB,文件属性被改,如 chmod、chown、touch 等

·         IN_CLOSE_WRITE,可写文件被 close

·         IN_CLOSE_NOWRITE,不可写文件为 close

·         IN_OPEN,文件被 open

·         IN_MOVED_FROM,文件于更换走,如 mv

·         IN_MOVED_TO,文件被更换来,如 mv、cp

·         IN_CREATE,创建新文件

·         IN_DELETE,文件给删除,如 rm

·         IN_DELETE_SELF,自去,即一个可执行文件在实践时去自己

·         IN_MOVE_SELF,自活动,即一个可执行文件在尽时倒自己

·         IN_UNMOUNT,宿主文件系统被 umount

·         IN_CLOSE,文件为关门,等同于(IN_CLOSE_WRITE |
IN_CLOSE_NOWRITE)

·         IN_MOVE,文件给挪,等同于(IN_MOVED_FROM |
IN_MOVED_TO)

备考:上面的文书为囊括目录。

   

二、   Rsync简介

 rsync,remote synchronize顾名思意就了解其是平等悠悠实现长途同步功能的软件,它在一道文件的又,可以维持原来文件之权位、时间、软硬链接等附加信。rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文书共的短平快道,而且好透过ssh方式来传文件,这样其保密性也颇好,另外她还是免费的软件。

rsync 包括如下的有特征:

Ø  能更新任何目录及树和文件系统;

Ø  有选择性的保符号链链、硬链接、文件属于、权限、设备及时等;

Ø  对于安装来说,无外例外权限要求;

Ø  对于多独公文来说,内部流程减少文件等的延时;

Ø  能用rsh、ssh 或直接端口做吗污染输入端口;

Ø  支持匿名rsync
同步文件,是拔尖的镜像工具;

 

三、   sersync简介

sersync利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是当前大利用的一块算法,其亮点是单纯针对文件不同的局部开展操作,所以该优势大大超越利用挂接文件系统的方开展镜像同步。由金山之周洋开发到位,是目前使比较多之文书共工具之一。该工具与任何的家伙相比来如下优点:

Ø  sersync是采用c++编写,由于单独同发生反的文本,因此比其他同工具还省去时间、带富;

Ø  安装好、配置简单;

Ø  使用多线程进行同步,能够确保多单服务器实时保持同步状态;

Ø  自带错处理机制,通过失败队对出错的文书还出错,如果仍失败,则每10独小时对联合失败的公文再次联合;

Ø  自带crontab功能,只需要在xml配置文件中打开,即可按您的求,隔一段时间整体一并同赖;

Ø  自带socket与http协议扩展,你可一本万利之拓二次开发;

 

 

季、   sersync实现触发式文件共实战

1.  服务器文件同步图

  
图片 1


2.  由服务器的装配备

a)  安装rsync

yum -y install rsync

b)  配置rsync

Rsync配置文件之布局

cat /etc/rsyncd.conf

# Rsync configuration
file

uid = root

gid = root

port = 873

max connections = 20000

use chroot = yes

timeout = 200

log file =
/var/log/rsyncd.log

pid file =
/var/run/rsyncd.pid

lock file =
/var/run/rsyncd.lock

log format = %t %a %m %f
%b

auth users = root

secrets file =
/etc/rsyncd.secret

 

[test]

path = /data/test/

comment = “test directory
file”

list = yes

read only = no

ignore errors = yes

hosts allow =
192.168.3.205

hosts deny = *

 

Rsync密码文件的布局

cat /etc/rsyncd.secret

root:abc123@#$

chmod 600
/etc/rsyncd.secret

用装密码文件为600权力,不然同步的早晚会报password file must not be
other-accessible错误!

 

c)  Rsync的启动

Rsync的开行有少种植办法,两种植艺术啊一样种都好,读者可自行选择:

无异于种植是采取daemon的主意启动:

/usr/bin/rsync –daemon –config=/etc/rsyncd.conf

除此以外一栽是xinetd集成启动方式:

chkconfig xined on

chkconfig rsync on

/etc/init.d/xinetd start

 

 

d)  验证rsync是否启动

翻开过程和端口是否是

[root@test_machine test]#
ps aux | grep rsync

root      3275  0.0  0.0 
65516   472 ?        Ss   13:44   0:00 /usr/bin/rsync –daemon
–config=/etc/rsyncd.conf

root      3306  0.0  0.1 
71812   936 ?        S    14:49   0:00 /usr/bin/rsync –daemon
–config=/etc/rsyncd.conf

[root@test_machine test]#
netstat -lnp | grep rsync

tcp        0      0
0.0.0.0:873                 0.0.0.0:*                   LISTEN     
3275/rsync         

tcp        0      0
:::873                      :::*                        LISTEN     
3275/rsync

 

3. 主服务器的装配置

u 安装rsync

yum -y install rsync

 

u 安装sersync

下载安装文件

wget http://sersync.googlecode.com/files/sersync2.5\_64bit\_binary\_stable\_final.tar.gz

解压并拷贝到安装目录

tar xzvf
sersync2.5_64bit_binary_stable_final.tar.gz

mv GNU-Linux-x86
/usr/local/sersync

 

u 配置sersync

Sersync的配置

cat confxml.xml

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

<head
version=”2.5″>

    <host hostip=”localhost”
port=”8008″></host>

    <debug
start=”false”/>

    <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=”false”/>

        <closeWrite
start=”true”/>

        <moveFrom
start=”true”/>

        <moveTo
start=”true”/>

        <attrib
start=”true”/>

        <modify
start=”true”/>

    </inotify>

 

    <sersync>

        <localpath
watch=”/data/test”>

       <!—-设置监控之目–>

            <remote
ip=”192.168.3.203″ name=”test”/>

           <!—设置由服务器的IP–>

            <!–<remote
ip=”192.168.8.39″ name=”tongbu”/>–>

            <!–<remote
ip=”192.168.8.40″ name=”tongbu”/>–>

       
</localpath>

        <rsync>

            <commonParams
params=”-artuz”/>

            <auth
start=”true” users=”root” passwordfile=”/etc/rsyncd.secret”/>

             
<!—-设置同步的用户名和密码文件–>

            <userDefinedPort
start=”true” port=”873″/><!– port=874 –>

           <!—-设置rsync的端口,要与由那里开启的端口一致–>

            <timeout
start=”false” time=”100″/><!– timeout=100 –>

            <ssh
start=”false”/>

        </rsync>

        <failLog
path=”/tmp/rsync_fail_log.sh” timeToExecute=”60″/><!–default
every 60mins execute once–>

        <crontab
start=”true” schedule=”300″><!–600mins–>

       <!—-设置300分钟全部一同同坏–>

            <crontabfilter
start=”false”>

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

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

           
</crontabfilter>

        </crontab>

        <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>

 

</head>

 

密码文件的布

cat /etc/rsyncd.secret

abc123@#$

预示服务器的密码配置文件未待用户,如果长用户的讲话并的时段会报

rsync error: error starting
client-server protocol (code 5) at main.c(1296)
[sender=2.6.8]错误

 

u 启动sersync

/usr/local/sersync/sersync2 -d
-r -o /usr/local/sersync/confxml.xml

拿地方的吩咐添加进/etc/rc.local,以后再次开系统今后才能够正常同步**

u 剧本监控sersync

为一些时候sersync脚本会自动关闭,因此待写一个剧本自动的失检测该过程是否有,不有就开动,脚本内容如下:

cat
/var/script/check_sersync.sh

#!/bin/bash

#Purpose: Check sersync
whether it is alive

#Author: Carl Zhang

SERSYNC=”/usr/local/sersync/sersync2″

CONF_FILE=”/usr/local/sersync/confxml.xml”

STATUS=$(ps aux |grep
‘sersync2’|grep -v ‘grep’|wc -l)

if [ $STATUS -eq 0 ];

then

        $SERSYNC -d -r -o
$CONF_FILE &

else

        exit 0;

fi

 

本子写好下,添加到计划任务中失去

*/5 * * * *
/var/script/check_sersync.sh > /dev/null 2>&1

 

小结:通过上述几乎步后,你从服务器的/data/test就能从主服务器实时更新,升级之时仅升级主服务器的文本,从服务器也会自动同步过去,减少你的工作量及出错的票房价值!

设若读者想询问又多之消息,请直接访问sersync开发者的博客,博客里来重新详细的求证!

http://blog.johntechinfo.com/sersyncguild

 

相关文章