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]