背景 -
HA目的でNASをDR_NASと同期しようとしています。
残念ながら、合併症があります。
- NASはAlibaba Cloudにあります。まだNAStoNAS同期をサポートしていません。
- 私が知っている最善の方法は、2つのNASの間に同期プロトコルをインストールすることですが、NASに直接接続することはできません。アリババがコントロールします。
- 単一のシステムにインストールし、2つのNAS間でlsyncd / rsyncを試してみました。しかし、それは失敗しました。
- lsyncdの主な著者によると、lsyncdはLinuxカーネルを使用してファイルシステムを監視するInotify Waitを使用しています。ただし、LinuxカーネルはNFSファイルシステムを監視しません。サーバー自体がNASにファイルを書き込む時期はわかりますが、他のシステムがファイルに書き込む時期はわかりません。
- したがって、NASにファイルを書き込むすべてのシステムにlsyncdを設定する必要があります。これは、Inotify Waitが知る唯一の方法だからです。
- 同期が設定されました。システムが(PROD NAS):/ data / A /にファイルを書き込むと、lsyncdはそれを検出してrsyncサーバーに報告します。その後、rsyncサーバーはそのディレクトリ(DR NAS)にファイルを書き込みます。/ data / A /
現在の状態 -
ある日、同期が壊れていることを発見するまで、うまくいくようです。
作成者が同じディレクトリを同期できないようです。
- rsync サーバーは、SystemA が /data/A に書き込み、SystemB が /data/B に書き込むときにもこの操作を実行します。
- SystemAとSystemBが同時に/ data / Cに書き込む場合、同期の1つが中断され、その後は1つのシステムのみが/ data / Cに書き込まれます。
質問
- 複数のlsyncdクライアントがrsyncサーバーと同期し、同じディレクトリを使用できますか?
- 2つのリモートNFSディレクトリを同期するより良い方法はありますか?
答え1
問題は「Inotify Waitを使用するlsyncd」にあります。おそらく/ dataディレクトリレベル(?)で発生します。これにより、ターゲットデータが変更され、lsyncプログラムが起動します。
両方のソースが同時に同じ宛先を更新する場合、その更新が有効であっても更新は信頼できません。文書。同じディレクトリの使用に問題はありません。
inotifyがより細かいレベル(ファイルレベルなど)で指定されている場合、1つのソースのみがファイルに書き込まれている限り(そして他のプログラムがファイルを読み取ることができる)問題はありません。
したがって、1 つの SystemX のみを /data/X に書き込むと、競合は発生しません。
inotify
ただし、両方のSystemXが/ data / SAMEに書き込むと、一部のディレクトリレベルのトリガーイベントが見つからず、lsyncがいくつかの更新を欠落しています。
2つのNASディレクトリを同期する方法に答えるには、システムに関する詳細な知識が必要です。ただし、定期的な同期はrsync
両方のNASシステムに対して(別々に)実行されます。できる動作 - そのディレクトリに重複ファイルがない場合。
答え2
同じディレクトリに書き込むと同期が壊れる理由が見つかりました。
Rsyncの動作:
Rsyncdは、rootユーザーが実行するデーモンプロセスです。ディレクトリ権限は rsyncd.conf で設定されます。構成された UID が宛先ディレクトリの UID と一致しない場合、宛先ディレクトリにすべての権限があっても同期が中断されます。
私の状況:ファイルは、/data/2021/07/20、/data/2021/07/21などの日付ローリングディレクトリに保存されます。
システムは決して同じファイルに書き込まれませんが、同じ「新しい」ディレクトリに書き込まれるように運命づけられています。
たとえば、
lsyncd サーバーの 1 つが「source:/data/2021/07/25/A」で新しいファイルを検出しましたが、「target:/data/2021/07/25/」ディレクトリがまだ存在しない場合、rsyncサーバーはまず "target:/data/2021/07/25" ディレクトリを作成します。root権限の下を押してファイルAをコピーします。 "target:/data/2021/07/25" ディレクトリの権限は、ファイル "A" が完全にコピーされるまでソースの権限と一致しません。ファイルが転送されると、rsync はディレクトリ権限を同期します。
この動作により、同期の切断が発生する可能性があります。ソースAがまだroot権限でディレクトリに書き込んでいる間にソースBが「source:/data/2021/07/25」を検出すると、ソースBとターゲットとの同期が中断されます。
この問題を事前に1日のディレクトリを作成して解決しようとしましたが、今日0バイトのファイルを作成した後、停止後に同期の1つが壊れていました。