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

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

タグ [  Tech  ]
こんにちは、熊谷です。

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

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

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

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

設定ファイルは/etc/lsyncd.conf.xmlとしてこんな感じで記述しました。
  1. <lsyncd version="1">
  2.   <settings>
  3.     <logfile filename="/var/log/lsyncd.log"/>
  4.     <binary filename="/usr/bin/rsync"/>
  5.     <pidfile filename="/var/run/lsyncd.pid"/>
  6.     <callopts>
  7.       <option text="-lt%r"/>
  8.       <exclude-file/>
  9.       <source/>
  10.       <destination/>
  11.     </callopts>
  12.   </settings>
  13.   <directory>
  14.     <source path="/var/www/project/data"/>
  15.     <target path="192.168.1.20::backup"/>
  16.   </directory>
  17. </lsyncd>
/var/www/project/data内を同期先(この場合は192.168.1.20)のbackupにコピーするようにします。

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

rsyncの設定ファイルは/etc/rsyncd.confとしてこんな感じで記述しました。
  1. uid = hoge
  2. gid = developer
  3. log file = /var/log/rsyncd.log
  4. pid file = /var/log/rsyncd.pid
  5. [backup]  
  6.         comment = rsync backup server
  7.         path = /var/rsync/backup/
  8.         hosts allow = 192.168.1.10
  9.         read only = false
/var/rsync/backup内にファイルを保存します。

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

ちなみに、lsyncdの起動スクリプトはこんな感じに
  1. #!/bin/bash
  2. DAEMON=/usr/bin/lsyncd
  3. USER=root
  4. NAME=lsyncd
  5. CONF=/etc/lsyncd.conf.xml
  6. PID=/var/run/lsyncd.pid
  7. case "$1" in
  8.     start)
  9.         echo -n "Starting lsyncd: "
  10.         start-stop-daemon --start --quiet --pidfile $PID --user $USER --name $NAME --startas $DAEMON -- --conf=$CONF --pidfile $PID
  11.         echo ""
  12.         ;;
  13.     stop)
  14.         echo -n "Stopping lsyncd: "
  15.         start-stop-daemon --stop --quiet --pidfile $PID --user $USER --name $NAME
  16.         echo ""
  17.         ;;
  18.     restart)
  19.         echo -n "Restarting lsyncd: "
  20.         start-stop-daemon --stop --quiet --pidfile $PID --user $USER --name $NAME
  21.         start-stop-daemon --start --quiet --pidfile $PID --user $USER --name $NAME --startas $DAEMON -- --conf=$CONF --pidfile $PID
  22.         echo ""
  23.         ;;
  24.     *)
  25.         echo "Usage: lsyncd [ start | stop | restart ]"
  26.         exit 1
  27. esac
  28. exit $?
rsyncの起動スクリプトはこんな感じに
  1. #!/bin/bash
  2. DAEMON=/usr/bin/rsync
  3. USER=root
  4. NAME=rsyncd
  5. PID=/var/log/rsyncd.pid
  6. case "$1" in
  7.     start)
  8.         echo -n "Starting rsync daemon: "
  9.         start-stop-daemon --start --quiet --pidfile $PID --user $USER --name $NAME --startas $DAEMON -- --daemon
  10.         echo ""
  11.         ;;
  12.     stop)
  13.         echo -n "Stopping rsync daemon: "
  14.         kill -9 `cat $PID`
  15.         rm -f $PID
  16.         echo ""
  17.         ;;
  18.     restart)
  19.         echo -n "Restarting rsync daemon: "
  20.         #start-stop-daemon --stop --quiet --pidfile $PID --user $USER --name $NAME
  21.         kill -9 `cat $PID`
  22.         rm -f $PID
  23.         start-stop-daemon --start --quiet --pidfile $PID --user $USER --name $NAME --startas $DAEMON -- --daemon
  24.         echo ""
  25.         ;;
  26.     *)
  27.         echo "Usage: rsync [ start | stop | restart ]"
  28.         exit 1
  29. esac
  30. exit $?
にしてます。使用しているのがdebianなので他のディストリビューションな場合は適宜変更を。

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

コメントフォーム

認証
captcha_key
 

トラックバック

最近の記事