KazuProg's notes

技術メモや備忘録などを自由気ままに書き連ねています

lsyncdで、拠点間同期(バックアップ)をしたい!

作成日: ・ 更新日:

rsyncを使うと、リモートとファイルを同期させることができるが、さらにlsyncdを使うことでリアルタイムに同期させることができる

バックアップもかねてlsyncdを導入したので、そのメモです

必要なパッケージのインストール

rsync は、リモートへの同期をするプログラム

lsyncd は、ローカルのファイルを監視し、変更があれば内部で rsync を実行してリアルタイムに同期させるプログラム

ということで、同期元/同期先双方に rsync 、同期元には lsyncd もインストールする。

$ sudo apt-get install -y rsync lsyncd

SSH接続の準備

rsyncは内部でSSHを使用しているため、SSHで同期先と接続しておく。

この際、パスワード認証ではなく公開鍵認証で接続できるように設定しておく

また、所有者やパーミッション等も同期させたい場合は、 * 同期元: sudo ssh [同期先] で接続できるようにしておく * 同期先:同期に使用するアカウントでsudoが使えるようにしておく

(TODO 公開鍵認証でSSH接続)

lsyncdの設定ファイルを作成する

以下は、私の環境での設定ファイルです。必要に応じて公式ドキュメント( Config Layer 4: Default Config )等を参照して変更してください。

設定ファイル /etc/lsyncd.conf を作成&編集する

settings {
    logfile="/var/log/lsyncd/lsyncd.log",
    statusFile="/var/log/lsyncd/lsyncd.status",
}
sync {
    default.rsyncssh,
    source="/mnt/hdd/data/",
    host="User@Host",
    targetdir="/mnt/hdd/data/",
    delay = 0,
    rsync = {
        rsync_path = "sudo rsync",
        archive = true,
    }
}

設定できる項目は先ほども記述したとおり、公式ドキュメント( Config Layer 4: Default Config )に書いてあるので、各自カスタムしてください!

ファイルの監視数を増やす

同期対象のファイル数が多い場合、デフォルト設定では足りずに以下のようなエラーが出る場合がある。

$ sudo lsyncd ./lsyncd.conf
00:00:00 Normal: --- Startup ---
00:00:01 Error: Terminating since out of inotify watches.
Consider increasing /proc/sys/fs/inotify/max_user_watches

デフォルト設定の確認

$ cat /proc/sys/fs/inotify/max_user_watches
29831

わたしの環境では、デフォルトは29831だった。

同期対象のファイル数を確認する(大体の値)

$ sudo find [同期対象] -type f | wc -l
189443

設定の変更

$ sudo vi /etc/sysctl.conf

以下の部分を変更orなければ追記 ファイル数は先ほど調べたものよりも大きい値にする

fs.inotify.max_user_watches = 819200

設定の反映

$ sudo sysctl -p

lsyncdの起動

lsyncdの引数に、先ほど作成した設定ファイルを指定する

$ sudo lsyncd /etc/lsyncd.conf

最後に

Systemdに登録するとシステム起動時にlsyncdを起動させられるため便利かな?(TODO)

あとは、双方向同期とかも設定してみたいけど、ファイルの競合とかあるとめんどくさそう…(TODO)

参考