CentOS 6.3でlsyncdを使ったコンテンツの同期

さくらのVPSにてcrontabでssh+rsyncを使って1分おきにコンテンツを同期してたんですよ。そしたらアタックと勘違いされて同期元から同期先へのsshがブロックされてしまったのでlsyncdを使うことにしてみた。

同期元にはlsyncdが、同期先にはxinetdとrsyncが必要。
同期元192.168.1.101、同期先192.168.1.102ということで手順を整理。

同期先の設定

同期先から設定。

xinetdとrsyncのインストール

すでに入ってるかもしれないけれど、入ってなかったら入れる。

sudo yum install rsync xinetd
/etc/xinetd.d/rsyncの編集

rsyncはデフォルトでdisable yesになっているのでnoにして有効になるように。

/etc/rsyncd.confの編集

グローバル設定とディレクトリの設定。

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

[example_sync]
    path = /path/to/sync
    hosts allow = 192.168.1.101
    read only = no

同期先として変更を受ける側になるのでread onlyはno。
ほかexcludeなどの同期対象を柔軟に設定するためのオプションもある。

iptablesの設定

rsyncの使うポート873を開ける。
同期元に対してのみ開けておくとなおいいでしょう。

xinetdの再起動

設定が問題なくできていればこれで有効になる。

同期元の設定

lsyncdのインストール

CentOS 6.3ではyumでさくっと入るようになっている。

sudo yum install lsyncd
/etc/lsyncd/lsyncd.confの編集

yumで入れても設定ファイルの類は作成されないので自分で作成。

settings = {
        logfile    = "/var/log/lsyncd.log",
        statusFile = "/tmp/lsyncd.stat",
        statusInterval = 1,
}

sync{
        default.rsync,
        source="/path/to/sync/",
        target="192.168.1.102::example_sync
}

オプションの意味などは公式にドキュメントがあるのでそちらを参照。

/etc/init.d/lsyncdの作成

設定ファイル同様に起動ファイルも作られないので以下からもらってきました。

lsyncdで特定のファイルだけ同期する | Glide Note – グライドノート

lsyncdの起動

問題なければこれで起動する。

/etc/init.d/lsyncd start

うまく行けば同期元にファイルを作ると同期先に同期される。
なぜか数十秒くらいのタイムラグがあるのだが、これはどうしようもないのだろうか。

うまくいかなかったらlogfileで指定したところにエラーログが記録されているのでそれを見て対処。

自動起動の設定
chkconfig --add lsyncd
chkconfig lsyncd on

再起動しても同じ状態になるようにするまでが設定です。

Chef

あとで?
実際はCookbookを作って運用しているが、README等をきちんと書くのがめんどくさくて公開にまで至らないと言う。

前の記事

RubyMotionでExifを読む

次の記事

RailsでSQLiteが使えるPaaSを求めて