ディスクにファイルを書き込んだ直後に2つ以上のLinuxサーバー間でファイルを同期するために利用できるツールはありますか? rsync
コマンドはこれに適していません。cronでrsync
を設定した場合、設定できる最小時間は1分ですが、リアルタイムで必要なのでです。
私自身は使用していませんが、最近読んだことがあります。 lsyncd
と呼ばれるデーモンがあり、私はあなたが必要としていることを正確に実行していると思います。
それについてもっと読む [〜#〜]ここ[〜#〜]
複数のサーバー間でファイルをリアルタイムで同期するためのlsyncd
という優れたツールがあります。ここでは、2つのサーバーを試してみました。
ホスト:Server1およびServer2
使用OS:CentOS 7
両方のサーバーに以下のパッケージをインストールします。
# yum install -y epel-release
# yum -y install lua lua-devel pkgconfig gcc asciidoc lsyncd
両方のサーバーでssh-keyを生成し、authorized_keys
ファイルに追加します。 [server1の公開鍵をserver2のauthorized_keys
に追加し、server2の公開鍵をserver1のauthorized_keys
ファイルに追加]
/etc/lsyncd.conf
を開き、行の先頭で--
を使用してデフォルト構成をコメント化し、以下の構成をファイルに追加します。
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
delay = 1
}
sync {
default.rsync,
source="/home/test/public_html/",
target="server2:/home/test/public_html/",
rsync = {
compress = true,
acls = true,
verbose = true,
owner = true,
group = true,
perms = true,
rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
}
}
target
パラメータでターゲットIPを変更します。
必要に応じて、delay
パラメータを変更できます。ここでは1秒に設定されています。
次に、ログディレクトリを作成します。
# mkdir -p /var/log/lsyncd
lsyncd
サービスを自動的に開始できるようにします。
# systemctl enable lsyncd.service
サービスを開始します。
# systemctl start lsyncd.service
Server1と同じ構成に従い、target
IPを変更します。
これで同期が設定されました。
tailf /var/log/lsyncd/lsyncd.log
からアクティビティを確認できます
MelBurslanの提案に感謝します。
inotify
へのインターフェースを提供します。
inotifywait
このコマンドは単にinotifyイベントをブロックするため、シェルスクリプトでの使用に適しています。ファイルとディレクトリの任意のセットを監視でき、ディレクトリツリー全体を再帰的に監視できます。
inotifywatch
このコマンドは、ファイルシステムの使用状況の統計を収集し、各inotifyイベントの数を出力します。
Syncthing はオプションの場合があります。それは非常に高速で、転送は暗号化されており、複数のプラットフォーム用のクライアントがあります。 「inotify」を使用して、変更されたファイルを即座に同期します。
クラスタ化されたファイルシステムタイプのソリューションでこれにアプローチする必要があります。2つのマシン間の単純な同期では、リアルタイムの応答は得られません。
「SIOS Protection Suite for Linux」は、AWSでこれを提供できます。