スレーブサーバを構築し直したらマスタサーバの lsyncd がうまく動作しなかった
前回はマスタサーバ側を構築し直した時の不具合で、今回はそれの相方となるスレーブサーバを再構築した時の設定のお話。
症状
マスタサーバでは 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
なので no
や false
にする。
これをしないとファイル更新がされない、はず。
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
からの相対パス。
rsync
は rsync
する際のオプションで、それぞれ rsync
コマンドのオプションと対応する。
詳細は割愛。
Discussion