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

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

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

ここでは、&color(magenta){ローカル};の&color(darkgreen){''/home''};を監視して、作成、変更、削除があれば、&color(orangered){ミラー先};(&color(orangered){c105};)の&color(olive){''/home''};に反映させることとを想定する。
&ref(2015y06m27d_140004127.png,nolink,noborder);

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

#code(nonumber){{
[root@c ~]# yum --enablerepo=epel install lsyncd
}}
インストールしたパッケージは「&color(magenta){lsyncd-2.1.5-6.el7.x86_64};」
設定ファイルは「&color(magenta){/etc/lsyncd.conf};」となる。

設定ファイルの中身は
#code(nonumber){{
----
-- 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/」にコピーを行う設定である。


ここでは &color(magenta){ローカル};の&color(darkgreen){''/home''}; を &color(orangered){c105};の&color(olive){''/home''}; に移したいので
#code(nonumber){{
[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) とします。
&color(red){*};&size(10){詳細はこちら [[https://github.com/axkibe/lsyncd/wiki/Manual-to-Lsyncd-2.1.x>+https://github.com/axkibe/lsyncd/wiki/Manual-to-Lsyncd-2.1.x]] };

***パスフレーズなしの秘密鍵・公開鍵を作る [#f21deab5]
lsyncdをデーモンで動かして、変化があったら即座に相手側&color(orangered){c105};にファイルを送る、削除する。
そのため、パスワードなしで rsync を行う必要がある。
&color(red){*};&size(10){/homeを扱うのでrootでrsyncを行います};


[[rsync]]でも示しているが、lsyncd を実行する側(&color(magenta){ローカル};)で rootの公開鍵・秘密鍵 を作ります。
既存にある公開鍵・秘密鍵を使ってもいいが、lsyncd のための公開鍵・秘密鍵を作りましょう
#code(nonumber){{
[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 ~]#
}}
この作った 公開鍵「&color(orangered){.ssh/lsyncd_dsa.pub};」の&color(darkmagenta){中身};を&color(orangered){ミラー先};(&color(orangered){c105};)の &color(orange){/root/.ssh/authorized_keys};に追記します。
&color(red){*};&size(10){追記するファイル名(authorized_keys)は、/etc/ssh/sshd_configの AuthorizedKeysFile で定義されています};

#code(nonumber){{
[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'
}}
追記が完了したらパスフレーズなしの秘密鍵・公開鍵のテストを行ってみます。
#code(nonumber){{
[root@c ~]# ssh -i .ssh/lsyncd_dsa root@c105    # -i を設けて秘密鍵を指定します
[root@c105 ~]#
}}
これでパスフレーズなしで行けることを確認した。

***実行 [#ncd045e6]
#code(nonumber){{
[root@c ~]# systemctl enable lsyncd.service
[root@c ~]#
[root@c ~]# systemctl start lsyncd.service
}}
これで起動時に同期が開始され、その後に変化があったら  c105:/home にも反映されます。

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

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

***起動直後にsyncさせず、その後に発生した事案から開始するには [#j3db73cd]
設定ファイルに''init = false'' を入れるとlsyncd起動時に同期は行われない。
また、''delete = false'' を入れると、source側のファイルが削除されてもコピー先は削除されません。

#code(nonumber){{
[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
}}
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS