はじめまして。林と申します。
lsyncd と rsyncd を使って、複数台のサーバをリアルタイムに同期する方法をご紹介します。
同期元ディレクトリ内のファイルやディレクトリに更新があると、同期先のディレクトリと同期します。
イメージとしてはこんな感じです。
cronでもできますが、即時性が求められる場合はこちらがいいと思います。
ほぼリアルタイムで同期できます。
lsyncd はファイルシステムの更新をリアルタイムに監視し、更新があると rsync コマンドで同期します。
同期先のサーバで rsyncd を動かし、同期元のサーバで lsyncd を動かすことになります。
設定手順は以下のようになります。
同期先サーバの設定(rsyncdの設定)
rsyncd.confを作成します。
[root@web1 ~]# vi /etc/rsyncd.conf
uid = root gid = root log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid [videos] comment = rsync server path = /home/videos read only = false [backup] comment = rsync server path = /home/backup read only = false
[videos] と [backup] が同期先の情報です。
path が同期先のディレクトリになります。
上記のように複数設定することもできます。
※ lsyncd で同期先を指定するときにここで指定した名前([ ]の中)を使います
xinetdが起動しているか確認します。
[root@web1 ~]# /etc/init.d/xinetd status xinetd (pid 1622) を実行中...
起動していました。
rsyncを使えるようにします。
[root@web1 ~]# 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 flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
disable を yes から no に変更します。
xinetd をリロードします。
[root@web1 ~]# /etc/init.d/xinetd reload
chkconfig に追加しておきます。
[root@web1 ~]# chkconfig --list | grep rsync rsync: off [root@web1 ~]# chkconfig rsync on
これで同期先の設定は終わりです。
同期先が複数台ある場合は同じ設定を全部にやります。
同期元サーバの設定(lsyncdの設定)
lsyncdをインストールします。
lsyncd は、バージョン 1系 と 2系 で設定ファイルの記述方法が異なります。
バージョン1系は xml で記述し、バージョン2系は lua で記述します。
2系統は lua への依存があるので、簡単なほうの1系統をインストールしました。
[root@db~]# cd /usr/local/src/ [root@db~]# wget http://lsyncd.googlecode.com/files/lsyncd-1.42.tar.gz [root@db~]# tar zxvf lsyncd-1.42.tar.gz [root@db~]# cd lsyncd-1.42 [root@db~]# ./configure [root@db~]# make [root@db~]# make install
同期の設定を書きます。
インストールディレクトリにlsyncd.conf.xmlがあるので、/etc/ にコピーします。
[root@db~]# cp lsyncd.conf.xml /etc/
内容を修正します。
[root@db~]# vi /etc/lsyncd.conf.xml
<lsyncd version="1"> <settings> <logfile filename="/var/log/lsyncd.log" /> <pidfile filename="/var/run/lsyncd.pid" /> <delay value="30"/> <callopts> <option text="-aur4" /> <option text="--block-size=16384" /> <source /> <destination /> </callopts> </settings> <directory> <source path="/var/videos/" /> <target path="192.168.0.101::videos" /> <target path="192.168.0.101::backup" /> <target path="192.168.0.102::videos" /> <target path="192.168.0.102::backup" /> </directory> </lsyncd>
source に同期元ディレクトリを書きます。
target に同期先サーバのIPアドレスと、rsyncd.conf に書いた同期先情報の名前を書きます。
リアルタイムに更新を監視するには lsyncd をデーモンで動作させないといけないので、以下の設定をします。
自動起動スクリプトを作成します。
[root@db~]# vi /etc/init.d/lsyncd
#!/bin/bash # chkconfig: - 85 15 # description: lsyncd RETVAL=0 prog="/usr/local/bin/lsyncd" pidfile="/var/run/lsyncd.pid" . /etc/rc.d/init.d/functions start() { echo -n "Starting $prog:" daemon $prog RETVAL=$? echo [ $RETVAL = 0 ] && touch $pidfile return $RETVAL } stop() { echo -n "Stopping $prog:" killproc $prog RETVAL=$? echo rm -f $pidfile return $RETVAL } case $1 in start ) start ;; stop ) stop ;; restart) stop && start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac
chkconfigに追加しておきます。
[root@db~]# chmod a+x /etc/init.d/lsyncd [root@db~]# chkconfig --add lsyncd [root@db~]# chkconfig lsyncd on
lsyncd を起動すると同期が始まります。
[root@db~]# /etc/init.d/lsyncd start
lsyncd + rsyncd で同期しておくと、うっかりファイルやディレクトリを消してしまったときも安心ですね。
この前私がやらかしてしまって、今までみんながうっかり消してきたものの告白大会になったのですが、一番傑作だったのは /usr/bin を削除してしまった社長の告白でした。
それではまた( ´ ▽ ` )ノ