Ceph
Benchmark Ceph Cluster Performance¶
最も一般的な質問の一つは、”クラスターが最大パフォーマンスで実行されているかどうかを確認するにはどうすればよいですか?”. Wonder no more-このガイドでは、Cephクラスターのベンチマークに使用できるいくつかのツールについて説明します。
注:この記事のアイデアは、Sebastian Hanのブログ投稿、TelekomCloudのブログ投稿、およびCeph開発者およびエンジニアからの入力に基づいています。
ベースラインパフォーマンス統計の取得¶
基本的に、ベンチマークはすべて比較に関するものです。 あなたが最初にその最大の可能なパフォーマンスが何であるかを特定しない限り、あなたはcephクラスターがpar以下で実行されているかどうか そのため、クラスターのベンチマークを開始する前に、Cephインフラストラクチャの主なコンポーネントであるディスクとネットワークのベースラインパフォーマン
ディスクをベンチマークする¶
ディスクをベンチマークする最も簡単な方法はddです。 ディスクページキャッシュをバイパスするためにoflagパラメーターを追加することを忘れずに、ファイルを読み書きするには、次のコマンドを使用します:shell> dd if=/dev/zero of=here bs=1G count=1 oflag=direct
最後に提供された統計情報(MB/秒単位のディスクパフォーマンスを示します)に注意してください。クラスター内の各ディスクに対してこのテストを実行し、結果を確認してください。
ネットワークのベンチマーク¶
Cephクラスターのパフォーマンスに影響を与えるもう一つの重要な要因は、ネットワー これに適したツールはiperfで、クライアントとサーバーの接続を使用してTCPとUDPの帯域幅を測定します。Iperfはapt-get install iperfまたはyum install iperfを使用してインストールできます。
iperfは、クラスター内の少なくとも二つのノードにインストールする必要があります。 次に、いずれかのノードで、次のコマンドを使用してiperfサーバーを起動します:
shell> iperf -s
別のノードで、iperfサーバーをホストしているノードのIPアドレスを使用するように、次のコマンドを使用してクライアントを起動します:
shell> iperf -c 192.168.1.1
ネットワークでサポートされている最大スループットを示すため、帯域幅統計をMbits/秒単位でメモしてください。
いくつかのベースライン番号があるので、Cephクラスターのベンチマークを開始して、同様のパフォーマンスを提供しているかどうかを確認できます。 ストレージクラスタ自体の低レベルのベンチマークを実行したり、ブロックデバイスやオブジェクトゲートウェイなどの主要なインターフェイスの高レベルのベンチマークを実行したりすることができます。 次のセクションでは、これらの各アプローチについて説明します。
注:以降のセクションのベンチマークを実行する前に、次のようなコマンドを使用してすべてのキャッシュを削除します:shell> sudo echo 3 | sudo tee /proc/sys/vm/drop_caches && sudo sync
Cephストレージクラスターのベンチマーク¶
Cephには、RADOSストレージクラスターのベンチマークを行うために特別に設計されたrados benchコマンドが含まれています。 これを使用するには、以下に示すように、ストレージプールを作成し、rados benchを使用して書き込みベンチマークを実行します。
radosコマンドはCephに含まれています。
shell> ceph osd pool create scbench 128 128
shell> rados bench -p scbench 10 write --no-cleanup
これにより、’scbench’という名前の新しいプールが作成され、10秒間書き込みベンチマークが実行されます。 いくつかのデータを残す–no-cleanupオプションに注意してください。 出力は、クラスターがデータを書き込むことができますどのくらいの速の良い指標を提供します。
シーケンシャル読み取り用のseqとランダム読み取り用のrandの二つのタイプの読み取りベンチマークが利用可能です。 読み取りベンチマークを実行するには、以下のコマンドを使用します:shell> rados bench -p scbench 10 seq
shell> rados bench -p scbench 10 rand
また、-tパラメーターを追加して読み取りと書き込みの同時実行性を向上させたり(既定値は16スレッド)、-bパラメーターを追加して書き込み対象のオブジェク また、複数のクライアントでパフォーマンスがどのように変化するかを確認するために、このベンチマークの複数のコピーを異なるプール
データを取得したら、クラスターの読み取りと書き込みの統計情報を、以前に実行したディスクのみのベンチマークと比較し、パフォーマンスのギャップが
書き込みベンチマークによって残されたベンチマークデータを次のコマンドでクリーンアップできます:
shell> rados -p scbench cleanup
Cephブロックデバイスのベンチマーク¶
Cephブロックデバイスのファンなら、そのパフォーマンスをベンチマークするために使用できる二つのツールがあります。 Cephにはすでにrbd benchコマンドが含まれていますが、RADOSブロックデバイスのサポートが組み込まれている一般的なI/Oベンチマークツールfioを使用することも
rbdコマンドはCephに含まれています。 FioでのRBDサポートは比較的新しいので、リポジトリからダウンロードしてコンパイルしてインストールする必要がありますusing_configure&&make&&make install_。 Rbdサポートを有効にするには、fioをコンパイルする前に、apt-get install librbd-devまたはyum install librbd-devを使用してlibrbd-dev開発パッケージをインストールする必要があります。
ただし、これら二つのツールのいずれかを使用する前に、以下のコマンドを使用してブロックデバイスを作成します:shell> ceph osd pool create rbdbench 128 128
shell> rbd create image01 --size 1024 --pool rbdbench
shell> sudo rbd map image01 --pool rbdbench --name client.admin
shell> sudo /sbin/mkfs.ext4 -m0 /dev/rbd/rbdbench/image01
shell> sudo mkdir /mnt/ceph-block-device
shell> sudo mount /dev/rbd/rbdbench/image01 /mnt/ceph-block-device
rbd bench-writeコマンドは、イメージへの一連の順次書き込みを生成し、書き込みスループットとレイテンシを測定します。 ここに例があります:
shell> rbd bench-write image01 --pool=rbdbench
または、fioを使用してブロックデバイスをベンチマークすることもできます。 Rbdの例です。fioテンプレートはfioソースコードに含まれており、LIBRBDを介してRADOSブロックデバイスに対して4Kランダム書き込みテストを実行します。 以下に示すように、プールとデバイスの正しい名前でテンプレートを更新する必要があることに注意してください。
ioengine=rbd
clientname=admin
pool=rbdbench
rbdname=image01
rw=randwrite
bs=4k
iodepth=32
次に、次のようにfioを実行します:shell> fio examples/rbd.fio
Ceph Object Gatewayのベンチマーク¶
Ceph object gatewayのベンチマークに関しては、OpenStack Swiftに含まれているベンチマークツールであるswift-benchを参照してください。 Swift-benchツールは、クライアントのPUT要求とGET要求をシミュレートし、そのパフォーマンスを測定することにより、CephクラスターのパフォーマSwift-benchをインストールするには、pip install swift&&pip install swift-benchを使用します。
swift-benchを使用するには、以下に示すように、まずゲートウェイユーザーとサブユーザーを作成する必要があります:shell> sudo radosgw-admin user create --uid="benchmark" --display-name="benchmark"
shell> sudo radosgw-admin subuser create --uid=benchmark --subuser=benchmark:swift
--access=full
shell> sudo radosgw-admin key create --subuser=benchmark:swift --key-type=swift
--secret=guessme
shell> radosgw-admin user modify --uid=benchmark --max-buckets=0
次に、クライアントホスト上にswift-benchの設定ファイルを以下のように作成します。 Ceph object gatewayの認証URLを反映し、正しいユーザー名と資格情報を使用するように認証URLを更新することを忘れないでください。
auth = http://gateway-node/auth/v1.0
user = benchmark:swift
key = guessme
auth_version = 1.0
これで、以下のようにベンチマークを実行できます。 -Cパラメーターを使用して同時接続数を調整し(この例では64を使用)、-sパラメーターを使用して書き込み対象のオブジェクトのサイズを調整します(この例では4Kオブジェクトを使用)。 -Nおよび-gパラメータは、それぞれ配置および取得するオブジェクトの数を制御します。shell> swift-bench -c 64 -s 4096 -n 1000 -g 100 /tmp/swift.conf
swift-benchはオブジェクト数/秒でパフォーマンスを測定しますが、各オブジェクトのサイズを乗算することで、これをMB/秒に変換するのは簡単です。
- レプリケーションのレベル(およびレイテンシオーバーヘッド)
- 完全なデータジャーナル書き込み(ジャーナルデータの合体によって一部の状況でオフセット)
- データの安全性を保証するためのOsd上のfsync
- RADOSに格納されたデータを保持するためのメタデータオーバーヘッド
- レイテンシオーバーヘッド(ネットワーク、cephなど)により、読み取りヘッドがより重要になります
ヒント: Object gatewayのパフォーマンスに関しては、パフォーマンスを簡単に向上させるために使用できる厳密で高速なルールはありません。 場合によっては、Cephエンジニアは、巧妙なキャッシュと合体戦略を使用してベースラインよりも優れたパフォーマンスを得ることができましたが、他の場合には、レイテンシ、fsync、メタデータのオーバーヘッドのためにobject gatewayのパフォーマンスがディスクのパフォーマンスよりも低くなっています。
結論¶
cephクラスタをベンチマークするためのツールは、ディスク、ネットワーク、クラスタ、デバイス、ゲートウェイなど、さまざまなレベルで利用可能です。 これで、ベンチマークプロセスにアプローチし、クラスターのパフォーマンスデータの生成を開始する方法についての洞察が得られました。 がんばろう!