はじめに
差分を算出してファイルやディレクトリを同期してくれるrsyncと、ローカルファイルへの変更を監視してくれるlsyncdを組み合わせることでリアルタイムにディレクトリを同期する。
lsyncdのversionは2.1.4を利用する。
lysncdとrsyncを連動する方法は二つある。
一つは、SSHを通してrsync同士が通信する方法で、もう一つがバックアップ先でrsyncデーモンを動かす方法になる。
rsync をデーモンモードで動作させることで、rsyncプロトコル(rsync://)による同期が可能になり、SSHを利用する場合より、暗号化によるオーバヘッドがなく高速で同期することができる。
rsync over SSH + lsyncd
1.rootでパスワードなしの公開鍵でログインできるようにしておく。(参考)
2.lsyncdの設定ファイルを作成する。
# vi /etc/lsyncd.conf
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings{
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.stat",
delay = "1",
}
sync{
default.rsync,
source="/sourcedir/",
target="172.16.5.149:/sourcedir/",
rsync = {
copy_links = true,
perms = true,
owner = true,
group = true,
verbose = true,
times = true,
},
}
syncのtargetは「IPアドレス」:「ディレクトリ名」。 rsyncオプションにはrsyncコマンドで指定したいものと同じオプションを記載する。
ファイルを更新してからlsyncdがrsyncを呼び出してくれるまでの時間差をdelayで指定する。デフォルトは15秒もあるので、リアルタイム性をできるだけ追求するために1等小さい値を入れておく。
3.lsyncdの自動起動設定
# chkconfig lsyncd on
4.lsyncdの起動
# /etc/init.d/lsyncd start
rsyncd + lsyncd
1.rsyncdの設定ファイルを作成する。
# vi /etc/rsyncd.conf
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = localhost 172.16.1.0/24
hosts deny = *
use chroot = no
[srcdir]
path = /sourcedir
uid = root
gid = root
read only = false
auth users = root
secrets file = /etc/rsync.secrets
2.パスワードを利用する場合は、secrets file
にパスワードを記載したファイルを指定する。(パーミッションは600)
# ll /etc/rsync.secrets
-rw------- 1 root root 15 4月 1 23:38 2013 /etc/rsync.secrets
# cat /etc/rsync.secrets
root:rsyncpass
3.設定ファイルの記載が終わったら、xinetdにrsyncを登録して、xinetd経由でクライアントにアクセスしてもらう。
※/etc/rc.dにおくrsyncの起動スクリプトは不要で、/etc/xinetd.dに起動設定ファイルをおく。
# 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
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
4.rsyncdのポートを開放する。
# iptables -A INPUT -p tcp --dport 873 -j ACCEPT
5.自動起動
# chkconfig xinetd on
6.確認
# chkconfig rsync --list
rsync on
7.lsyncdの設定ファイルを作成する。
# vi /etc/lsyncd.conf
settings{
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd.stat",
delay = "1",
}
sync{
default.rsync,
source="/sourcedir/",
target="172.16.5.149::srcdir",
rsync = {
copy_links = true,
perms = true,
owner = true,
group = true,
verbose = true,
times = true,
password_file = "/etc/rsync.passwd",
},
}
syncのtargetは「IPアドレス」::「rsyncd.confで設定したパス名」。
rsyncオプションにはrsyncコマンドで指定したいものと同じオプションを記載する。
ファイルを更新してからlsyncdがrsyncを呼び出してくれるまでの時間差をdelayで指定する。デフォルトは15秒もあるので、リアルタイム性をできるだけ追求するために1等小さい値を入れておく。
8.lsyncdの自動起動設定
# chkconfig lsyncd on
9.lsyncdの起動
# /etc/init.d/lsyncd start
注意事項
lsyncdがデフォルトで監視対象にしてくれるファイル数は8192に制限されている。これ以上のファイル数を監視対象にしたい場合は、inotify のカーネルパラメーターを増やす必要がある。
# vi /etc/sysctl.conf
fs.inotify.max_user_watches = 30000
sysctl.confに設定を記述した後は、有効にするためにsysctl -p コマンドを実行する。
# sysctl -p