私は Prometheus をスケーリングする方法を理解しようとしており、そのためのストレージ メカニズムを調べています。
次のように仮定しましょう:
- Prometheus データ ストレージ ディレクトリ: サイズ 20 GB
- スナップショット数: 3
- スナップショットサイズ: 各18GB
質問: シンボリックリンクがない場合、各スナップショットの合計サイズがディレクトリの合計サイズよりも大きくなるのはなぜですか? スナップショットを取得すると、必要なデータがすべて含まれることがどのようにして保証されるのですか?
Prometheus のストレージ メカニズムは、実際のデータではなく参照を保存するものと想定しています。しかし、ここではどのようなシステムが正確に動作しているのか、その背後にあるメカニズムを見つけようとしました。
正しい方向を指し示すことも歓迎します。少なくとも原則は理解したいと思います。
答え1
Prometheusスナップショットの使用難しいv2.1 以降のリンク。これは、OP が観察したファイルシステムの使用動作を説明しています。
スナップショットは、既存のブロックのハード リンクと、現在開いているブロックのダンプから構成されます。ハード リンクが使用されているため、古いブロックのスナップショットはディスク上に 1 つのコピーしか保持されないため、追加のディスク領域を占有しません。ただし、スナップショット、その権限、またはユーザー/グループを変更すると、Prometheus が壊れる可能性があります。完了したら、スナップショット ディレクトリに対して rm -rf を実行できます。スナップショットは最初は追加のディスク領域をほとんど占有しませんが、元のブロックが削除/圧縮されると、スナップショットがそのディスク領域を使用するようになります。
ソース:https://www.robustperception.io/taking-snapshots-of-prometheus-data/