GNU/Linux >> Linux の 問題 >  >> Linux

ディレクトリを同期するためにローカルおよびSSH経由でLsyncdを設定します

この記事では、 Lsyncdの設定方法について説明します。 ローカルとSSHの両方でツールを使用して、ディレクトリの同期を維持します。

Lsyncd Live Syncing Mirror Daemonの略で、Linuxシステムでディレクトリの同期を維持するために使用されるツールです。これらのディレクトリは、ローカル、同じマシン内、またはリモートで異なるマシンにあります。リモート同期の場合、この記事ではSSHを使用して同期を実現することに焦点を当てています。

Lsyncdを使用する利点 これは、ファイルシステムのパフォーマンスに影響を与えない無料で軽量のソリューションであるということです。ファイルの変更を定期的に監視してから、rsyncを使用します 同期を実行します。

要件

Lsyncdの場合 正しく動作するには、rsyncが必要です インストールされています。

注: 次のコマンドをsudoとして実行することをお勧めします

rsyncをインストールするには CentOS、Fedora、またはRed Hatシステムでは以下を使用します:

yum install rsync

UbuntuまたはDebianシステムの場合:

apt-get update
apt-get install rsync

Lsyncdをインストール

lsyncdをインストールするには CentOS、Fedora、またはRed Hatシステムでは、lsyncdをインストールする前にEPELリポジトリを有効にする必要があります。 。インストールを実行するには、次のコマンドを使用します。

yum install epel-release
yum install lsyncd

UbuntuまたはDebianシステムの場合、lsyncd ツールはデフォルトのリポジトリに含まれているため、インストールには次のコマンドで十分です。

sudo apt-get update
sudo apt-get install lsyncd

インストールが成功したことを確認し、インストールされたバージョンを確認するには、次のコマンドを使用します。

lsyncd -version

Lsyncd構成ファイル

Lsyncdのデフォルトの構成ファイルは、/etc/lsyncd.confに自動的に作成されます。 インストールが完了したとき。

このファイルには、ローカルまたはリモートでディレクトリ間の同期を実行するために使用されるすべてのパラメータが含まれています。

たとえば、構成ファイルは、/usr/share/doc/lsyncd*/examples/の内容を確認できます。 (*はインストールされているLsyncdバージョンを示します。)

cd /usr/share/doc/lsyncd-2.2.2/examples/
ls -lh
total 40
-rw-r--r--. 1 root root 715 Feb 16 2017 lalarm.lua
-rw-r--r--. 1 root root 1055 Feb 16 2017 lbash.lua
-rw-r--r--. 1 root root 534 Feb 16 2017 lecho.lua
-rw-r--r--. 1 root root 3376 Feb 16 2017 lftp.lua
-rw-r--r--. 1 root root 2278 Feb 16 2017 lgforce.lua
-rw-r--r--. 1 root root 2737 Feb 16 2017 limagemagic.lua
-rw-r--r--. 1 root root 2770 Feb 16 2017 lpostcmd.lua
-rw-r--r--. 1 root root 211 Feb 16 2017 lrsync.lua
-rw-r--r--. 1 root root 204 Feb 16 2017 lrsyncssh.lua
-rw-r--r--. 1 root root 4047 Feb 16 2017 lsayirc.lua

この記事の目的上、有用な例となる構成ファイルはlrsync.luaです。 ローカル同期の場合、およびlrsyncssh.lua リモート同期用。

構成ファイルの構造は次のとおりです。

cat /usr/share/doc/lsyncd-2.2.2/examples/lrsync.lua
[...]
-- User configuration file for lsyncd.
-- Simple example for default rsync.
settings {
    statusFile = "/tmp/lsyncd.stat",
    statusInterval = 1,
}

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

前述のように、Lscyndはrsyncを使用します 同期を実行するためのツールなので、rsyncを使用できます rsyncを追加してプロセスをパーソナライズするためのフラグ syncへのパラメータ ステートメント:

[...]
sync {
    default.rsync,
    source="src",
    target="trg",
    rsync = {
        archive = false,
        compress = true,
        links = false,
        owner = false,
        perms = false,
        verbose = true
    }
}
[...]

また、変更が行われたかどうかを確認する前に、Lsyncdがデフォルトの20秒間イベントを集約することを考慮することが重要です。この時間は、delayを使用して変更できます syncのパラメータ 構成ファイルのセクション:

sync {
    default.rsync,
    source = "src",
    target = "trg",
    delay = 5,
}
ローカルディレクトリを同期する

ローカルディレクトリ/path/source_dirの内容を同期するには ローカルディレクトリ/path/destination_dir 構成ファイルにいくつかの変更を加える必要があります。オプションの手順ですが、タスクの進行状況を追跡するためにログファイルとステータスファイルを作成することをお勧めします。

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

次のステップは、/etc/lsyncd.confの構成ファイルを変更することです。 ソースディレクトリとターゲットディレクトリ、および作成されている場合はログファイルとステータスファイルの場所を指定します。構成は次のようになります。

-- User configuration file for lsyncd.
-- Simple example for default rsync, but executing moves through on the target.
-- For more examples, see /usr/share/doc/lsyncd*/examples/
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
    default.rsync,
    source = "/path/source_dir",
    target = "/path/destination_dir"
}

この新しい構成をアクティブ化するには、次のコマンドでサービスを開始します。

systemctl start lsyncd

上記の手順に従った後、Lsyncdは/path/source_dirからコンテンツの同期を開始します /path/destination_dirへ 。

警告 :宛先ディレクトリが他のLsyncdによって変更されないことが確実な場合にのみ、起動時にLsyncdを開始できるようにするのが安全です。それ以外の場合は、起動時にLsyncdを有効にせず、MOTDにLsyncdがインストールされて使用されていることを示す行が含まれていることを確認してください。例:

再起動時に、次の手順を実行します。

「リモート/サーバー」の状況にあるかどうかをrsyncで確認します:

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Lsyncdを次のコマンドで開始します:

systemctl start lsyncd.service

複数のローカルディレクトリを同期する必要がありますか?

複数のディレクトリペアを同期するために、syncを追加することができます。 構成ファイルのステートメント:

[...]
sync{
default.rsync,
    source = "/path/source_1",
    target = "/path/target_1"
}

sync{
    default.rsync,
    source = "/path/source_2",
    target = "/path/target_2"
}
[...]
SSHを介してリモートディレクトリを同期する

Lsyncdを使用してリモート同期を実行するには、ソースサーバーがターゲットサーバーへのパスワードなしのSSHアクセスを持っている必要があります。これは、ソースでSSHキーを作成することによって行われます。 サーバー。

SSHパスワードなしアクセス用のキーを生成します

ソースサーバーで次のコマンドを使用します キーを生成するには:

ssh-keygen -t rsa

キーを保存するファイルを入力するように求められます。特別な構成がない限り、デフォルトの場所を使用するには空のままにしておきます。この後、別のプロンプトでパスフレーズを要求されます。完全なパスワードなしのログインが必要なため、これは空のままにしておきます。

キーが生成されたので、キーを宛先にコピーします サーバ。これをauthorized_keysにコピーするには 宛先サーバーのファイルについては、ソースで次の手順を使用してください キーが生成されたサーバー:

sudo su
ssh-copy-id DESTINATION_SERVER_IP

パスワードなしの接続が完了したことをテストするには、宛先にログインします ソースからのサーバー 1つ:

ssh DESTINATION_SERVER_IP

パスワードの入力を求められずにログに記録できる場合、プロセスは成功しています。

ログインしたので、宛先フォルダとして機能するディレクトリをリモートホストに作成し、SSHセッションを終了します。

mkdir /path/remote_destination_dir
exit
exit
構成ファイルを編集する

構成ファイルの構造は、ローカルディレクトリの同期のセクションで説明したとおりですが、syncにいくつかの変更が加えられます。 ステートメント:

  • default.rsync プロパティはdefault.rsyncsshに変更されます rsyncを有効にするには SSH経由のツール。
  • target プロパティは、リモート宛先を指定するために2つのプロパティに置き換えられます:host およびtargetdir

構成ファイルは次のようになります:

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

servers = {
 "REMOTE_IP"
}
sourceList =
{
        "PATH_TO_FOLDER_TO_BE_SYNCED",
}
for _, source in ipairs( sourceList ) do
        for _, server in ipairs(servers) do

sync {
    default.rsyncssh,
    source = "/path/source_dir",
    host = "DESTINATION_SERVER_IP",
    targetdir = "/path/remote_destination_dir"
}
[...]

構成ファイルに変更が加えられたら、上記の説明に従ってサービスを開始します。

systemctl start lsyncd

Lsyncdサービスがすでに実行されている場合は、再起動するだけです:

sudo service lsyncd restart

警告: 宛先ディレクトリが他のLsyncdによって変更されないことが確実な場合にのみ、起動時にLsyncdを開始できるようにするのが安全です。それ以外の場合は、起動時にLsyncdを有効にせず、MOTDにLsyncdがインストールされて使用されていることを示す行が含まれていることを確認してください。例:

再起動時に、次の手順を実行します。

「リモート/サーバー」の状況にあるかどうかをrsyncで確認する

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Lsyncdを開始する

systemctl start lsyncd.service

Lsyncdからのディレクトリの除外

特定のディレクトリで選択したフォルダを除外する必要がある場合があります。例:

  • NFSでマウントされたメディアファイル。
  • ログファイル。同期すると、ログファイルによって不要なチャタリングと帯域幅の使用が多く発生します。場合によっては、これにより同期が大幅に遅れる可能性があります。
  • 実行中のプロセスによって使用される一時ファイル。

フォルダを除外するには、除外されたフォルダの相対パスを入力するだけです。例:

  • / var / www スレーブに同期される宛先ディレクトリです
  • /var/www/vhosts/www.example.com/wp-content/uploads NFSサーバーからマウントされたディレクトリ、または同期したくないディレクトリです。
  • lsyncd構成で除外を作成します。 CentOS6でLsyncd2.1.5を使用していると仮定すると、最初に、以下の「excludeFrom行」の横に示すように、Lsyncdの構成内にexcludesファイルが配置されていることを確認します。
vim /etc/lsyncd/lsyncd.conf
[...]
sync {
    default.rsyncssh,
    source="/var/www/",
    host=server,
    targetdir="/var/www/",
    excludeFrom="/etc/lsyncd-excludes.txt",
    rsync = {

次に、同期用に指定されたソースディレクトリからの相対パスを除外します。ターゲットディレクトリは/var/ wwwであり、除外するディレクトリは/var/www/vhosts/www.example.com/wp-content/uploadsであるため、エントリは次のようになります。

cat /etc/lsyncd-excludes.txt
vhosts/www.example.com/wp-content/uploads

注意:excludesファイルに空の行が含まれていないことを確認してください。含まれている場合、lsyncdはこれを「exclude /」として扱い、すべてが除外されます。

NFSソリューションでのLsyncd

Lsyncdは通常、マスタースレーブアーキテクチャでファイルを複製するために使用されます。これはコンテンツ/コードの更新を処理するのに最適ですが、ユーザーが投稿したファイルやメディアファイルの場合は、NFSを使用してさまざまなWebサーバー間でフォルダーを共有する方が簡単な場合がよくあります。 NFSを介して共有されるフォルダーをLsyncdから除外するように十分注意してください。マスターサーバーが再起動されてもNFS共有のマウントに失敗するという最悪のシナリオでは、LsyncdがNFS共有のコンテンツを消去する可能性があります。

これを処理する方法はいくつかあります。

オプション1:Lsyncdからディレクトリを除外する

詳細については、「Lsyncdからのディレクトリの除外」のセクションを参照してください

デフォルトでは、Rsyncはシンボリックリンクのターゲットでは機能しません。これを使用して、NFSにマウントされたコンテンツを保護できます。

代わりに:

/ var / www <–Lsyncdレプリケーションのルートフォルダ/ uploads <–NFS共有マウントポイント

NFS共有を別のフォルダー(たとえば/ nfsmount)にマウントしてから、次の手順を実行します(アップロードコンテンツがすでに/ nfsmount / uploadsにコピーされていると仮定します):

cd /var/www
rm -Rf uploads
ln -s /nfsmount/uploads uploads

これで、NFSにマウントされたコンテンツは、Lsyncdで複製されたディレクトリツリーの外部に安全に配置されます。

オプション3:rsyncパラメーターを設定する

Rsyncは、ファイルシステムの境界を越えないようにrsyncに指示する-xオプションをサポートしています。ただし、先に進む前に、これを試す前に知っておく必要のある注意事項がいくつかあります。

  • これは、Cloud Block Storageボリューム、追加のLVMボリュームなどでは機能しません。
  • LsyncdがNFSサーバーと同じサーバー上にある場合、これは機能しません。このオプションは、専用のNFSサーバーがあることを前提としています
  • これは、ソースが単一のファイルシステムである場合にのみ機能します

Lsyncd 2.0.xの場合:/etc/lsyncd.luaのrsyncOpts行を編集して、Lsyncdがrsyncに渡すオプションにこのオプションを追加します:

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsyncOpts="-avzx"
}

Lsyncd 2.1.xの場合:Lsyncd 2.1.xでは、rsyncOptsがrsync ={options}に変更され、以前のように単なる文字ではなく、フルネームのオプションが使用されています。以下を/etc/lsyncd.confに追加します:

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsync={ one_file_system=true }
 }
結論

Lsyncdを使用してローカルフォルダーとリモートフォルダーの同期を維持することは、経済的で効率的な代替手段であり、構成ファイルで使用できる複数のオプションのおかげで、ニーズに合わせてパーソナライズできます。

関連記事
  • rsyncを使用してファイルを同期する

コメントや質問をするには、[フィードバック]タブを使用します。私たちと会話を始めることもできます。


Linux
  1. SSHトンネリングを設定する方法

  2. サーバーへの SSH 経由の直接ルート ログインとユーザー アクセスを無効にする

  3. ssh 経由でディレクトリを比較する方法

  1. Linuxでタイムゾーンを設定してサーバー時間をNTPと同期する方法

  2. Linuxでローカルディレクトリとリモートディレクトリを同期する方法

  3. RSA キーを使用してパスワードなしの ssh をセットアップする方法

  1. SSH経由でファイルをダウンロードおよびアップロードする方法

  2. SSHキーを設定する方法

  3. Ubuntu20.04にsftpサーバーをインストールしてセットアップする方法