Custom Search

JITAKU_SVR_Wiki



lsync ver 2

lsyncの説明

詳細は下記のver1と同じなので省略

注意
lsyncdはローカルのファイルシステムを参照するため、ミラー元がnfsなど、自分で管理していないファイルシステムに変更が加えられても、
ミラー先へのリアルタイム同期はしてくれないので注意。

また、以下のlsyncd-2.1.4からlsyncdのオプションが大きく変わってしまっている。
それ以前のバージョンの設定内容は使えない部分がある。

環境

OS:CentOS release 6.4 (Final) 64bit
lsyncバージョン:lsyncd-2.1.4-1.el6.rf.x86_64

インストール・設定

インストール

CentOS6.4には標準パッケージで用意されていないので、rpmforgeからインストールする。
(リポジトリの変更は割愛)

# yum -y install lsync

# rpm -ql lsyncd-2.1.4-1.el6.rf.x86_64
/etc/logrotate.d/lsyncd
/etc/rc.d/init.d/lsyncd
/etc/sysconfig/lsyncd
/usr/bin/lsyncd
/usr/share/doc/lsyncd-2.1.4
/usr/share/doc/lsyncd-2.1.4/COPYING
/usr/share/doc/lsyncd-2.1.4/ChangeLog
/usr/share/doc/lsyncd-2.1.4/examples
/usr/share/doc/lsyncd-2.1.4/examples/lbash.lua
/usr/share/doc/lsyncd-2.1.4/examples/lecho.lua
/usr/share/doc/lsyncd-2.1.4/examples/lgforce.lua
/usr/share/doc/lsyncd-2.1.4/examples/limagemagic.lua
/usr/share/doc/lsyncd-2.1.4/examples/lpostcmd.lua
/usr/share/doc/lsyncd-2.1.4/examples/lrsync.lua
/usr/share/doc/lsyncd-2.1.4/examples/lrsyncssh.lua
/usr/share/man/man1/lsyncd.1.gz

一緒にインストールされた*.luaと言うのがサンプルの様なもの。



設定

ミラー元とミラー先の設定を行う。
ミラー元にファイルを作成すれば、ミラー先にもファイルが作成される、というもの。

1. 設計をする。
ミラー元ディレクトリ:/home/hogehoge/mydir
ミラー先ディレクトリ:/mnt/nfs_storage

ローカルのディレクトリを常にnfs先のディレクトリに同期させたい、という設計。

2. 設定ファイルを/etcに置く。
※/etc/init.d/lsyncdを見ると、ここに置くことになっているので、それだけの理由。

3.設定をする。

# cp -p /usr/share/doc/lsyncd-2.1.4/examples/lrsync.lua /etc/lsyncd.conf
※lrsync.luaはサンプルの様なもの。

# vim /etc/lsyncd.conf

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings = {
        logfile = "/var/log/lsyncd.log"
        statusFile = "/tmp/lsyncd.stat",
        statusInterval = 1,
}

sync{
        default.rsync,
        source="/home/hogehoge/mydir",
        target="/mnt/nfs_storage"
}

# /etc/init.d/lsyncd start

TIPS:
起動時のエラー
/etc/init.d/lsyncd: line 23: /etc/sysconfig/lsyncd: 許可がありません
(英:/etc/init.d/lsyncd: line 23: /etc/sysconfig/lsyncd: Permission denied)
正直、このエラーの対応が追えなかったので、対応として、
lsyncd起動スクリプトの21~23行目

    22 if [ -e /etc/sysconfig/lsyncd ]; then
    23         /etc/sysconfig/lsyncd
    24 fi

この部分をまんまコメントアウトしてあげた。
これでエラーが出なくなり、特にlsyncdとしての動作に問題ある訳ではなかったので良しとした。

ファイル数の上限

lsyncdで監視出来るファイルの上限はkernelで管理しているらしく、defaultの設定では8192になっている。
これを超えた場合、以下の様なログがmessagesに書かれている。

lsyncd: Error, Terminating since out of inotify watches.#012Consider increasing /proc/sys/fs/inotify/max_user_watches

max_user_watchesが現在の最大監視ファイル数になる、
この値だと心もとないので最大数を引き上げるのだが、ここは単純にパフォーマンスに影響するので、マシンスペックと相談する。

変更は

# vim /etc/sysctl.conf
※最終行あたりに
fs.inotify.max_user_watches = 819200

kernelを再読み込み

# /sbin/sysctl -p

# cat /proc/sys/fs/inotify/max_user_watches
819200

ログ設定

どのファイルを作成(同期)して、どのファイルを削除したのかをログから確認したい場合、デフォルトの設定だと分かりにくい。

# vim /etc/init.d/lsyncd
20行目辺り

OPTIONS="-log Inotify -pidfile /var/run/lsyncd.pid /etc/lsyncd.conf"

OPTION行に-logと記述する。
引数はいくつかあるが、-log allだとすべて(デバッグ)になる。
Inotifyにすることでcreateとdeleteとerrorが出る様になる。

オプションについて

lsyncdのオプションについて冒頭でも簡単に説明したが、以前のバージョンとかなり変わってしまっているため、以下に補足する。

具体例

settings = {
        logfile = "/var/log/lsyncd.log"
        statusFile = "/tmp/lsyncd.stat",
        statusInterval = 1,
}

sync{
        default.rsync,
        source="/home/hogehoge/mydir",
        target="/mnt/nfs_storage"
        rsync={
                owner=true,
                group=true,
                perms=true,
                },
}

以前は"rsyncOps"と書いていた部分が上記の様に変更されていて、
そのオプションはrsyncの引数をそのまま使用していたが、今バージョンから変わっている様子。
詳細は公式で↓
https://github.com/axkibe/lsyncd/wiki/Manual-to-Lsyncd-2.1.x

ここではowner,group,permsのそれぞれをtrueにした。
これで、ファイル、ディレクトリのオーナ、グループはミラー元と同じユーザにし、
権限もミラー元と同じ権限になると思う。

テスト

lsyncがうまく動いていくれるか、どれくらいの時間で同期が完了するかテストをしたので、その時のスクリプトを記述。

lsync ver 1

lsyncの説明

lsyncは割と単純なので一つのページで説明。

lsyncはリアルタイムでリモート先ディレクトリとデータの同期を取る等に使用する。
サーバとなる側にlsyncdをインストールし、クライアント側はrsyncでサーバと同期を取る挙動をする。

lsyncの同期方法をググるとxinet経由で使用しているものがあるが、今回はxinetを使用しない。
以下、気づいた点

  • 通信方法もsshのrsyncではないらしいのでパスフレーズ解除の必要はない
  • 数MB程度のファイルであれば数秒の遅延は発生するが、数百MB以上のファイルであれば数分単位での遅延が発生する
  • 一度に複数のデータを同期ディレクトリに配置しても、一つのデータが終わるまで次のデータは同期されない
  • サーバ側で削除したデータはクライアント側でも削除される
  • クライアント側にデータを配置しても、サーバ側から上書きされるので消されてしまう

最後に書いた太線部分は、ftp等で間違ってアップロードされた場合、大きな問題になるかもしれないので注意が必要。

設定方法

rsync(クライアント側)

最後にlsyncを立ち上げたときにわかりやすいので、クライアント側から設定する。
rsyncはおそらくどのディストリビューションでもデフォルトで存在しているので、これを使用。なければインストールする(割愛)。

# rpm -qa | grep rsync
rsync-3.0.6-3.3.i586

設定ファイル:rsyncd.conf
デフォルト状態

gid = users
read only = true
use chroot = true
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = trusted.hosts
slp refresh = 300
use slp = false

#[Example]
#       path = /home/Example
#       comment = An Example
#       auth users = user
#       secrets file = /etc/rsyncd.secrets

編集後

# more /etc/rsyncd.conf

#gid = users
#read only = true
#use chroot = true
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
#hosts allow = trusted.hosts
slp refresh = 300
use slp = false

hosts allow =*
use chroot =no
max connections=5

[rsync]
path=/home/hogehoge/public_html
uid = root
gid = root
read only = false

説明
hosts allow =* 許可ホスト設定
use chroot =no チェンジルートの使用
max connections=5 最大コネクション数
read only = false 書き込みも出きるように変更

[rsync]
path=/home/hogehoge/public_html
uid = root
gid = root
read only = false

[]で括られた部分がモジュール名。lsync側の設定で必要になる。
pathはrsyncしているサーバのどこのディレクトリに同期を取るかを指定。
uid、gidはとりあえずroot権限。
補足:
uid,gidはおそらく同期させるときのユーザ権限。
rootでrsyncを実行しているのであれば、rootが書き込める部分はすべて可能。

最後にrsyncを起動させる。

# /etc/init.d/rsyncd restart

# ps -ef | grep rsyncd
root 2797 1 0 11:29 ? 00:00:00 /usr/sbin/rsyncd --daemon

lsync(サーバ側)

基本的にyumやyastなどのレポジトリには含まれていないのでソースからダウンロードしてくる。
download:http://code.google.com/p/lsyncd/

# cd /usr/local/src

# wget http://code.google.com/p/lsyncd/downloads/detail?name=lsyncd-1.37.tar.gz&can=2&q=

# tar zxvf lsyncd-1.37.tar.gz

# cd lsyncd-1.37

# ./configure

# make

# make install

特に依存関係でエラーは出なかった(OpenSuSE11.2)。
設定ファイル:lsyncd.conf.xml

# more /etc/lsyncd.conf.xml

<lsyncd version="1">
<settings>
<logfile filename="/var/log/lsyncd"/>
<binary filename="/usr/bin/rsync"/>
<pidfile filename="/var/run/lsyncd.pid"/>
</settings>
<directory>
<source path="/home/hogehoge"/>
<target path="192.168.0.1::rsync/"/>
</directory>
</lsyncd>

色々調べてみると、上記の設定ファイルで必要な箇所が決まっているので、別に設定ファイルを用意するようにした。

# more /etc/lsyncd.conf

/home/hogehoge/public_html 192.168.0.1 rsync
同期させたいディレクトリ リモートホスト リモートホスト側のrsyncモジュール名(クライアント側で説明したもの)

上記のlsyncd.confファイルを作成してしまえば、特にxmlファイルは必要ない(?)

lsyncdの起動スクリプトを作成し起動させる。
lsync_起動スクリプト

# chmod +x /etc/init.d/lsyncd

# /etc/init.d/lsyncd start

# ps -ef | grep lsyncd
root 16464 1 0 11:30 ? 00:00:00 /usr/local/bin/lsyncd /home/hogehoge/public_html 192.168.0.1::rsync/

注意点としては、rynscしているクライアント側とsyncが出来ていないとプロセスが上がらない可能性があること。

参考

http://wadap.hatenablog.com/entry/20100123/1264211202
http://server-setting.info/centos/lsyncd-rsync-realtime.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-12-17 (木) 16:40:48 (702d)