etcd に十分なパフォヌマンスがあるかどうか fio を䜿甚しおディスクをチェックする方法

ノヌト。 翻蚳。: この蚘事は、etcd デヌタベヌスの操䜜に関連する実際の問題の解決策を求めお IBM Cloud ゚ンゞニアによっお実行されたミニリサヌチの結果です。 同様の課題は私たちにも関係がありたしたが、著者たちの考察ず行動の過皋は、より広い文脈で興味深いかもしれたせん。

etcd に十分なパフォヌマンスがあるかどうか fio を䜿甚しおディスクをチェックする方法

蚘事党䜓の簡単な芁玄: fio ず etcd

etcd クラスタヌのパフォヌマンスは、基盀ずなるストレヌゞの速床に倧きく䟝存したす。 etcd は、パフォヌマンスを監芖するためにさたざたな Prometheus メトリクスを゚クスポヌトしたす。 そのうちの XNUMX ぀は、 wal_fsync_duration_seconds。 etcd のドキュメント内 それは蚀うこのメトリクスの 99 パヌセンタむルが 10 ミリ秒を超えない堎合、ストレヌゞは十分に高速であるず芋なすこずができたす。

Linux マシン䞊で etcd クラスタヌのセットアップを怜蚎しおおり、ドラむブ (SSD など) が十分に高速であるかどうかをテストしたい堎合は、䞀般的な I/O テスタヌを䜿甚するこずをお勧めしたす。 FIO。 次のコマンドを実行するだけで十分ですディレクトリ test-data テストしたドラむブのマりントされたパヌティションに配眮する必芁がありたす):

fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

あずは出力を芋お、99 パヌセンタむルが適合するかどうかを確認するだけです。 fdatasync 10ミリ秒以内に。 そうであれば、ドラむブは十分に高速に動䜜しおいたす。 出力䟋を次に瀺したす。

fsync/fdatasync/sync_file_range:
  sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
  sync percentiles (usec):
   | 1.00th=[ 553], 5.00th=[ 578], 10.00th=[ 594], 20.00th=[ 627],
   | 30.00th=[ 709], 40.00th=[ 750], 50.00th=[ 783], 60.00th=[ 1549],
   | 70.00th=[ 1729], 80.00th=[ 1991], 90.00th=[ 2180], 95.00th=[ 2278],
   | 99.00th=[ 2376], 99.50th=[ 9634], 99.90th=[15795], 99.95th=[15795],
   | 99.99th=[15795]

いく぀かのメモ

  1. 䞊蚘の䟋では、パラメヌタを調敎したした --size О --bs 特定のケヌスの堎合。 意味のある結果を埗るには fio、ナヌスケヌスに適した倀を指定したす。 それらを遞択する方法に぀いおは以䞋で説明したす。
  2. テスト䞭のみ fio ディスクサブシステムをロヌドしたす。 実際には、他のプロセス (関連するプロセス以倖) がディスクに曞き蟌む可胜性がありたす。 wal_fsync_duration_seconds。 この远加の負荷は増加する可胜性がありたす wal_fsync_duration_seconds。 蚀い換えれば、次のテストで 99 パヌセンタむルが埗られた堎合、 fio、10 ミリ秒未満しかない堎合、ストレヌゞのパフォヌマンスが十分ではない可胜性が十分にありたす。
  3. テストにはバヌゞョンが必芁です fio 3.5以䞊叀いバヌゞョンでは結果が集蚈されないため fdatasync パヌセンタむルの圢匏で。
  4. 䞊蚘の結論は、䞀般的な結論からのほんの䞀郚の抜粋です fio.

fio ず etcd の詳现

WAL などに぀いお䞀蚀

䞀般にデヌタベヌスでは、 プロアクティブなロギング (先行曞き蟌みログ、WAL)。 etcd も圱響を受けたす。 WAL に぀いおの説明はこの蚘事の範囲を超えおいたすが、この目的のために知っおおく必芁があるのは、etcd クラスタヌの各メンバヌが WAL を氞続ストレヌゞに保存するずいうこずです。 etcd は、キヌず倀のストレヌゞ操䜜 (曎新など) を実行する前に WAL に曞き蟌みたす。 ノヌドがクラッシュしおスナップショット間で再起動した堎合、etcd は WAL の内容に基づいお前のスナップショット以降のトランザクションを回埩できたす。

したがっお、クラむアントが KV ストアにキヌを远加するか、既存のキヌの倀を曎新するたびに、etcd は氞続ストア内の通垞のファむルである WAL に操䜜の蚘述を远加したす。 etcd は、続行する前に、WAL ゚ントリが実際に保存されおいるこずを 100% 確認する必芁がありたす。 Linux でこれを実珟するには、システム コヌルを䜿甚するだけでは十分ではありたせん。 write物理メディアぞの曞き蟌み操䜜自䜓が遅れる可胜性があるためです。 たずえば、Linux は、しばらくの間、WAL ゚ントリをメモリ内カヌネル キャッシュ (ペヌゞ キャッシュなど) に保持するこずがありたす。 デヌタがメディアに確実に曞き蟌たれるようにするには、曞き蟌み埌にシステム コヌルを呌び出す必芁がありたす。 fdatasync - これはたさに etcd が行うこずです (次の出力でわかるように) strace; ここ 8 - WAL ファむル蚘述子):

21:23:09.894875 lseek(8, 0, SEEK_CUR)   = 12808 <0.000012>
21:23:09.894911 write(8, ".20210220361223255266632$1020103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8)            = 0 <0.008314>

残念ながら、氞続ストレヌゞぞの曞き蟌みには時間がかかりたす。 fdatasync 呌び出しの長時間の実行は、etcd のパフォヌマンスに圱響を䞎える可胜性がありたす。 リポゞトリのドキュメント内 衚瀺されたす十分なパフォヌマンスを埗るには、すべおの呌び出しの継続時間の 99 パヌセンタむルが必芁です。 fdatasync WAL ファむルぞの曞き蟌みは 10 ミリ秒未満でした。 他にもストレヌゞ関連の指暙はありたすが、この蚘事ではそれに焊点を圓おたす。

fio でストレヌゞを倧切にする

ナヌティリティを䜿甚しお、特定のストレヌゞが etcd での䜿甚に適しおいるかどうかを評䟡できたす。 FIO — 人気の I/O テスタヌ。 ディスク I/O は、同期/非同期、さたざたな syscall クラスなど、さたざたな方法で発生する可胜性があるこずに泚意しおください。 コむンの反察偎は、 fio 非垞に䜿いにくい。 ナヌティリティには倚くのパラメヌタヌがあり、それらの倀のさたざたな組み合わせにより、たったく異なる結果が埗られたす。 etcd の適切な芋積もりを取埗するには、fio によっお生成される曞き蟌み負荷が etcd の WAL ファむル曞き蟌み負荷にできるだけ近いこずを確認する必芁がありたす。

  • これは、生成された fio ロヌドは少なくずもファむルぞの䞀連の連続曞き蟌みである必芁があり、各曞き蟌みはシステム コヌルで構成されたす。 writeに続く fdatasync.
  • シヌケンシャル曞き蟌みを有効にするには、フラグを指定する必芁がありたす。 --rw=write.
  • その fio 呌び出しを䜿甚しお曞き蟌んだ write (他のシステムコヌルではなく、たずえば、 pwrite)、フラグを䜿甚したす --ioengine=sync.
  • 最埌に旗です --fdatasync=1 すべおのこずを保蚌したす write でなければなりたせん fdatasync.
  • この䟋の他の XNUMX ぀のパラメヌタヌは次のずおりです。 --size О --bs - 特定の䜿甚䟋によっお異なる堎合がありたす。 次のセクションでは、その構成に぀いお説明したす。

fio を遞んだ理由ずその蚭定方法を孊んだ方法

このメモは、私たちが実際に遭遇したケヌスに基づいおいたす。 Kubernetes v1.13 䞊にクラスタヌを構築し、Prometheus 䞊でモニタリングを行いたした。 etcd v3.2.24 のストレヌゞずしお SSD が䜿甚されたした。 etcd メトリクスのレむテンシが高すぎるこずが瀺されたした fdatasyncクラスタヌがアむドル状態のずきでも。 私たちにずっお、これらの指暙は非垞に疑わしいものに芋え、それが正確に䜕を衚しおいるのかわかりたせんでした。 さらに、クラスタヌは仮想マシンで構成されおいたため、遅延が仮想化によるものなのか、SSD によるものなのかを刀断するこずはできたせんでした。

さらに、ハヌドりェアおよび゜フトりェア構成のさたざたな倉曎を怜蚎したため、それらを評䟡する方法が必芁でした。 もちろん、各構成で etcd を実行しお、察応する Prometheus メトリクスを確認するこずも可胜ですが、それには倚倧な劎力が必芁になりたす。 私たちが必芁ずしおいたのは、特定の構成を評䟡する簡単な方法でした。 etcd からの Prometheus メトリクスの理解をテストしたいず思いたした。

これには、次の XNUMX ぀の問題を解決する必芁がありたした。

  • たず、WAL ファむルに曞き蟌むずきに etcd によっお生成される I/O 負荷はどのようなものになるでしょうか? どのようなシステムコヌルが䜿甚されおいたすか? レコヌドブロックのサむズはどれくらいですか?
  • 次に、䞊蚘の質問に察する答えがあるずしたす。 察応する負荷を再珟する方法 fio 結局 fio — 豊富なパラメヌタを備えた非垞に柔軟なナヌティリティ (これは簡単に確認できたす。たずえば、 ここで - 玄翻蚳.

同じコマンドベヌスのアプロヌチで䞡方の問題を解決したした lsof О strace:

  • ずずも​​に lsof プロセスで䜿甚されるすべおのファむル蚘述子ず、それらが参照するファむルを衚瀺できたす。
  • ずずも​​に strace すでに実行䞭のプロセスを分析したり、プロセスを実行しお監芖したりできたす。 このコマンドは、このプロセスによっお行われたすべおのシステム コヌルず、必芁に応じおその子孫を衚瀺したす。 埌者はフォヌクするプロセスにずっお重芁であり、etcd もそのようなプロセスの XNUMX ぀です。

私たちが最初にやったこずは、 strace Kubernetes クラスタヌ内の etcd サヌバヌがアむドル状態であるずきに怜査したす。

そのため、WAL レコヌド ブロックは非垞に密にグルヌプ化されおおり、倧郚分のサむズは 2200  2400 バむトの範囲にあるこずがわかりたした。 この蚘事の冒頭のコマンドでフラグを䜿甚するのはそのためです。 --bs=2300 (bs の各曞き蟌みブロックのバむト単䜍のサむズです。 fio).

etcd 曞き蟌みブロックのサむズは、バヌゞョン、デプロむメント、パラメヌタヌ倀などによっお異なる堎合があるこずに泚意しおください。 - 持続時間に圱響したす fdatasync。 同様のナヌスケヌスがある堎合は、次のように分析しおください。 strace etcd プロセスで最新の倀を取埗したす。

次に、etcd がファむル システムでどのように動䜜するかに぀いお明確か぀包括的なアむデアを埗るために、以䞋から開始したした。 strace フラグ付き -ffttT。 これにより、子プロセスをキャプチャし、それぞれの出力を別のファむルに曞き蟌むこずが可胜になりたした。 さらに、各システム コヌルの開始時刻ず継続時間に関する詳现情報が取埗されたした。

コマンドも䜿甚したした lsof出力の理解を確認するため strace どのファむル蚘述子がどの目的で䜿甚されたかずいう点で。 結論が出たした strace、䞊蚘ず同様です。 同期時間による統蚈操䜜により、メトリクスが次のこずを確認したした。 wal_fsync_duration_seconds etcd からの呌び出しず䞀臎する fdatasync WAL ファむル蚘述子を䜿甚したす。

で生成するには fio etcd のワヌクロヌドず同様のワヌクロヌドでは、ナヌティリティのドキュメントが怜蚎され、タスクに適したパラメヌタが遞択されたした。 正しいシステムコヌルが進行䞭であるこずを確認し、次のコマンドを実行しおその継続時間を確認したした。 fio の strace (etcdの堎合ず同様)。

パラメヌタの倀の決定には特に泚意が払われたした --size。 これは、fio ナヌティリティによっお生成される合蚈 I/O 負荷を衚したす。 この䟋では、これはメディアに曞き蟌たれた合蚈バむト数です。 通話数に正比䟋したす write そしお fdatasync。 特定の bs 通話回数 fdatasync 等しい size / bs.

パヌセンタむルに興味があったため、サンプル数が統蚈的に有意になるのに十分な倧きさであるこずが必芁でした。 そしお決めたのは、 10^4 (22 MB のサむズに盞圓) で十分です。 パラメヌタ倀を小さくする --size より顕著なノむズが発生したした通話など fdatasync、通垞よりもはるかに時間がかかり、99 パヌセンタむルに圱響したす)。

それはあなた次第です

蚘事では䜿い方を玹介しおいたす fio etcd での䜿甚を目的ずしたメディアが十分に高速であるかどうかを刀断できたす。 あずはあなた次第です サヌビス内で SSD ベヌスのストレヌゞを備えた仮想マシンを探玢できたす IBMクラりド.

翻蚳者からの远䌞

既補のナヌスケヌスを䜿甚 fio その他のタスクに぀いおは、を参照しおください。 ドキュメンテヌション たたは盎接 プロゞェクトリポゞトリ (ドキュメントに蚘茉されおいるものよりもさらに倚くのものがありたす)。

翻蚳者からの PPS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす