rsync

rsyncを動かす機会があったので、そのメモ。

rsyncにはいろんな使い方があるのですが、今回採用したのは、マスターサーバに xinetd デーモンを立てて、スレーブサーバ達からマスターにデータを取りにいく方式です。
各スレーブのrsyncは、cronで動かしました。

マスターサーバの設定

マスターサーバには、xinetdデーモンを立てて、スレーブからの要求を待ちます。

/etc/xinetd.d/rsync の設定

/etc/xinetd.d/rsync のdisable = yesを no に切り替えます。

#	/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
	socket_type     = stream
	wait            = no
	user            = root
	server          = /usr/bin/rsync
	server_args     = --daemon
	log_on_failure  += USERID
}

/etc/rsyncd.conf の設定

接続パスワードは、ユーザIDとセットで、/etc/rsync.d/[filename] に保存します。

#
# rsyncd.conf(5)
#

# Global Options.

# motd file =
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
# syslog facility =
# socket options =

[ConfName]
	comment = "コメントを書く"
	path = [シンクするパス]
#	use chroot = yes
#	max connections = 0
#	lock file =
	read only = yes
#	list = true
	uid = nobody
	gid = nobody
#	exclude =
#	exclude from =
#	include =
#	include from =
	auth users = [userid]
	secrets file = /etc/rsync.d/[filename]
#	strict modes = yes
	hosts allow = 192.168.0.1 192.168.0.2
#	hosts deny =
#	ignore errors = on
#	transfer logging =
#	log format = %o %h [%a] %m (%u) %f %l
	timeout = 600
#	refuse options =
#	dont compress = *.gz *.tgz *.zip %.z *.rpm *.deb

スレーブサーバは、[ConfName]で設定した名前で、設定を選択します。この名前領域を複数設定することで、複数の同期設定を設けられます。

詳しくは調べていませんが、それぞれの値で、知ってる範囲で解説します。詳しくは本家マニュアルを見てください。

path
同期の対象とするディレクトリを指定する。
read only
yesとすることで、読み込みのアクセスのみに限定する。
hosts allow
同期できるホストを限定する。
auth users
許可するユーザIDを指定する。
secrets file
auth usersで指定したユーザの、IDとパスワードのセットを記述したファイルのパスを指定する。
timeout
タイムアウトまでの時間設定。

接続パスワードの設定

接続パスワードは、ユーザIDとセットで、/etc/rsyncd.conf の設定にsecrets fileで設定したパスに保存します。

userid:password

.htpasswdのような書式ですが、パスワードは暗号化しない、生の状態で記述します
このファイルは、本人以外の読み込みを許可する設定にしてはいけません。パーミッションを600に設定します。

# chmod 600 /etc/rsync.d/[filename]

設定のリロード

設定が完了したら、次のコマンドでxinetdに設定を反映させます。

# service xinetd reload

スレーブサーバの設定

スレーブサーバは、マスターサーバのxinetd経由で、ファイルを取得し、自身のファイルを同期します。
1行のrsyncコマンドを実行するだけなのですが、シェルスクリプトファイルを作成します。

#!/bin/sh

RSYNC_MASTER_SERVER=192.168.0.20
SYNC_DATADIR=[SyncDirPath]
RSYNC_PASSWORD_FILE=/etc/rsync.d/[passwdFile]

/usr/bin/rsync -aq --delete --password-file=$RSYNC_PASSWORD_FILE [userid]@$RSYNC_MASTER_SERVER::[ConfName] $SYNC_DATADIR

RSYNC_MASTER_SERVERには、マスターサーバのアドレスを指定します。
[SyncDirPath]は、自スレーブ機内の同期ディレクトリを指定します。
マスターとするディレクトリは、マスター側の設定ファイルの記述により決定されます。マスター側設定ファイルの設定名は、[ConfName]に指定することで選択します。

マスター機側に、ユーザのパスワードを設定しましたので、当然スレーブ側からパスワードを送信する必要があります。パスワードは、別途ファイルに保存し、保存した先のパスをRSYNC_PASSWORD_FILEに指定します。(ここでは /etc/rsync.d/[passwdFile])
パスワードファイルの中身は次のように書きます。

password

マスター側のパスワードの設定と同じく、暗号化しない、生の状態で記述し、パーミッションを600に設定します。

# chmod 600 /etc/rsync.d/[passwdFile]

作成した、このシェルスクリプトファイルを、適当なパスに保存します。ここでは、/etc/rsync.d/[ScriptName]とします。
スクリプトファイルに、実行権限を与えることを忘れないようにしてください。

# chmod u+x /etc/rsync.d/[ScriptName]

保存したら、試しに同期を実行してみましょう。

# /etc/rsync.d/[ScriptName]

cronで定期的に実行させる

実行した結果、想定通りの動作を確認できたら、crontabに定期実行の設定をして、完成です。cronの動かし方は、こちらのページを参照してください。

( 2006/12/28 )

プロフィール

ときにはデザイナ、ときにはディレクタ、ときにはプログラマ、ときには何でも屋と、ウェブの世界で未熟ながらもいろいろやっている、コヤナギトモヤです。

ツイッター上ではこのヒト。
@tomk79

RSSフィード

ページの先頭へ戻る