サーバ間で相互にフォルダをシンクロ

久しぶりにサーバ構築時に大ハマリしたので、また技術メモです。

今回はrsynclsyncdを使って、異なるサーバ間で相互にファイルを同期する方法。

まずは、何はともあれインストールから。
(lsyncdが見つからない場合は、EPELのリポジトリを追加)

yum -y install xinetd*
yum -y install rsync*
yum -y install lsyncd*

次は、rsyncの設定ファイルを作成します。

vi /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid
[exsample]
path = /home/server1/img_dir #同期するディレクトリ
log file = /var/log/rsyncd.log
read only = false
list = true
uid = apache
gid = apache
hosts allow = 192.168.0.2 #別サーバのIPアドレス

lsyncdの設定ファイルも作成。
(何故かsettingsの最後の配列がカンマで終わっていますが、公式サイトの通りにしています)

vi /etc/lsyncd.conf

settings = {
logfile = “/var/log/lsyncd.log”,
statusFile = “/tmp/lsyncd.status”,
nodaemon = false,
}
sync {
default.rsync,
source = “/home/server1/img_dir/”, #同期するディレクトリ
target = “192.168.0.2:/home/server2/img_dir/”, #別サーバのIPアドレスとディレクトリ
rsyncOps = “-ltus”
}

あとlsyncdの起動スクリプトも自前で用意しないといけません。

vi /etc/rc.d/init.d/lsyncd

#!/bin/bash
#
# lsyncd
#
# chkconfig: – 99 20
# description: lsyncd auto start script
start() {
/usr/bin/lsyncd /etc/lsyncd.conf
}
stop() {
/bin/kill -9 `/sbin/pidof lsyncd`
until [ -z $(/sbin/pidof lsyncd) ]; do :; done
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
pid=`pidof lsyncd`
if [ $? -eq 0 ]; then
echo “lsyncd (pid $pid) is running…”
else
echo “lsyncd is not running”
fi
;;
*)
echo “Usage: lsyncd {start|stop|restart|status}”
exit 1
esac
exit $?

次に秘密鍵と公開鍵を作成します。
(途中で聞かれる質問は空でENTER)

ssh-keygen -t rsa -N “”

実行後に作成される秘密鍵「/root/.ssh/id_rsa」と公開鍵「/root/.ssh/id_rsa.pub」のうち、公開鍵の内容を別サーバの「/root/.ssh/authorized_keys」に記載します。

すでに「/root/.ssh/authorized_keys」ファイルが存在している場合は、元の内容を残したまま、改行して次の行に追記します。

それと、SSHのPermitRootLoginをwithout-passwordに変更。
(without-passwordはリモートでrootログインする際にパスワードはNG、公開鍵はOKということ)

vi /etc/ssh/sshd_config

PermitRootLogin forced-commands-only

#PermitRootLogin forced-commands-only
PermitRootLogin without-password

sshdを再起動。

/etc/rc.d/init.d/sshd restart

xinetdとlsyncdを起動。

/etc/rc.d/init.d/xinetd start
/etc/rc.d/init.d/lsyncd start

xinetdとrsyncとlsyncdを起動項目に追加。

chkconfig xinetd on
chkconfig rsync on
chkconfig –add lsyncd
chkconfig lsyncd on

という作業を、対象のサーバすべてに行うことで、相互にファイルがシンクロされるようになります。

ちょっと気をつけることとして、lsyncdを起動した段階でシンクロが開始されるので、設定を全部終わらせてから最初にシンクロ元になるサーバから起動していきましょう。

2012/01/20 追記
rsyncは873ポートで通信しますので、ルータやiptablesを設定している場合は開けておきましょう。


コメントを残す