Translog

Luceneへの変更は、Luceneのコミット中にのみディスクに永続化されます。これは比較的高コストな操作であるため、すべてのインデックスまたは削除操作の後に実行することはできません。1回のコミットの後、次のコミットの前に発生した変更は、プロセスの終了またはハードウェアの故障が発生した場合にLuceneによってインデックスから削除されます。

Luceneのコミットは、個々の変更ごとに実行するには高コストすぎるため、各シャードコピーはトランザクションログに操作を書き込みます。これはtranslogとして知られています。すべてのインデックスおよび削除操作は、内部のLuceneインデックスによって処理された後、承認される前にtranslogに書き込まれます。クラッシュが発生した場合、最近承認されたが最後のLuceneコミットにまだ含まれていない操作は、シャードが回復する際にtranslogから回復されます。

Elasticsearchのフラッシュは、Luceneのコミットを実行し、新しいtranslog生成を開始するプロセスです。フラッシュは自動的にバックグラウンドで実行され、translogが大きくなりすぎないようにします。これにより、回復中にその操作を再生するのにかなりの時間がかかることを防ぎます。translogのサイズは、ディスクサイズの1%を超えることはありません。手動でフラッシュを実行する機能もAPIを通じて公開されていますが、これはめったに必要とされません。

Translog settings

translog内のデータは、translogがfsyncされ、コミットされたときにのみディスクに永続化されます。ハードウェアの故障、オペレーティングシステムのクラッシュ、JVMのクラッシュ、またはシャードの故障が発生した場合、前回のtranslogコミット以降に書き込まれたデータは失われます。

デフォルトでは、index.translog.durabilityrequestに設定されており、これはElasticsearchがtranslogがプライマリおよびすべての割り当てられたレプリカで正常にfsyncされ、コミットされた後にのみ、インデックス、削除、更新、またはバルクリクエストの成功をクライアントに報告することを意味します。index.translog.durabilityasyncに設定されている場合、Elasticsearchはfsyncし、translogをindex.translog.sync_intervalごとにのみコミットします。これにより、クラッシュの直前に実行された操作は、ノードが回復する際に失われる可能性があります。

次のdynamically updatableなインデックスごとの設定は、translogの動作を制御します:

  • index.translog.sync_interval
  • translogがディスクにfsyncされ、コミットされる頻度。書き込み操作に関係なく、デフォルトは5sです。100ms未満の値は許可されていません。
  • index.translog.durability
  • 各インデックス、削除、更新、またはバルクリクエストの後にtranslogをfsyncし、コミットするかどうか。この設定は次のパラメータを受け入れます:
    • request
    • (デフォルト) fsyncで、各リクエストの後にコミットします。ハードウェアの故障が発生した場合、すべての承認された書き込みはすでにディスクにコミットされています。
    • async
    • fsyncで、バックグラウンドでsync_intervalごとにコミットします。障害が発生した場合、最後の自動コミット以降のすべての承認された書き込みは破棄されます。
  • index.translog.flush_threshold_size
  • translogは、Luceneに安全に永続化されていないすべての操作を保存します(つまり、Luceneのコミットポイントの一部ではありません)。これらの操作は読み取り可能ですが、シャードが停止し、回復する必要がある場合は再生する必要があります。この設定は、回復にかかる時間を防ぐために、これらの操作の最大合計サイズを制御します。最大サイズに達すると、フラッシュが発生し、新しいLuceneコミットポイントが生成されます。デフォルトは10 GBです。