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