lsyncdとrsyncでリアルタイム同期

linux kernel2.6.13から導入されたinotify APIを使います。
最近のディストリビューションであれば使えるはずです。

OS・・・Ubuntu 12.04
Kernel・・・3.2.0-26-generic
同期元・・・192.168.100.100 /mnt/cache/
同期先・・・192.168.100.200 /mnt/cache/
ポート・・・TCP/UDP 873


1)同期先の設定
こちらはrsyncdだけでOKです。
インストール

# apt-get install rsync
# rsync --version
rsync  version 3.0.9  protocol version 30

ログ・・・/var/log/rsyncd/rsyncd.log
プロセス権限・・・root(portの関係でrootにしています)
同期ディレクトリ・・・/mnt/cache/
許可IP・・・192.168.100.100(同期元IP)

# vi /etc/rsyncd.conf 

log file = /var/log/rsyncd/rsyncd.log
uid = root
gid = root

[cache-sync]
path = /mnt/cache/
hosts allow = 192.168.100.100
read only = false

# mkdir /var/log/rsyncd/
# /etc/init.d/rsync start

これで同期先はOK。

2)同期先の設定

これが大事w
lsyncdをインストール

# apt-get install lsyncd
# lsyncd -version
Version: 2.0.4

ログ・・・/var/log/lsyncd/lsyncd.log
同期元・・・192.168.100.100/mnt/cache/
同期先・・・192.168.100.200::cache-sync/
rsyncオプション・・・av、delete

ここで「delay」を明示的に設定しないと、
5秒ほどしないと同期をしてくれない?
なので、「0」としました。

(他の方のホームページ見ると設定してないけど、どうなんだろう。。。)

# vi /etc/lsyncd/lsyncd.conf.lua

settings = {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/run/lsyncd.stat",
        statusInterval = 1,
        nodaemon        = false,
        delay           = 0,
}

sync{
        default.rsync,
        rsyncOps = {
                "-av",
                "--delete"
        },
        source="/mnt/cache/",
        target="192.168.100.200::cache-sync/",
}

「::cache-sync」=「同期先のrsync設定」
「rsyncOps」にはrsyncのオプションが使えます。
使用環境により変更して下さい。

# /etc/init.d/lsyncd start

これで、同期されるはずです。

3)同期テスト

ログを見ながら、同期元にファイルを置くと

# touch /mnt/cache/test
# tail -f /var/log/lsyncd/lsyncd.log

Mon Jul 16 20:20:00 2012 Normal: Calling rsync with filter-list of new/modified files/dirs
/test
/
Mon Jul 16 20:20:00 2012 Normal: Calling rsync with filter-list of new/modified files/dirs
/test
/
sending incremental file list
test

sent 128 bytes  received 27 bytes  310.00 bytes/sec
total size is 0  speedup is 0.00
Mon Jul 16 20:20:00 2012 Normal: Finished a list = 0
sending incremental file list
test

sent 128 bytes  received 27 bytes  310.00 bytes/sec
total size is 0  speedup is 0.00
Mon Jul 16 20:20:00 2012 Normal: Finished a list = 0

また、同期先のログを見ると

# tail -f /var/log/rsyncd/rsyncd.log 
2012/07/16 20:16:04 [3166] rsyncd version 3.0.9 starting, listening on port 873
2012/07/16 20:20:00 [3193] name lookup failed for 192.168.100.100: Name or service not known
2012/07/16 20:20:00 [3193] connect from UNKNOWN (192.168.100.100)
2012/07/16 11:20:00 [3193] rsync to cache-sync/ from unknown (192.168.100.100)
2012/07/16 11:20:00 [3193] receiving file list
2012/07/16 11:20:00 [3193] sent 54 bytes  received 153 bytes  total size 0

リアルタイムで同期されていることがわかります。
名前解決に失敗?してるので、Hostsに書けばいいかも。。

[tegaki]結構便利w[/tegaki]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Enter code * Time limit is exhausted. Please reload CAPTCHA.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください