バックグランドで特定フォルダを監視して、定義に基づき処理を行うデーモン
本家様https://github.com/axkibe/lsyncd/wiki

特定フォルダにファイルが作られる(CREATE)、変更(MODIFY)、削除(DELETE)らをトリガーにして処理が行われる。

DRBDのようなブロックレベルのミラーリングでもいいのだが、ファイルシステムレベルで動くのがこれみたい。
ファイルレベルな物なので、ミラーされる側のPCに特別な措置は不要。rsyncdやsshdが動いていればいいみたい。

ここでは、ローカル/homeを監視して、作成、変更、削除があれば、ミラー先(c105)の/homeに反映させることとを想定する。
2015y06m27d_140004127.png

監視対象へlsyncdのインストール

NFSサーバとかのファイルサーバが対象となるだろう。
pkgs.orgサイトで調べてみるとhttp://pkgs.org/search/lsyncd
epelリポジトリで入手可能なようだ。CentOS7でepelリポジトリを組み込むにはここを参照yum

[root@c ~]# yum --enablerepo=epel install lsyncd

インストールしたパッケージは「lsyncd-2.1.5-6.el7.x86_64
設定ファイルは「/etc/lsyncd.conf」となる。

設定ファイルの中身は

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
--
sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}

となっている。「--」はコメント行。デフォルトで書かれている内容は
「/var/www/html」の内容をrsync+sshでlocalhost内の「/tmp/htmlcopy/」にコピーを行う設定である。

ここでは ローカル/homec105/home に移したいので

[root@c ~]# vi /etc/lsyncd.conf
settings {
   logfile    = "/var/log/lsyncd/lsyncd.log",
}
sync{
    default.rsyncssh,
    source="/home",
    host="c105",
    targetdir="/home",
    rsync = {
       compress = false,
       archive = true,
       _extra = {"--bwlimit=125"},
       rsh = "ssh -i /root/.ssh/lsyncd_dsa",   -- ssh経由にして、秘密鍵を指定(後述)
   }
}
[root@c ~]# mkdir /var/log/lsyncd

とします。rsync+sshで 圧縮はなし(compress = false)で、転送速度を 125KBps(1Mbps) とします。
*詳細はこちら https://github.com/axkibe/lsyncd/wiki/Manual-to-Lsyncd-2.1.x

パスフレーズなしの秘密鍵・公開鍵を作る

lsyncdをデーモンで動かして、変化があったら即座に相手側c105にファイルを送る、削除する。
そのため、パスワードなしで rsync を行う必要がある。
*/homeを扱うのでrootでrsyncを行います

rsyncでも示しているが、lsyncd を実行する側(ローカル)で rootの公開鍵・秘密鍵 を作ります。
既存にある公開鍵・秘密鍵を使ってもいいが、lsyncd のための公開鍵・秘密鍵を作りましょう

[root@c ~]# ssh-keygen -t dsa -f .ssh/lsyncd_dsa
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):                <--- リターンキーのみを叩きパスフレーズを登録しない
Enter same passphrase again:                               <--- 再度リターンキーのみを叩く
(略)
[root@c ~]# 
[root@c ~]# ls -l .ssh/lsyncd_dsa*
-rw------- 1 root root 672  5月  7 12:19 .ssh/lsyncd_dsa
-rw-r--r-- 1 root root 608  5月  7 12:19 .ssh/lsyncd_dsa.pub
[root@c ~]#

この作った 公開鍵「.ssh/lsyncd_dsa.pub」の中身ミラー先(c105)の /root/.ssh/authorized_keysに追記します。
*追記するファイル名(authorized_keys)は、/etc/ssh/sshd_configの AuthorizedKeysFile で定義されています

[root@c ~]# ssh root@c105 'mkdir .ssh && chmod 700 .ssh'
 
[root@c ~]# ssh root@c105 'cat > .ssh/authorized_keys' < .ssh/lsyncd_dsa.pub       #ローカルの.ssh/lsyncd_dsa.pubをc105に渡す
[root@c ~]# ssh root@c105 'chmod 600 .ssh/authorized_keys'

追記が完了したらパスフレーズなしの秘密鍵・公開鍵のテストを行ってみます。

[root@c ~]# ssh -i .ssh/lsyncd_dsa root@c105    # -i を設けて秘密鍵を指定します
[root@c105 ~]#

これでパスフレーズなしで行けることを確認した。

実行

[root@c ~]# systemctl enable lsyncd.service
[root@c ~]#
[root@c ~]# systemctl start lsyncd.service

これで起動時に同期が開始され、その後に変化があったら c105:/home にも反映されます。

iftopコマンドで見て見ると
2016y05m07d_123618974.png
と確かに設定した 1Mbps でコピーされている

注意

パーミッションの関係でroot同士で rsync+ssh を行ってます。
ファイルサーバとか lsyncd を稼働させるサーバのsshdは PermitRootLogin noでいいですが、
ミラー先となるマシンでは、rootでの接続が必要なので、
PermitRootLogin yes
とする必要があります。
加えて最低限PasswordAuthentication noとして
公開鍵方式でないとログインできないような構成にすべきかも。

起動直後にsyncさせず、その後に発生した事案から開始するには

設定ファイルにinit = false を入れるとlsyncd起動時に同期は行われない。
また、delete = false を入れると、source側のファイルが削除されてもコピー先は削除されません。

[root@c ~]#
settings {
   logfile    = "/var/log/lsyncd/lsyncd.log",
}
sync{
   default.rsyncssh,
   source="/home",
   host="c105",
   targetdir="/home",
   init = false,                              --- 初回起動時に同期させない
   delete = false,                            --- rsync に '--delete'を含まない
   rsync = {
      compress = false,
      archive = true,
      _extra = {"--bwlimit=125"},             --- 転送速度を 125KBps(1Mbps)
      rsh = "ssh -i /root/.ssh/lsyncd_dsa",
   }
}
[root@c ~]# mkdir /var/log/lsyncd
[root@c ~]# /etc/init.d/lsyncd start

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2016-05-07 (土) 17:58:32 (585d)