Lsyncd が小さなファイルの更新を見逃す

Lsyncd が小さなファイルの更新を見逃す

私たちは、サーバー 1 からサーバー 2 へのデータの同期を保つために lsyncd を試しています。すべて正常に動作しているように見えましたが、ファイルに違いが現れ始めていることが分かりました。

ここでは、ジョブの出力をディスク上のファイルに書き込むプロセスを扱います。これらのジョブは、既存の出力ファイルを削除し、同じ名前で新しいファイルを作成して出力を書き込みます。出力ファイルのサイズは、わずか数バイトから 40G までの範囲になります。

ファイルが更新されるたびにファイル全体を何度も転送するのではなく、出力ファイルへの変更が lsyncd によって取得され、リモート サーバーに転送されてその場で更新されるように、次の構成を考案しました。

しかし、この更新は非常に小さなファイルでは厄介な問題になるようです。たとえば、ファイルの最初の行で日付のみが更新される場合などです。スクリプトはファイルを削除し、ジョブの出力を同じ名前の新しい出力ファイルに配置しますが、処理が非常に速いため、lsyncd はそれに気付かないようです。

これを解決するのを手伝ってくれる人はいますか?

これは現在実行中の設定です。現在、処理するデータの量が多いため、処理速度を少し上げるために 4 つの入力ディレクトリで実行しています。

settings {
   logfile = "/var/log/lsyncd/lsyncd.log",
   statusFile = "/var/log/lsyncd/lsyncd.status",
   statusInterval = 1,
   nodaemon   = false,
   inotifyMode = "CloseWrite or Modify",
   insist = true
}
dirs = {
    '/data/dir1',
    '/data/dir2',
    '/data/dir3',
    '/data/dir4',
}
for _, directory in ipairs( dirs )
do
sync {
        default.rsyncssh,
        source = directory,
        targetdir = directory,
        host = "remote_host",
        delay = 0,
        rsync = {
            compress = false,
            whole_file = false,
            update = true,
            inplace = true,
            checksum = true,
            owner = true,
            archive = true,
            perms = true,
            group = true,
            xattrs = true,
            _extra = { "--append-verify" },
            rsh = "/usr/bin/ssh -q -l lsyncd_ssh_user -i /home/lsyncd_ssh_user/.ssh/id_rsa -o StrictHostKeyChecking=no -o User=lsyncd_ssh_user"
        },
}
end

関連情報