サーバー間ミラーリング(lsyncd+rsync)

電脳備忘録
WEBサーバのバックアップとしてDRBDを設定してみたはいいものの、ちょっと想定していたものと違ったのでlsyncd + rsync を利用してサーバー間で同期を取ることにしました。

この方法を使うと簡単にリアルタイムでの同期が可能になるとのことなので、設定にチャレンジしましたが、今回もたどり着くまでの道のりはながく、いろんなサイトを回遊してようやくうまく行ったようです。

というわけで忘れないうちに備忘録としてのこしておこうと思います。(参照は自己責任で・・・)
同期元 192.168.1.130
同期先 192.168.1.131

rsyncのポートを開放(同期元・同期先)

#vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 873 -j ACCEPT

ファイアーウォール再起動。
# /etc/rc.d/init.d/iptables restart


同期元サーバの設定

lsyncdのインストール。

# yum -y install libxml2-devel

# wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz

# tar zxvf lsyncd-1.26.tar.gz

# cd lsyncd-1.26

# ./configure && make && make install

削除
# cd
# rm -rf lsyncd-1.26
# rm -rf lsyncd-1.26.tar.gz


lsyncdの設定ファイルの編集

# vi /etc/lsyncd.conf.xml

<lsyncd version="1">
  <settings>
    <logfile filename="/var/log/lsyncd.log"/>
    <binary filename="/usr/bin/rsync"/>
    <pidfile filename="/var/run/lsyncd.pid"/>
    <callopts>
      <option text="-lt%r"/>
      <exclude-file/>
      <source/>
      <destination/>
    </callopts>
  </settings>
  <directory>
    <source path="/usr/local/www/apache22"/>
    <target path="192.168.1.131::wwwadmin"/>
  </directory>
</lsyncd>


lsyncd起動スクリプトの編集

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


#!/bin/bash
#
# lsyncd: Starts the lsync Daemon
#
# chkconfig: 345 99 90
# description: lsyncd auto start script
# processname: lsyncd

. /etc/rc.d/init.d/functions

config="/etc/lsyncd.conf.xml"
lsyncd="/usr/local/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 $?

起動スクリプトに実行権をつける
# chmod +x /etc/rc.d/init.d/lsyncd


lsyncd起動スクリプト実行
# /etc/rc.d/init.d/lsyncd start
lsyncd を起動中:                                 [  OK  ]



同期先サーバの設定

rsyncの設定ファイルの編集

# vi /usr/local/etc/rsyncd.conf

uid = root
gid = root
log file = /var/log/rsyncd.log
pid file = /var/log/rsyncd.pid
use chroot = no

[wwwadmin]
path = /usr/local/www
hosts allow = 192.168.1.130
read only = false




rsyncd起動スクリプトの編集

# vi /etc/rc.d/init.d/rsyncd



#!/bin/sh
# Rsynicd This shell script takes care of starting and stopping the rsync daemon
# description: Rsync is an awesome replication tool.
#
# chkconfig: 345 87 87
# description: Rsync is an awesome replication tool.

# Source function library.
. /etc/rc.d/init.d/functions

[ -f /usr/bin/rsync ] || exit 0

start() {
        action "Starting rsyncd: " /usr/bin/rsync --daemon --config=/usr/local/etc/rsyncd.conf
}
stop() {
        action "Stopping rsyncd: " killall rsync
}

case "$1" in
start)
        start
;;
stop)
        stop
;;
restart)
        stop
        sleep 1
        start
;;
*)
echo "Usage: rsyncd {start|stop|restart}"
exit 1
esac
exit 0


rsyncd起動スクリプトに実行権をつける
# chmod +x /etc/rc.d/init.d/rsyncd

rsyncd起動スクリプト実行

#/etc/rc.d/init.d/rsyncd start
Starting rsyncd:                                 [  OK  ]

どうやら同期は取れているみたい。DRBDやめてこれで行くかなぁ。

広告

ブログの維持費に充てるでございます・・・。