rsyncといえば、ファイルをバックアップする上でよく利用されるコマンドだ。
それにファイルの更新を認識するカーネルの機能であるinotifyを組み合わせ、ファイルが更新されると同時にバックアップを行う事が出来るのが、今回紹介する『lsyncd』だ。

今回は、CentOS 7にこの『lsyncd』をインストール、実際に使ってみる事にする。
なお、バックアップ先のサーバでは事前にrsyncをデーモンで起動できる環境が必要だが、こちらを参考に構築済とする。

1.『lsyncd』のインストール

まずは、『lsyncd』をインストールする。
コンパイルを行う際に必要となるパッケージを以下のコマンドでインストール。

yum -y install libxml2-devel lua lua-devel lua-static pkgconfig gcc asciidoc

次に、lsyncdのコンパイルを行う際に必要となる環境変数を設定する。

export LUA_CFLAGS='-I/usr/include -lm -ldl'
export LUA_LIBS='/usr/lib64/liblua.a'

下準備が完了したら、lsyncdをダウンロードしコンパイル、インストールする。

wget http://lsyncd.googlecode.com/files/lsyncd-2.1.5.tar.gz
tar xzvf lsyncd-2.1.5.tar.gz
cd lsyncd-2.1.5
./configure && make && make install

これで、lsyncdがインストールできた。
ただ、今のままだと設定ファイルが存在しないので、exampleフォルダ配下にあるテンプレートからコピーしてくる。

cp examples/lrsync.lua /etc/lsyncd.conf

2.lsyncd.confの設定

さて、先ほどテンプレートファイルからコピーしてきた設定ファイル『lsyncd.conf』を編集してみよう。
以下のように編集する。

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

sync{
        default.rsync,
        source="バックアップ元ディレクトリ",
        target="バックアップ先サーバ::バックアップモジュール名",
}

特に注意したいのが、「setting = {」となっている所を、「setting {」と書き換える所。
このままで起動させると、lsyncdは以下のようなエラーが表示されて正常に動作しない。

Warn: settings = { ... } is deprecated.
      please use settings{ ... } (without the equal sign)

設定ファイル設置後、systemdでサービスを管理させるためのファイルを設置する。

/usr/lib/systemd/system/lsyncd.service

[Unit]
Description=Live Syncing (Mirror) Daemon
After=network.target

[Service]
Type=simple
Nice=19
EnvironmentFile=-/etc/sysconfig/lsyncd
ExecStart=/usr/bin/sh -c 'eval `/usr/local/bin/lsyncd -nodaemon /etc/lsyncd.conf`'

[Install]
WantedBy=multi-user.target

3.実行

さて、それでは実際にサービスを開始し、自動起動設定をしてみよう。

systemctl start lsyncd
systemctl enable lsyncd

これで、バックアップ元ディレクトリで作成、編集されたファイルは自動的にバックアップ先サーバに同期されるようになった。