|
通常、Kubernetes プラットフォームには使いやすく信頼性の高いブロック ストレージを見つける必要があります。 そこでこの記事では、複数のオープンソースストレージソリューションをベンチマークし、様々な条件下でのパフォーマンスを把握します。この比較では、DRBD (https://en.wikipedia.org/wiki/Distributed_Replicated_Block_Device) を異なるハードウェア構成でテストし、そのテスト結果を Ceph (https://ceph.io/en/) と比較します。 しかし、ソフトウェア定義ストレージ市場は常に進化を続けています。最近リリースされたMayastor(https://github.com/openebs/mayastor)やVitastor(https://vitastor.io/)をはじめ、新しいプロジェクトが次々と登場しています。この記事では、これら2つの新興ストレージソリューションについても取り上げます。 テスト環境I. ハードウェア
II. コアソフトウェア
III. 主要なソフトウェアバージョン
IV. テストブロック情報
ベンチマークベンチマークはいくつかのステップで実行されます。
以下は、この記事で提供されている fio を使用したテスト用のコマンドです。 fio - name = randwrite_fsync - ioengine = libaio - direct = 1 - randrepeat = 0 - rw = randwrite - bs = 4k - numjobs = 1 - iodepth = 1 - fsync = 1 アピールテストコマンドに関しては、この記事 (https://yourcmc.ru/wiki/Ceph_performance) でも詳しく紹介されており、以下に要約されています。 なぜこれらのコマンドがベンチマークに含まれているのでしょうか? 結局のところ、次のような多くのパラメータがディスクのパフォーマンスに影響を与えるからです。
結果は、様々なレベルの詳細情報で表示できます。単純な平均操作数や1秒あたりのメガバイト数に加えて、グラフ、ヒストグラム、パーセンタイルなど、様々な形式で表示できます。これらはすべて、現在のテストパフォーマンスを理解するのに役立ちます。 ベンチマークにはいくつかの問題もあります。例えば、一部のサーバーSSDベンダーは、テスト前にディスクを少なくとも2回ランダムに上書きすることで変換テーブルを前処理する必要があると考えています。しかし、これはSSDを現実のシナリオではほとんど遭遇しないような過酷な条件にさらしてしまうことになると私は考えています。 遅延と 1 秒あたりの操作数をプロットする必要があると言う人もいますが、これは「q」自体の関係ではなく、F1(q) と F2(q) の関係をプロットすることになるので、少し奇妙に思えます。 つまり、ベンチマークは時間のかかるプロセスになりかねません。完全な結果を得るには数日かかることもあります。3dnewsのようなSSDレビューサイトは、しばしばこのプロセスを採用しています。しかし、私たちはこれに何日も費やすつもりはありません。パフォーマンスを迅速に評価できるテストが必要なのです。 したがって、いくつかの「極端な」パターンを除外し、それらのパターン内の円盤を調べ、他の結果はこれらの「極端な」パターンの間に位置すると仮定し、パラメータに依存する滑らかな関数を形成します。これらのパターンはそれぞれ、有効なユースケースに対応しており、これも便利です。
この情報に基づいて、この記事では、各テストを実行し、取得したデータを収集して解析するためのスクリプト (https://gist.github.com/kvaps/e36b82826fb8e36d0362c7f4033948d0) を提供します。 以下のグラフはすべて、上記の8つのテストに基づいています。各テストは1分間のみ実行されました。もちろん、この時間ではすべてのニュアンスを徹底的に検討するには不十分ですが、さまざまなソリューションを大まかに比較するには十分な時間です。 I. 「生の」NVMeパフォーマンスのテストあらゆるベンチマーク テストは、基礎となるディスク自体のテストから開始する必要があります。 これは、パフォーマンスがどれだけ低下したかを確認するための出発点です。 テスト結果によると、使用したディスクのパフォーマンス特性が異なっていたことがわかります。これは (おそらく) ディスクの経年劣化によるものです。 II. バックエンドテストのオーバーヘッドNVMe自体のパフォーマンスデータを取得できたので、次に各バックエンドのパフォーマンスを測定する必要があります。ご存知のとおり、DRBDはパーティション化されていないRAWディスクを含む、あらゆるブロックデバイスで動作します。 しかし、DRBD9のリリース以降、仮想マシンまたはコンテナごとに専用アプライアンスを使用するという考え方が増えています。これは、システム障害の影響を軽減し、スケールアウトを容易にするのに役立つためです。論理ボリュームマネージャーを使用すると、適切なサイズの新しいボリュームを一括で簡単に準備できます。さらに、ライブリサイズ、スナップショット、重複排除など、さまざまな新機能もサポートしています。 LINSTOR ( https://linbit.com/linstor/ ) は、LVM、LVMTHin、ZFS など、様々なバックエンドをサポートしています。以下ではこれらをテストします。テストでは、利用可能な最速のディスク (ノード 3) を使用してパフォーマンスを測定しました。結果は次のとおりです。 上記のように、LVM や ZFS と比較すると、従来の LVM にはオーバーヘッドはほとんどありませんが、サポートされる機能は少なくなります。 スナップショットを作成する場合は、Copy-on-Write (https://en.wikipedia.org/wiki/Copy-on-write) をサポートしており、パフォーマンスに影響を与えずにスナップショットを作成できる LVMThin または ZFS を使用する必要があります。 LVMThinはシーケンシャルな読み書き操作では良好なパフォーマンスを発揮しますが、ランダムな読み書き操作では多くの欠点があります。ボリューム全体にゼロパディング(つまりディスク領域を事前割り当て)を施し、「raw」ディスクの半分のパフォーマンスを実現できれば、パフォーマンスはさらに向上するでしょう。 ZFSのパフォーマンスは著しく低下しました。ブロックサイズを調整してみましたが、残念ながら結果にはほとんど影響がありませんでした(ブロックサイズは512、4K、32K、512Kでテストしました。デフォルトは8Kでした)。ブロックサイズを小さくするとパフォーマンスはわずかに向上しましたが、レイテンシも大幅に増加しました。ブロックサイズを大きくするとシーケンシャルリード/ライト速度は向上しましたが、これは私たちの目標ではありませんでした。 そこで、ZFSを脇に置いて、LVMThinで同じことを試してみることにしました。その後、ブロックサイズを変更してもテスト結果にほとんど影響はありませんでした。 最終的に、デフォルトの LVM または LVMThin のいずれかを選択しました。 LINSTORはLUKS暗号化ボリュームを使用できますが、この暗号化によるパフォーマンスコストについて興味がありました。LUKSへの影響は最小限であることがわかりました。ランダムな読み取り/書き込みやシーケンシャルな操作を時々行う場合、パフォーマンスはほぼ変わりませんが、ランダムな操作を連続して行う場合、パフォーマンスは半分しか低下しません。グラフで確認できます。 III. DRBDオーバーヘッドのテストバックエンドが確定した後、DRBDレプリケーションのオーバーヘッドの調査を開始しました。利用可能なバックエンドはそれぞれテストしましたが、ここではLVMを主な例としてのみ使用します。 DRBD ベンチマークには、レプリカ 1 つ (純粋な DRBD オーバーヘッド)、ローカル レプリカ 2 つ、リモート ディスクレス クライアントを持つレプリカ 2 つという 3 つの構成を使用します。 結果は次のとおりです。 この図は、DRBD によってランダム読み取り/書き込み速度が大幅に低下し、順次操作のオーバーヘッドがほとんどなくなることを示しています。 2 つのレプリカを有効にすると、並列処理のないテストでは操作速度がわずかに低下し、待ち時間が増加します。 しかし、これは理にかなっています。2 つのコピーに同時に書き込み、各コピーが操作を完了するまで待機します。 ディスクレス クライアントの場合、両方のコピーがリモート サーバー上にあるため、クライアントはそれらに接続する必要があり、その結果、速度が低下し、待ち時間が増加します。 この時点で、次のような結論を導き出すことができます。
DRBD の調整は最終結果にほとんど影響を与えなかったため、その後のテストでは使用されませんでした。 IV. 他のクラスタファイルシステムとの比較過度のパフォーマンス低下につながる要因は数多くあると思われるため、この時点でDRBDを他のソリューションと比較することにしました。比較対象となるソリューションは、Ceph RBD、Mayastor、そして実験的なストレージであるVitastorの3つです。 公平を期すために、Mayastor 以外の多くのクラスター ファイル システムと同様に、COW とスナップショットの作成をサポートする、より低速のバックエンド LVMThin を使用することにしました。 私が受け取ったものは次のとおりです: その結果は私を驚かせた。 ランダム書き込み操作では、ローカル Mayastor が 1 位、Vitastor が 2 位、続いてローカル DRBD、Ceph、ディスクレス DRBD となっています。 ローカル DRBD は読み取りテストで最高のパフォーマンスを発揮し、良好な結果と最低のレイテンシを実現しました。 V. ギガビットネットワークベンチマークテストまた、各ソリューションがギガビット ネットワーク上でどのように動作するかも知りたいです。 上記のように、4つのソリューションはすべてギガビットイーサネットチャネルを完璧に活用しました。しかし、結果にはまだ多くの欠点があります。Mayastorは他のソリューションよりもわずかに優れたパフォーマンスを示しました。DRBDは読み取り速度は優れていましたが、書き込み速度は依然として低速でした。 VI. ストレステストさて、いよいよ最も重要な部分、ストレステストです。前述のテストはストレージ容量を把握するために設計されています。この部分では、実際の負荷をシミュレートし、各ソリューションがどのように対応するかを確認します。 75% のランダム読み取りと 25% のランダム書き込みを含む標準の r/w テストを使用し、その複数のコピーを実行します。 fio -名前= test -ファイル名=/ dev / xvda - ioengine = libaio - direct = 1 - rw = randrw - rwmixread = 75 - bs = 4 k - numjobs = 1 - iodepth = 64 -サイズ= 4 G 15 分間の制限時間を設定し、その時間内に完了したテストの数を確認して、全体的な統計をまとめます。 LINSTORとMayastは、 volumeBindingMode: WaitForFirstConsumerの設定を推奨しているため、他のソリューションよりも優れています。これにより、最終的にPodが配置されるノードと同じノードにボリュームが構成されます。類似の環境でソリューションを比較するため、この機能を無効にすることにしました。 Ceph は、ドライブごとに 2 つの OSD を実行し、さらに pg (512) を設定するようにも構成されています。 最後の2つのグラフはノード上のリソース消費量の合計を示していますが、この情報は客観的な情報とは言い難いため、鵜呑みにしないでください。より詳細な分析については、Grafanaのグラフを参照することをお勧めします。 Grafna の対応するチャートは次のとおりです。
LINSTOR は、クライアントの読み取りと書き込みが多数あっても、一貫して優れた結果を提供します。Vitastor もほぼ同様に優れています。 MayastorとCephが僅差で続きました。さらに、Grafanaのチャートからも明らかなように、CephはRAMとCPUリソースを大幅に多く消費しました。 ここで、Mayastor は現在 COW とスナップショットをサポートしていないことを指摘する必要があります。そのため、LVM バックエンドを持つ LINSTOR と安全に比較できます。 最後の2つのグラフはノード上のリソース消費量の合計を示していますが、この情報は客観的な情報とは言い難いため、鵜呑みにしないでください。より詳細な分析については、Grafanaのグラフを参照することをお勧めします。 Grafna の対応するチャートは次のとおりです。
LINSTOR は、クライアントの読み取りと書き込みが多数あっても、一貫して優れた結果を提供します。Vitastor もほぼ同様に優れています。 MayastorとCephが僅差で続きました。さらに、Grafanaのチャートからも明らかなように、CephはRAMとCPUリソースを大幅に多く消費しました。 ここで、Mayastor は現在 COW とスナップショットをサポートしていないことを指摘する必要があります。そのため、LVM バックエンドを持つ LINSTOR と安全に比較できます。 Grafana グラフ:
LINSTORの24台のローカルクライアントを使ったテストの結果はやや奇妙でした。クラスタが他の処理でビジー状態だった可能性があります。しかし、全体的な傾向は明らかです。LINSTOR + LVM構成はMayastorよりも大幅に優れています。Mayastorの利点は、平均CPU負荷が低いことにあります。 一方、`volumeBindingMode: WaitForFirstConsumer` を有効にして、テスト結果がどの程度変化するかを確認することもできます。このモードでは、少なくとも1つのレプリカがローカル、つまりポッドと同じ場所で実行されることに注意してください。 Grafna グラフ:
簡単な要約ベンチマーク結果と現在の構成情報に基づくと、次のようになります。
私たちのケースでは、最も成熟した本番環境対応ソリューションとして LINSTOR が選択されました。 |