殆どlsyncによるリアルタイムミラーリングさんの情報のままですが・・。とりあえずやってみた。
前提条件
ミラー元(ホスト)
ミラー先(クライアント)
※両方ともCentos5.5
※test前提のディレクトリ名なので適宜読み替えてください。
ミラー先(クライアント)
xinetdのインストール
[client]# yum install xinetd
xinetd rsyncを有効にする
[client]# vi /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it # allows crc checksumming etc.
service rsync
{
disable = no # <- yesをnoに変更
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
backupディレクトリを作成
[client]# mkdir /opt/lsync_backup
[client]# chown nobody:nobody /opt/lsync_backup
confを作成
[client]# vi /etc/rsyncd.conf
[site]
path = /opt/lsync_backup
hosts allow = 192.168.1.0/24 # 又は192.168.1.1/32等で指定
read only = false
xinetdを起動
[client]# /etc/init.d/xinetd start
Starting xinetd: [ OK ]
スタートアップ登録
[client]# /sbin/chkconfig --level 345 xinetd on
ミラー元(ホスト)
libxml2-devel zlib-devel readline-develが入ってることを確認し無ければインストールする。
[host]# yum -y install libxml2-devel zlib-devel readline-devel
lsyncをゲット -> インストール
[host]# cd /opt/src/work/
[host]# wget http://lsyncd.googlecode.com/files/lsyncd-1.39.tar.gz
[host]# tar zxf lsyncd-1.39.tar.gz
[host]# cd lsyncd-1.39
[host]# ./configure --prefix=/opt/softwares/lsyncd-1.39
[host]# make
[host]# make install
同期ディレクトリを作成
[host]# /opt/lsync_test
confのコピー。コピー元のxmlはソース内にある。
[host]# cd /etc
[host]# cp -rfp /opt/src/work/lsyncd-1.39/lsyncd.conf.xml .
confの修正
62,63行目辺りの source pathとtarget pathをクライアントに合わせて修正
[host]# vi cd /etc/lsyncd.conf.xml
<directory>
<source path="/opt/lsync_test/"/>
<target path="192.168.1.2::site/"/>
</directory>
起動ファイルの作成
vi /etc/init.d/lsyncd
-------------------------------------------------
#!/bin/bash
# lsyncd: Starts the lsync Daemon
# chkconfig: 345 99 90
# description: Starts the lsync Daemon
# processname: lsyncd
. /etc/rc.d/init.d/functions
config="/etc/lsyncd.conf.xml"
lsyncd="/opt/softwares/lsyncd-1.39/bin/lsyncd"
lockfile="/var/lock/subsys/lsyncd"
prog="lsyncd"
RETVAL=0
start() {
if [ -f $lockfile ]; then
echo -n $"$prog is already running: "
echo
else
echo -n $"Starting $prog: "
daemon $lsyncd --conf=$config
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch $lockfile
return $RETVAL
fi
}
stop() {
echo -n $"Stopping $prog: "
killproc $lsyncd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $lockfile
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status $lsyncd
;;
*)
echo "Usage: lsyncd {start|stop|restart|status}"
exit 1
esac
exit $?
-------------------------------------------------
こんな感じで。
configとlsyncdの箇所は適宜書き換える。
[host]# chmod 755 /etc/init.d/lsyncd
lsyncdの起動
[host]# /etc/init.d/lsyncd start
起動すると/var/log/lsyncdが出来るので、エラーがないか確認。
logrotateの設定
[host]# cd /etc/logrotate.d/
[host]# vi lsyncd
/var/log/lsyncd {
daily
copytruncate
compress
notifempty
missingok
postrotate
/etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true
endscript
}
スタートアップ登録
[host]# /sbin/chkconfig --level 345 lsyncd on
テストファイル作成
[host]# cd /opt/lsync_test
[host]# touch kapi
クライアント側にファイルが出来ていれば一先ず同期OK
障害テスト
クライアント障害を想定し、試しにクライアントのxinetdを落としてみる
[client]# /etc/init.d/xinetd stop
ホストで新たなファイル作成
[host]# cd /opt/lsync_test
[host]# touch server_down
勿論同期されない。
/var/log/lsyncdに
/usr/bin/rsync /opt/lsync_test/ --> 192.168.1.2::site/ [6816]
rsync: failed to connect to 192.168.1.2: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(122) [sender=3.0.7]
Tue Nov 23 11:37:07 2010: Forked binary process returned non-zero return code: 10
とでてる。接続失敗を検知。
復旧を想定し、クライアントのxinetdをstart
[client]# /etc/init.d/xinetd start
しかし、この段階では自動同期されない・・・。
ホストで新たにファイルを追加
[host]# touch restart
/var/log/lsyncdに
/var/log/lsyncdに
Tue Nov 23 11:40:37 2010: CREATE restart in /opt/lsync_test/ - delayed.
Tue Nov 23 11:40:37 2010: ATTRIB restart in /opt/lsync_test/ - already delayed.
Tue Nov 23 11:40:37 2010: CLOSE_WRITE restart in /opt/lsync_test/ - already delayed.
Tue Nov 23 11:40:42 2010: delay expired: acting for /opt/lsync_test/.
Tue Nov 23 11:40:42 2010: /usr/bin/rsync /opt/lsync_test/ --> 192.168.1.2::site/ [7175]
と出てる。
この段階で再同期したらしい。
[client]# # ls
server_down kapi restart
うーん・・・。ディレクトリの更新等をトリガーにsyncしてるのだろうか、当然の動きかも知れないが
クライアントへの接続検知で再同期されるともっとうれしいが。
でも、ディレクトリ更新タイミングでも充分実用ベースで使える。
NFSのように双方同期ではないので、理想はホストは単に同期用サーバとし、複数のアプリサーバを
クライアントとして同期する、みたいな使い方が良いと思う。
参考URL
http://kapi.jp/kapi_blog/282
2010年11月23日
関連カテゴリ Linux Unix