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」ディレクトリにある他の例のいくつかを確認してください。