lsyncdとは何ですか?

Webサーバーまたはアプリケーションを管理する場合、ディレクトリ間の同期が必要な多くの状況があります。 多くのツールがこれを達成するのに役立ちますが、lsyncdは有力な候補です。

この記事では、単一のマシン上のディレクトリ間で変更をミラーリングするようにlsyncdを構成する方法と、リモートホスト間でミラーリングする方法について説明します。

このガイドでは、Ubuntu 12.04 VPSを使用しますが、最新のディストリビューションでも同様に機能するはずです。

lsyncdをインストールする方法

幸い、Ubuntuのデフォルトのリポジトリにはlsyncdが含まれています。

次のコマンドを使用してlsyncdをインストールできます。

sudo apt-get update
sudo apt-get install lsyncd

これによりlsyncがインストールされますが、デフォルトの構成は提供されません。 記事の後半で作成します。

lsyncd構成例を見つける方法

lsyncdはデフォルトで構成ファイルを提供しませんが、アイデアを得るために見ることができるいくつかの例が含まれています。

「/usr/ share / doc / lsyncd / examples」ディレクトリにあるファイルをチェックして、例を参照してください。

cd /usr/share/doc/lsyncd/examples
ls
lbash.lua  lgforce.lua      lpostcmd.lua  lrsyncssh.lua
lecho.lua  limagemagic.lua  lrsync.lua

これらのテキストファイルを見て、構成で何ができるかを理解することができます。

「lrsync.lua」ファイルを開くと、より基本的な構成の1つを確認できます。

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

sync{
        default.rsync,
        source="src",
        target="trg",
}

2つのダッシュ(-)で始まる行はコメントです。 それらはlsyncdによって解釈されません。

lsync構成ファイルはLuaプログラミング言語で書かれています。 ここでLuaの詳細を学ぶことができます。

環境の設定

最初の例では、2つのローカルディレクトリを同期します。 次のコマンドで作成してみましょう。

sudo mkdir -p /source/to/copy
sudo mkdir /dest

次に、同期が正しく機能しているかどうかを確認できるように、最初のディレクトリにいくつかのファイルを追加します。

cd /source/to/copy
sudo touch file{1..100}

上記のコマンドは、「/ source / to/copy」ディレクトリに100個のファイルを作成します。

さらに、lsyncdが使用するログディレクトリといくつかのファイルを作成できます。

sudo mkdir /var/log/lsyncd
touch /var/log/lsyncd/lsyncd.{log,status}

次に、lsyncd構成ディレクトリを作成できます。

sudo mkdir /etc/lsyncd

このディレクトリ内に「lsyncd.conf.lua」という設定ファイルをnanoで作成します。

sudo nano /etc/lsyncd/lsyncd.conf.lua

2つのローカルフォルダをlsyncdと同期する方法

作成する構成ファイルは、「/ source / to/copy」ディレクトリを「/dest」ディレクトリに同期します。

グローバルセクションの構成

一般的な設定はすべて「設定」と呼ばれるセクションで構成されます。 このセクションには、いくつかの基本設定が含まれます。

settings = {
	logfile = "/var/log/lsyncd/lsyncd.log",
	statusFile = "/var/log/lsyncd/lsyncd.status"
}

これらのオプションは、以前に作成したファイルを使用するようにlsyncdに指示します。

同期セクションの構成

次のセクションでは、同期操作を実行する方法を指定します。 これはローカル転送であるため、通常のrsyncを使用して転送を完了します。

この構成は、「default.rsync」オプションによって定義されます。 この構成は、lsyncdが20秒待機するか、1000の個別の同期イベントを収集してから、必要な変更を加えてrsyncを呼び出すことを意味します。

lsyncdのマニュアルによると、呼び出されるrsyncインスタンスは次のコマンドと同等です。

rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET

これは、rsyncが次のように動作することを意味します。

  • -l :シンボリックリンクをコピーします
  • -t :コピー変更時間
  • -s :スペース分割なし。 ワイルドカード文字のみ
  • -d :再帰せずにディレクトリを転送する

これらの変更を実装するために必要なのは、同期の種類とソースディレクトリおよびターゲットディレクトリを指定することだけです。 同期セクションは次のようになります。

sync {
	default.rsync,
	source = "/source/to/copy",
	target = "/dest"
}

rsyncにオプションを追加してその動作を変更する場合は、「rsyncOpts」変数に、それぞれがrsyncオプションを表すコンマ区切りの文字列を含む配列を渡すことで追加できます。

sync {
	default.rsync,
	source = "/source/to/copy",
	target = "/dest",
	rsyncOpts = {"rsync option1", "rsync option2", "rsync option3"}
}

これで、セットアップをテストするのに十分な構成ができました。 ファイルを保存して閉じます。

ローカル同期のテスト

ターゲットディレクトリに移動して、この時点で「/dest」ディレクトリにファイルがないことを確認しましょう。

cd /dest
ls

「/dest」ディレクトリは空である必要があるため、最後のコマンドは出力を返さないはずです。

次のコマンドを発行して、lsyncdサービスを開始できます。

sudo service lsyncd start

lsを使用してディレクトリを再度確認します。

ls
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

すべてのファイルが即座に同期されていることがわかります。

ソースディレクトリにいくつかのファイルを追加すると、「default.rsync」について説明したときに述べた20秒の遅延が発生します。

sudo mkdir /source/to/copy/hello{1..100}
ls

最初はファイルが表示されませんが、タイムアウトに達すると、rsyncはファイルを同期します。 「ls」コマンドを再発行して、再度確認してください。

lsyncdを使用してリモート同期を構成する方法

構成ファイルにいくつかの変更を加えるだけで、リモート同期を構成できます。

まず、パスワードなしのsshを使用して、元のマシンからミラーリングマシンにサインインできる必要があります。

SSHキーを使用してリモートマシンにログインする方法

まだ行っていない場合は、このガイドに従って、lsyncdを使用してマシン上にsshキーを生成します。

lsyncdサービスはrootとして実行されるため、rootユーザーのキーペアを作成します。 次に、次のコマンドを使用して、キーファイルをリモートミラーマシンにコピーできます。

sudo su
ssh-copy-id remote_mirror_ip_address

これで、キーファイルにより、rootユーザーとしてリモートミラーリングサーバーにログインできるようになります。

今すぐ試して、動作することをテストし、リモートホストに宛先ディレクトリを作成してください。

ssh remote_mirror_ip_address

ターゲットディレクトリとして機能する「/remotesync」というディレクトリを作成します。

mkdir /remotesync

「exit」を2回入力して、リモートセッションとローカルルートセッションを終了します。

exit
exit

リモートでミラーリングするようにlsyncdを構成する方法

次のコマンドを使用して、lsyncd構成ファイルを再度開くことができます。

sudo nano /etc/lsyncd/lsyncd.conf.lua
settings = {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
        default.rsync,
        source = "/source/to/copy",
        target = "/dest"
}

「同期」セクション内でのみ変更を加える必要があります。

「default.rsync」を「default.rsyncssh」に変更して、sshを介したrsyncを有効にし、「target」変数を「host」変数と「targetdir」変数に置き換えます。

settings = {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
        default.rsyncssh,
        source = "/source/to/copy",
        host = "remote_mirror_ip_address",
        targetdir = "/remotesync"
}

ファイルを保存して終了します。

リモート同期のテスト

これで、次のコマンドを発行してlsyncdサービスを再起動できます。

sudo service lsyncd restart

リモートミラーにSSHで接続すると、リモートの「/remotesync」ディレクトリで変更を確認できるはずです。

sudo su
ssh remote_mirror_ip_address
ls /remotesync

ローカルの「/source/ to/copy」ディレクトリに追加したすべてのファイルが表示されます。

さらに進んで

lsyncdサービスは、ディレクトリまたはシステム間でファイルを同期するための優れた方法です。 Luaベースの構成ファイルにより、非常に強力で柔軟性があります。 Luaドキュメント(以前にリンクされた)と lsyncドキュメントは、より複雑な同期操作を開発できる優れたリソースです。

その他のアイデアについては、「/ usr / share / doc / lsyncd/examples」ディレクトリにある他の例のいくつかを確認してください。

ジャスティン・エリングウッド