lsyncd

更新日2009-08-31 (月) 13:59:56

lsyncdを使用してリアルタイムにディレクトリ単位で別ホストにミラーリング このシステムにはファイル内容が変更された場合それを検出するソフトinotifyを利用する。これはkeranel-2.6.13以降なら動作するが、Vine4.x Vine5.xにはないのでソースから inotify-toolsをインストール

ホスト設定

マスタ(10.3.2.3 /home/student/lsyncd_tmp) セカンダリ(10.3.2.4 /home/student/lsyncd_tmp2)

マスタのlsyncd_tmpが変更されたら、セカンダリのlsyncd_tmp2の内容も変更される

以下のtoolが必要なのでインストール

# apt-get install libxml2-devel

マスタの設定

inotify-toolsのインストール

以下からinotify-toolsをDownload

http://inotify-tools.sourceforge.net/

$ tar zvxf inotify-tools-3.13.tar.gz

$ ./configure --prefix=/usr 
$ make 
$ su 
# make install 

以下のようにリンクを作成

# cd /usr/include/sys

# ln -s ../inotifytools/inotify.h
# ln -s ../inotifytools/inotify-nosys.h
# ln -s ../inotifytools/inotifytools.h

inotify-toolsのインストール

以下からlsyncdをDownload

http://en.sourceforge.jp/projects/freshmeat_lsycnd/resources/

$ tar tzvf lsyncd-1.26.tar.gz
$ cd lsyncd-1.26
$ ./configure

checking for unistd.h... yes
checking sys/inotify.h usability... yes
checking sys/inotify.h presence... yes
checking for sys/inotify.h... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands

$ make
$ make all-am
make[1]: ディレクトリ `/usr/local/src/lsyncd-1.26' に入ります
gcc -DHAVE_CONFIG_H -DXML_CONFIG -I. -Wall `xml2-config --cflags` -g -O2 -MT 
lsyncd.o -MD -MP -MF .deps/lsyncd.Tpo -c -o lsyncd.o lsyncd.c
lsyncd.c: 関数 `remove_dirwatch' 内:
lsyncd.c:1000: 警告: `dw' might be used uninitialized in this function
mv -f .deps/lsyncd.Tpo .deps/lsyncd.Po
gcc -Wall `xml2-config --cflags` -g -O2 `xml2-config --libs` -o lsyncd lsyncd.o
make[1]: ディレクトリ `/usr/local/src/lsyncd-1.26' から出ます

$ su
# make install

以下の起動ファイルを作成

init.d/lsyncd

#!/bin/bash
#
# chkconfig: 345 56 50
# description: start and stop lsyncd
#
#

# Source function library.
. /etc/rc.d/init.d/functions

PATH=$PATH:/usr/local/bin

# Source networking configuration.
[ -r /etc/sysconfig/lsyncd ] && . /etc/sysconfig/lsyncd

option="$SHORT_LOG $IGNORE_START_ERRORS $DEBUG"

RETVAL=0

prog="lsyncd"

start(){
    echo -n $"Starting $prog: "
    daemon $prog $option
    RETVAL=$?
    echo
    touch /var/lock/subsys/lsyncd
    return $RETVAL
}

stop(){
    echo -n $"Stopping $prog: "
    killproc $prog
    RETVAL=$?
    echo
    rm -f /var/lock/subsys/lsyncd
    return $RETVAL

}

reload(){
    echo -n $"Reloading configuration: "
    killproc $prog -HUP
    RETVAL=$?
    echo
    return $RETVAL
}

restart(){
    stop
    start
}

condrestart(){
    [ -e /var/lock/subsys/lsyncd ] && restart
    return 0
}


# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status $prog
        ;;
    restart)
        restart
        ;;
    reload)
        reload
        ;;
    condrestart)
        condrestart
        ;;
    *)
        echo $"Usage: $0
        {start|stop|status|restart|condrestart|reload}"
        RETVAL=1
esac

exit $RETVAL

マスタのコピー元とセカンダリのコピー先およびrsyncのオプションを指定 。 target pathのモジュール名(test)はセカンダリのrsyncd.confの内容([test])とあわせる また、-ltdは-lt%rとあるページもあった(%r は lsyncd 起動時には r、それ以外は d になるそうだ)

-avzがないとdeleteがうまく動作しなかった

/etc/lsyncd.conf.xmlを作成

<settings>
  <callopts>
  <option text="-ltd"/>
  <option text="--delete"/>
  <option text="-avz"/>
  <source/>
  <destination/>
  </callopts>
</settings>

<directory>
  <source path="/home/student/lsyncd_tmp"/>
  <target path="10.3.2.4::test/"/>
</directory>
</lsyncd>

セカンダリの指定

rsyncサーバとしてコピー先ディレクトリ、および書き込み許可ホスト、そのユーザ、グループ、モジュール名を指定

/etc/rsyncd.confを作成

uid = student
gid = student

[test]
       path = /home/student/lsyncd_tmp2
       hosts allow = 10.0.0.0/8
       read only = false

起動

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

rc.loaclにでも書いておく

その他

実際マスタのディレクトリに変化が出ると以下のコマンドがマスタで動く

/usr/bin/rsync -ltd --delete -avz /home/student/lsyncd_tmp 10.3.2.4::test/

/var/log/lsyncdに以下の残る

sent 205 bytes  received 16 bytes  442.00 bytes/sec
total size is 15  speedup is 0.07
Mon Aug 31 11:45:33 2009: Rsync of [/home/student/lsyncd_tmp/] ->  [10.3.2.4::test/] finished
Mon Aug 31 11:45:33 2009: Processing through tosync stack.
Mon Aug 31 11:45:33 2009: being done with tosync stack
Mon Aug 31 11:45:33 2009: inotfy event: DELETE:.#c
Mon Aug 31 11:45:33 2009: event DELETE:.#c triggered.
Mon Aug 31 11:45:33 2009:   BUILDPATH(0, (null), (null)) - > /home/student/lsyncd_tmp/
Mon Aug 31 11:45:33 2009:   BUILDPATH(0, (null), 10.3.2.4::test/) ->  10.3.2.4::test/
Mon Aug 31 11:45:33 2009: rsyncing /home/student/lsyncd_tmp/ --> 10.3.2.4::test/
building file list ... done

logのlogrotateの設定

/etc/logrotate.d/lsyncd

/var/log/lsyncd{
  weekly
  rotate 5
  copytruncate
  compress
  notifempty
  missingok
}

注)lsyncdが起動されるとマスタのしてしたディレクトリ自体がスレーブコピーされる。その後同じのがないの消えるが原因不明

セカンダリに一時的に

/lsyncd_tmp2/lsyncd_tmp

というディレクトリが出来る


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-31 (月) 13:59:56 (3244d)