アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

lsyncdでファイルを同期してみよう

こんにちは、熊谷です。

最近、複数のサーバでファイルを同期しなければいけないということがありました。出来るだけ手軽で簡単にそれを行いたいということで、何か良い方法がないものか、聞いたり調べたりしたところ、lsyncdなるものがあるのでそれを使用してみるのも良いのではないかと、アドバイスを受けました。

そんなことで、こちらのサイトを参考に実際に使ってみました。

例として、同期元は192.168.1.10、同期先は192.168.1.20とします。

まずは、同期元(192.168.1.10)にてlsyncdをダウンロードしてきてインストールです。makeするなりパッケージを作るなりしてインストールします。

設定ファイルは/etc/lsyncd.conf.xmlとしてこんな感じで記述しました。


<lsyncd version="1">
  <settings>
    <logfile filename="/var/log/lsyncd.log"/>
    <binary filename="/usr/bin/rsync"/>
    <pidfile filename="/var/run/lsyncd.pid"/>
    <callopts>
      <option text="-lt%r"/>
      <exclude-file/>
      <source/>
      <destination/>
    </callopts>
  </settings>
  <directory>
    <source path="/var/www/project/data"/>
    <target path="192.168.1.20::backup"/>
  </directory>
</lsyncd>

/var/www/project/data内を同期先(この場合は192.168.1.20)のbackupにコピーするようにします。

同期先(192.168.1.20)ではrsyncをデーモンとして起動させます。

rsyncの設定ファイルは/etc/rsyncd.confとしてこんな感じで記述しました。


uid = hoge
gid = developer
log file = /var/log/rsyncd.log
pid file = /var/log/rsyncd.pid

[backup]  
        comment = rsync backup server
        path = /var/rsync/backup/
        hosts allow = 192.168.1.10
        read only = false

/var/rsync/backup内にファイルを保存します。

で、同期元である192.168.1.10にてlsyncdを起動すると、その同期元の指定されたディレクトリ内でファイルの書き込みがあるたび192.168.1.20の指定されたディレクトリにファイルがrsyncされていきます。素晴らしい!

ちなみに、lsyncdの起動スクリプトはこんな感じに


#!/bin/bash

DAEMON=/usr/bin/lsyncd
USER=root
NAME=lsyncd
CONF=/etc/lsyncd.conf.xml
PID=/var/run/lsyncd.pid

case "$1" in
    start)
        echo -n "Starting lsyncd: "
        start-stop-daemon --start --quiet --pidfile $PID --user $USER --name $NAME --startas $DAEMON -- --conf=$CONF --pidfile $PID
        echo ""
        ;;
    stop)
        echo -n "Stopping lsyncd: "
        start-stop-daemon --stop --quiet --pidfile $PID --user $USER --name $NAME
        echo ""
        ;;
    restart)
        echo -n "Restarting lsyncd: "
        start-stop-daemon --stop --quiet --pidfile $PID --user $USER --name $NAME
        start-stop-daemon --start --quiet --pidfile $PID --user $USER --name $NAME --startas $DAEMON -- --conf=$CONF --pidfile $PID
        echo ""
        ;;
    *)
        echo "Usage: lsyncd [ start | stop | restart ]"
        exit 1
esac
exit $?

rsyncの起動スクリプトはこんな感じに


#!/bin/bash

DAEMON=/usr/bin/rsync
USER=root
NAME=rsyncd
PID=/var/log/rsyncd.pid

case "$1" in
    start)
        echo -n "Starting rsync daemon: "
        start-stop-daemon --start --quiet --pidfile $PID --user $USER --name $NAME --startas $DAEMON -- --daemon
        echo ""
        ;;
    stop)
        echo -n "Stopping rsync daemon: "
        kill -9 `cat $PID`
        rm -f $PID
        echo ""
        ;;
    restart)
        echo -n "Restarting rsync daemon: "
        #start-stop-daemon --stop --quiet --pidfile $PID --user $USER --name $NAME
        kill -9 `cat $PID`
        rm -f $PID
        start-stop-daemon --start --quiet --pidfile $PID --user $USER --name $NAME --startas $DAEMON -- --daemon
        echo ""
        ;;
    *)
        echo "Usage: rsync [ start | stop | restart ]"
        exit 1
esac
exit $?

にしてます。使用しているのがdebianなので他のディストリビューションな場合は適宜変更を。

このように、lsyncdを使用すると実に簡単手軽にファイルの同期をすることが出来るようになります。是非試してみてはいかがでしょうか。