読者です 読者をやめる 読者になる 読者になる

masalibの日記

システム開発、運用と猫の写真ブログです

lsyncdをいれてみた

lsyncdというリアルタイムでの同期の
ソフトがあると聞いて
とあるプロジェクトにいれてみた

マスタ → スレブの構成です
双方にすると削除の時にリスクがあるみたいなので
やめました

1・インストール

標準だとリポジトリがないので追加する

rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install lsyncd --enablerepo=epel
yum install rsync

2・設定ファイル作成

フォルダをつくって、ファイルを作成する

mkdir /etc/lsyncd
vim /etc/lsyncd/lsyncd.conf

以下設定内容

settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd-status.log", -- 最新の処理結果が書かれる
    pidfile      = "/var/log/lsyncd/lsyncd.pid",
    maxProcesses = 2,                 -- 同時にsyncを走らせる数
    nodaemon     = false,             -- falseだとdaemonになる。デフォルトはtrue
    insist       = 1,                 -- 起動時に接続に失敗しても再接続を試み続ける
}
sync {
    default.rsync,
    source = "/var/www/Project_st/datas/",             -- 監視対象のディレクトリ。rsyncのSRCに相当
    target = "192.169.1.2:/var/www/Project_st/datas/", -- 同期先のホスト名+ディレクトリ。rsyncのDESTに相当
    exclude={"/logs/","cache"},       -- 監視対象外のディレクトリ(ソースからみたディレクトリを記載する。相対パスになる)
    rsync  = {
        archive   = true,
        links     = true,
        update    = true,
        verbose   = false,
        rsh       = "/usr/bin/ssh -p 22 -i /var/opt/192.169.1.2.sshkey.txt",    -- 接続時に使うsshコマンド。ポートや鍵のファイルはここで指定できる
        _extra  = {
            "--bwlimit=10000"
        }
    }
}
sync {
    default.rsync,
    source = "/var/www/Project_st/public/pf/",             -- 監視対象のディレクトリ。rsyncのSRCに相当
    target = "192.169.1.2:/var/www/Project_st/public/pf/", -- 同期先のホスト名+ディレクトリ。rsyncのDESTに相当
    rsync  = {
        archive   = true,
        links     = true,
        update    = true,
        verbose   = false,
        rsh       = "/usr/bin/ssh -p 22 -i /var/opt/192.169.1.2.sshkey.txt",    -- 接続時に使うsshコマンド。ポートや鍵のファイルはここで指定できる
        _extra  = {
            "--bwlimit=10000"
        }
    }
}
sync {
    default.rsync,
    source = "/var/www/Project/datas/",             -- 監視対象のディレクトリ。rsyncのSRCに相当
    target = "192.169.1.2:/var/www/Project/datas/", -- 同期先のホスト名+ディレクトリ。rsyncのDESTに相当
    exclude={"/logs/","cache"},       -- 監視対象外のディレクトリ(ソースからみたディレクトリを記載する。相対パスになる)
    rsync  = {
        archive   = true,
        links     = true,
        update    = true,
        verbose   = false,
        rsh       = "/usr/bin/ssh -p 22 -i /var/opt/192.169.1.2.sshkey.txt",    -- 接続時に使うsshコマンド。ポートや鍵のファイルはここで指定できる
        _extra  = {
            "--bwlimit=10000"
        }
    }
}
sync {
    default.rsync,
    source = "/var/www/Project/public/pf/",             -- 監視対象のディレクトリ。rsyncのSRCに相当
    target = "192.169.1.2:/var/www/Project/public/pf/", -- 同期先のホスト名+ディレクトリ。rsyncのDESTに相当
    rsync  = {
        archive   = true,
        links     = true,
        update    = true,
        verbose   = false,
        rsh       = "/usr/bin/ssh -p 22 -i /var/opt/192.169.1.2.sshkey.txt",    -- 接続時に使うsshコマンド。ポートや鍵のファイルはここで指定できる
        _extra  = {
            "--bwlimit=10000"
        }
    }
}
--      exclude="/subdir**",        ワイルドカードによる指定も可能
--      exclude="/*/",              サブディレクトリすべて
--      exclude={"*.log", "/*/"},   ファイル名にも指定可能
--除外指定を行なうと logs(ファイル) , /logs/ (ディレクトリ)が除外対象となる。
--つまり /test/logs/ はマッチするので除外対象となるが /logss/ は除外対象にはならない。

-- 同期したいフォルダが複数ある場合はsyncを作っていく

3・起動停止

#デーモンの起動

lsyncd -log scarce /etc/lsyncd/lsyncd.conf

#デーモンを停止する場合

kill -KILL $(cat /var/log/lsyncd/lsyncd.pid)

簡単にできた!!


実際に動かしてみると1秒から2秒ほど
若干タイムラグがあります


4・参考URL

インストールなどで参考にした
http://qiita.com/ftakao2007/items/41c5c0653892d1454c39

双方向同期について参考にしてやめた・・・
https://blog.cloudpack.jp/2015/03/03/use-running-as-delete-parameter-to-sync-bi-directionally-with-using-lsyncd/

sshdが立っていればrsyncdは必要がないっていう所でもっとも参考にした
http://ikm.hatenablog.jp/entry/2013/05/27/140336
excludesの部分に注意!!
excludeが正しいみたい

複数の設定で参考にした
http://www.shift-the-oracle.com/linux/utility/lsyncd-local.html

5・再起動の設定(2016/09/26追記)

上記の設定だと再起動時に同期されません
再起動は以下のファイルを修正する

vi /etc/rc.local

最後の行に下記を追加する
lsyncd -log scarce /etc/lsyncd/lsyncd.conf