🤔

スレーブサーバを構築し直したらマスタサーバの lsyncd がうまく動作しなかった

2017/01/18に公開

前回はマスタサーバ側を構築し直した時の不具合で、今回はそれの相方となるスレーブサーバを再構築した時の設定のお話。

症状

マスタサーバでは lsyncd は正常に動作しているようだが、一向にスレーブサーバにファイルを転送する気配がない。
マスターサーバ側でファイルを更新作成しても /var/log/messages にファイル転送の発生を知らせるログが出てこない。

原因

スレーブサーバで rsync をサービス化して待機させる必要があったのだが、それをしていなかった。
またしても基本的なことなんだけど、構築手順書に書いてなかったからすっかり見落としてた。
他人が作った資料を、別の他人に渡して構築を任せるとろくなことがない。

解決編

インストールする

yum -y install xinetd rsync

rsyncd のための設定ファイルを作る

下記のファイルはないので、自分で作成する。

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

[sync_dir]
    path = /home/to_dir
    hosts allow = 192.168.0.10
    read only = false

uid, gid' は rsync を実行するユーザとユーザグループ。 log fileはその名の通りログを書き出すファイル名。pid file` も見てわかる通りプロセスIDのためのファイル名。

[sync_dir] は マスタサーバ側の lsyncd.conf で指定したディレクトリのエイリアス(蛇足)。
もしマスタサーバでエイリアス名じゃなくて直接ディレクトリ名をしているのなら、ここから下は不要(read only は必ず残す)。

path は実際に同期するディレクトリのパス。

hosts allow はマスタサーバの IP アドレス。
逆に拒否設定をする場合は hosts deny を設定する。

read only は指定しないと yes なので nofalse にする。
これをしないとファイル更新がされない、はず。

xinetd で rsync を有効にする

vim /etc/xinetd.d/rsync
disable の行を no に指定する。

xinetd を起動し常駐させる

service xinetd start
chkconfig xinetd on

rsync を常駐させる

chkconfig rsync on

念のため確認

chkconfig --list rsync
を発行し、
rsync on
と出れば万が一再起動がかかってもまたスレーブとしてファイルを同期する。

最終チェック

実際にマスタサーバでファイルの更新や作成をしてみて、スレーブに転送されていれば完了。

蛇足

マスター側の設定例

settings {
    logFile = "/var/log/lsyncd.log",
    statusFile = "/tmp/lsyncd.stat",
    maxProcesses = 2,
    statusInterval = 1,
    insist       = 1,
}

sync {
    default.rsync,
    source="/home/from_dir/",
    target="192.168.0.20::sync_dir",
    exclude="tmp/",
    rsync={
        owner = true,
        group = true,
        archive = true,
        links   = true,
        update  = true,
        verbose = false,
        _extra  = {
            "--bwlimit=10000",
        },
    },
}

細かい説明はどこかにお任せして、今回の件に絡んで重要なところだけ。
settings は、まぁ、こんなもんだと思って。
sync だけは重要。

source は同期するファイルがあるディレクトリを指定する。
ここで重要なのが最後のスラッシュ (/) の有無。
このスラッシュをつけないと from_dir がスレーブサーバ側の /home/to_dir の下にできて、 /home/to_dir/from_dir となってしまう。
今回は送信元と先でディレクトリ名が違うが、実際の Web システムなんかでは同名にすることが多いと思うので、そういう場合は最後のスラッシュを忘れないようにする。

target は送信先。
:: の前がスレーブサーバの IP アドレスで、その後ろが送信先ディレクトリのエイリアス。
このエイリアスはスレーブサーバ側の rsyncd.conf[sync_dir] と一致させる。

exclude はそのまま。除外するディレクトリ。
source からの相対パス。

rsyncrsync する際のオプションで、それぞれ rsync コマンドのオプションと対応する。
詳細は割愛。

Discussion