lsyncd+rsyncd でサーバー間の自動同期

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

コメントを残す