zoukankan      html  css  js  c++  java
  • sersync实现触发式同步

    金山的一个居于inotify+rsync进行二次开发实现文件同步的小工具sersync,能够很方便的实现文件触发式同步

    Inotify 是基于inode级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能,内核要求2.6.13以上,inotify能监控非常多的文件系统事件,通过监控这些事件来监控文件是否发生变更,然后通过rsync来更新发生变更的文件

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

    sersync利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步。由金山的周洋开发完成,是目前使用较多的文件同步工具之一。该工具和其他的工具相比有如下优点:

    • sersync是使用c++编写,由于只同步发生更改的文件,因此比其他同步工具更节约时间、带宽;
    • 安装方便、配置简单;
    • 使用多线程进行同步,能够保证多个服务器实时保持同步状态;
    • 自带出错处理机制,通过失败队列对出错的文件重新出错,如果仍旧失败,则每10个小时对同步失败的文件重新同步;
    • 自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次;
    • 自带socket与http协议扩展,你可以方便的进行二次开发;

    步骤

    1.主和从服务器都安装rsync,然后rsync的配置文件和密码文件配置都需要自己建立

    vim /etc/rsyncd.conf 内容范例如下

    id=root
    gid=root
    max connections=36000
    use chroot=no
    log file=/var/log/rsyncd.log
    pid file=/var/run/rsyncd.pid
    lock file=/var/run/rsyncd.lock

    [tlw.kk22.com]
    path=/data0/web/tlw.kk22.com
    #comment = 0019 web sersync
    ignore errors = yes
    read only = no
    hosts allow = 192.168.1.237 192.168.1.238
    hosts deny = *
    auth users = root
    secrets file = /etc/rsyncd.passwd

    vim /etc/rsyncd.passwd 内容范例如下:

    root:123456

    需要设置密码文件为600权限,不然同步的时候可能会报错

    2.启动rsync服务,一般有两种方式启动,通过daemon的方式启动或者xinetd集成启动方式

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

    查看进程是否启动

    ps -ef | grep rsync

    3.安装sersync

    下载sersync包,sersync2.5_64bit_binary_stable_final.tar.gz

    解压后拷贝到安装路径   mv GNU-Linux-x86/*   /usr/local/sersync

    4.serysnc配置文件设置,vim /usr/local/sersync/confxml.xml

    ......

    <sersync>

            <localpath watch="/data0/web/tlw.kk22.com">

           <!—-设置监控的目录-->

                <remote ip="192.168.1.227" name="tlw.kk22.com"/>

               <!—设置从服务器的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分钟全部同步一次-->

    5.sersync密码文件配置

    vim /etc/rsyncd.secret

    123456

    主服务器的密码配置文件不需要用户,如果添加用户的话同步的时候会报错

    6.启动sersync

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

    查看进程

    ps -ef | grep sersync

    将上面的命令添加进/etc/rc.local,以后开机自动启动

    7.测试是否触发同步

    8.脚本自动监控,防止sersync脚本关掉,自动的去检测该进程是否存在,不存在就启动,脚本内容如下:

    #!/bin/bash

    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

    9.skill掉sersync,测试脚本自动启动

  • 相关阅读:
    P2522 [HAOI2011]Problem b(容斥)
    P3455 [POI2007]ZAP-Queries
    P2519 [HAOI2011]problem a(线段树优化dp+思维)
    P2516 [HAOI2010]最长公共子序列 (lcs+容斥)
    [HAOI2010]软件安装(缩点+树形dp)
    P2508 [HAOI2008]圆上的整点(神仙题)
    [SDOI2011]消防(树的直径+二分||单调队列)
    QLabel设置字体颜色
    Qt绘制不规则串口
    C++继承关系
  • 原文地址:https://www.cnblogs.com/liqing1009/p/4211249.html
Copyright © 2011-2022 走看看