lsyncd + rsyncd を使った異なるサーバー間のデータの自動同期の設定について書きます。
rsync コマンドを使った異なるサーバー間のデータ同期については別の投稿で書きましたが、今回は、片方のサーバーにアップロードしたら自動的に別のサーバーへ同期転送される環境を予め作っておく方法です。
送信側(マスター側)で lsyncd というデーモンを起動しておき、受信側(スレーブ側)で rsyncd というデーモンを起動しておきます。
複数のサーバーでコンテンツが自動同期される仕組みを構築できれば、今度はそれをDNSラウンドロビンなどに利用できます。
(DNSラウンドロビンは、また別の機会に)
■ rsyncd (受信側サーバーの設定)
(1) インストール (yum配布版rpm)
rsyncd は xinetd というデーモン経由で rsync を起動することです。
もし rsync コマンドがなければそれも入れます。
# yum -y install rsync # yum -y install xinetd
(2) 設定
/etc/xinetd.d/rsync
service rsync
{
disable = no ................... ここを no に変更
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
/etc/rsyncd.conf
uid = root
gid = root
[Module1]
path = /path/to/
hosts allow = 192.168.1.0/24,192.168.2.0/24
read only = no
[Module2]
path = /path/to/
hosts allow = 192.168.1.100
read only = no
secrets file = /etc/rsyncd.secrets ... ユーザー認証する場合
※送信側サーバーの lsyncd では、Module1 などのモジュール名で転送先のパスを指定します。
自動起動設定
# chkconfig xinetd on
起動・終了・再起動
# /etc/init.d/xinetd start # /etc/init.d/xinetd stop # /etc/init.d/xinetd restart
■ lsyncd (送信側サーバーの設定)
(1) インストール (yum配布版rpm)
# yum -y install lsyncd
※ver.2.0.x 以前のバージョンだと、起動スクリプトがインストールされないことがあります。
※ver.2.1.x 以降だと自動でインストールされます。
もし↓このファイルがなければこのとおりに作ります。
/etc/init.d/lsyncd
#!/bin/bash
# chkconfig: - 80 20
# description: lsyncd
RETVAL=0
prog="/usr/bin/lsyncd"
pidfile="/var/run/lsyncd.pid"
lockfile="/var/lock/subsys/lsyncd"
option="-pidfile $pidfile"
# option="-log all -pidfile $pidfile"
conffile="/etc/lsyncd.conf"
. /etc/rc.d/init.d/functions
start() {
echo -n "Starting $prog:"
daemon --pidfile=$pidfile $prog $option $conffile
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch $lockfile
return $RETVAL
}
stop() {
echo -n "Stopping $prog:"
killproc -p $pidfile $prog
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $lockfile $pidfile
return $RETVAL
}
case $1 in
start) start ;;
stop) stop ;;
restart) stop && start ;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
起動スクリプトが chkconfig に登録されていなければ登録します。
# chmod 755 /etc/rc.d/init.d/lsyncd # chkconfig --add lsyncd
(2) 設定
/etc/sysconfig/lsyncd
LSYNCD_OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf" ↑これを生かす #LSYNCD_OPTIONS=" " ... これをコメントに
※注意
ただし、/etc/lsyncd.conf が無いか空の場合は起動しません。
/etc/lsyncd.conf
-- コメントは ハイフン2つです。
-- これは、ver.2.1 以降の書式です。
-- ver.2.1 から settings直後の = は不要です。
settings{
logfile = "/var/log/lsyncd.log",
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
}
sync{
default.rsync,
source = "/path/to/",
target = "192.168.1.2::Module1",
delete = true, ※デフォルト動作のため指定不要
rsync = {
archive = true
}
}
※delete = true は、デフォルト動作のため指定不要
もし、delete = false だと、同期元で削除されたファイルを同期先で削除しません。
最初に動かすとき、設定ミスが怖いときは false がいいかもしれません。
もし設定を間違うと同期先の/以下全削除なんて大失敗があるかもしれませんので要注意です。
※ver.2.0.x 以前の lsyncd.conf とは書式が違います。
rsyncオプションの指定方法も違い、2.0系では rsyncOpts = {“-a”,”–delete”} と指定していたところが 2.1系では rsync = { archive = true } と書きます。
不用意に yum update するとバージョンが変わって動かなくなるかもしれないので要注意です。
自動起動設定
# chkconfig lsyncd on
起動・終了・再起動
# /etc/init.d/lsyncd start # /etc/init.d/lsyncd stop # /etc/init.d/lsyncd restart
ログの確認
# tail -n100 /var/log/lsyncd.log
