cassandra-stressツール
Cassandraクラスターの基本的なベンチマークおよび負荷テスト用のJavaベースのストレス・テスト・ユーティリティ。
cassandra-stress
ツールは、Cassandraクラスターの基本的なベンチマークおよび負荷テスト用のJavaベースのストレス・テスト・ユーティリティです。
cassandra-stress
ツールは、クラスターに追加し、任意のCQLテーブルおよびテーブル上の任意のクエリーのストレス・テストをサポートすることで、この作業の負荷を軽減します。cassandra-stress
を使用することで以下のことが可能です。- スキーマの動作をすばやく確認する。
- データベースのスケール動作を理解する。
- データ・モデルと設定を最適化する。
- 実稼働キャパシティを確認する。
cassandra-stress
ツールは、コンパクション・ストラテジ、キャッシュ設定、タイプの可能性のある特定のスキーマを定義するためのYAMLベースのプロファイルもサポートします。サンプル・ファイルの場所: - パッケージ・インストール: /usr/share/docs/cassandra/examples
- tarボール・インストール: install_location/tools/
cassandra-stress
ツールは、keyspace1
というキースペースを作成し、その中に、テストしているテーブル・タイプに応じて、standard1
またはcounter1
という名前のテーブルを作成します。これらはストレス・テストを最初に実行したときに自動的に作成され、CQLを使用してキースペースを削除しない限り、その後の実行で再利用されます。名前はハードコードされており、変更することはできません。
- パッケージ・インストール:
/usr/bin/cassandra-stress コマンド [オプション]
- tarボール・インストール:
cd インストール場所/tools $ bin/cassandra-stress コマンド [オプション]
tarボール・インストールでは、cassandra-stress daemonが実行されているかどうかに関係なく、以下のコマンドおよびオプションを使用できます。
コマンド | 説明 |
---|---|
read | 複数の同時読み取り。まずwriteテストでクラスターにデータを追加する必要があります。 |
write | クラスターへの複数の同時書き込み。 |
mixed | 比率と分散が構成可能なインターリーブ基本コマンド。まずwriteテストでクラスターにデータを追加する必要があります。 |
counter_write | カウンターの複数同時更新。 |
counter_read | カウンターの複数同時読み取り。まずcounter_writeテストでクラスターにデータを追加する必要があります。 |
user | 比率と分散が構成可能なインターリーブ・ユーザー提供クエリー。 |
help |
コマンドまたはオプションのヘルプを表示します。 |
ディストリビューション定義の出力を検査します。 | |
legacy | レガシー・サポート・モード。 |
$ cassandra-stress help オプション
たとえば、View schema helpを参照してください。
オプション | 説明 |
---|---|
-pop | 母集団分散およびパーティション間の訪問順序。 |
使用法 |
$ -pop seq=?[no-wrap] [read-lookback=DIST(?)] [contents=?] または $ -pop [dist=DIST(?)] [contents=?] |
-insert | パーティション更新をバッチ化および分割するさまざまな方法に関する特定のオプションを挿入します。 |
使用法 |
$ -col [n=DIST(?)] [slice] [super=?][comparator=?][timestamp=?][size=DIST(?)]
|
-col | サイズ、カウント分散、データ・ジェネレーター、名前、コンパレーターなどのカラム詳細情報。 |
使用法 |
$ -col [n=DIST(?)] [slice] [super=?][comparator=?][timestamp=?][size=DIST(?)]
|
-rate | スレッド・カウント、レート制限、または自動モード(デフォルトは自動) |
使用法 |
$ -rate threads=?[limit=?] または $ -rate [threads>=?][threads<=?][auto] |
-mode | Thriftまたはオプション付きCQL |
使用法 |
$ -mode thrift [smart] [user=?][password=?] または $ -mode native [unprepared] cql3 [compression=?][port=?][user=?][password=?] または $ -mode simplenative [prepared] cql3 [port=?] |
-errors | ストレス時に発生したエラーの対処方法。 |
使用法 |
$ -errors [retries=?][ignore]
|
-sample | レイテンシー測定時に収集するサンプルの数を指定します。 |
使用法 |
$ -sample [history=?][live=?][report=?]
|
-schema | レプリケーション設定、圧縮、コンパクションなど。 |
使用法 |
$ -schema [replication(?)] [keyspace=?][compaction(?)] [compression=?]
|
-node | 接続先のノード。 |
使用法 |
$ -node [whitelist] [file=?] []
|
-log | 進行状況および使用間隔のログを記録しておく場所。 |
使用法 |
$ -log [level=?][no-summary] [file=?][interval=?]
|
-transport | カスタム・トランスポート・ファクトリ。 |
使用法 |
$ -transport [factory=?][truststore=?][truststore-password=?][ssl-protocol=?][ssl-alg=?][store-type=?][ssl-ciphers=?]
|
-port | Cassandraノードを接続するポートを指定します。 |
使用法 |
$ -port [native=?][thrift=?][jmx=?]
|
-sendto | このコマンドの送信先となるストレス・サーバーを指定します。 |
使用法 |
$ -sendToDaemon <host>
|
Cassandra 2.1.5以降では、この他に以下のオプションがあります。
コマンド | 説明 |
---|---|
profile=? | cassandra-stress とともに使用するYAMLファイルを指定します。 |
ops(?) | 実行する操作(挿入および/またはクエリー)とそれぞれの頻度。 |
clustering=DIST(?) | 同じ種類の操作の分散クラスター実行。 |
err<? | 平均の標準誤差を指定します。この値に到達すると、cassandra-stress は終了します。デフォルトは0.02です。 |
n>? | 不確定収束を受け入れる前に実行する最小実行回数を指定します。 |
n<? | 不確定収束を受け入れる前に実行する最大実行回数を指定します。 |
n=? | 実行する操作回数を指定します。 |
duration=? | 実行する時間を秒、分、または時間で指定します。 |
no-warmup | プロセスをウォームアップせずにコールド・スタートを実行します。 |
truncate=? | cassandra-stress 時に作成されたテーブルを切り詰めます。オプションは、never、once、またはalwaysです。デフォルトはneverです。 |
cl=? | cassandra-stress 時に使用する整合性レベルを設定します。ONE、QUORUM、LOCAL_QUORUM、EACH_QUORUM、ALL、ANYのオプションがあります。デフォルトはLOCAL_ONEです。 |
単純な読み取りおよび書き込みの例
$ cassandra-stress write n=1000000
100万行を挿入(書き込み)します。
$ cassandra-stress read n=200000
20万行を読み取ります。
$ cassandra-stress read duration=3m
3分間、行を読み取ります。
$ cassandra-stress read n=200000 no-warmup
最初に50,000行のウォームアップをせずに200,000行を読み取ります。
スキーマ・ヘルプの表示
$ cassandra-stress help -schemareplication([strategy=?][factor=?][<option 1..N>=?]):Define the replication strategy and any parameters strategy=?(default=org.apache.cassandra.locator.SimpleStrategy) The replication strategy to use factor=?(default=1) The number of replicas keyspace=?(default=keyspace1) The keyspace name to use compaction([strategy=?][<option 1..N>=?]):Define the compaction strategy and any parameters strategy=?The compaction strategy to use compression=?Specify the compression to use for SSTable, default:no compression
データベースにデータを追加する
一般的には、cassandra-stress
で作成した基本スキーマをCQLで編集します。
#デフォルトのスキーマで1行を読み込む $ cassandra-stress write n=1 cl=one -mode native cql3 -log file=~/create_schema.log #CQLでスキーマを編集する $ cqlsh #実際の書き込みワークロードを実行する $ cassandra-stress write n=1000000 cl=one -mode native cql3 -schema keyspace="keyspace1" -log file=~/load_1M_rows.log
混在ワークロードを実行する
混在ワークロードを実行するときは、丸かっこ、不等号などの記号をエスケープさせる必要があります。この例では、1/4が書き込みで3/4が読み取りのワークロードを呼び出します。
$ cassandra-stress mixed ratio\(write=1,read=3\) n=100000 cl=ONE -pop dist=UNIFORM\(1..1000000\) -schema keyspace="keyspace1" -mode native cql3 -rate threads\>=16 threads\<=256 -log file=~/mixed_autorate_50r50w_1M.log
この例で以下のことに注目してください。
ratio
では、バックスラッシュを使用して丸かっこをエスケープさせる必要があります。n
の値は、書き込みフェーズとは異なります。書き込みフェーズでは、n
個のレコードが書き込まれます。しかし、読み取りフェーズでは、n
が大きすぎると、単純なテストですべてのレコードを読み取るのが不便になります。一般的に、クラスターの永続的な格納システムを検証するときには、n
は大きくする必要はありません。-pop dist=UNIFORM\(1..1000000\)
セクションは、n=100,000回の操作のうち、1と1,000,000の間で均等に分散しているキーを選択するという意味です。ノードあたりDRAMに入りきらない量のデータを指定したい場合にこれを使用します。rate
セクションでは、不等号記号をエスケープさせています。エスケープさせない場合、シェルはその記号をIOリダイレクトに使用しようとします。具体的には、シェルは存在しない=256というファイルからデータを読み取って、=16というファイルを作成しようとします。rate
セクションは、cassandra-stressに自動的に異なる数のクライアント・スレッドをテストし、16未満または256を超えるクライアント・スレッドをテストしないように指示してします。
単一ノード用の標準的な混在する読み取り/書き込みワークロード・キースペース
CREATE KEYSPACE "keyspace1" WITH replication = { 'class':'SimpleStrategy', 'replication_factor' :'1' }; USE "keyspace1"; CREATE TABLE "standard1" ( key blob, "C0" blob, "C1" blob, "C2" blob, "C3" blob, "C4" blob, PRIMARY KEY (key) ) WITH bloom_filter_fp_chance=0.010000 AND caching='KEYS_ONLY' AND comment='' AND dclocal_read_repair_chance=0.000000 AND gc_grace_seconds=864000 AND index_interval=128 AND read_repair_chance=0.100000 AND replicate_on_write='true' AND default_time_to_live=0 AND speculative_retry='99.0PERCENTILE' AND memtable_flush_period_in_ms=0 AND compaction={'class':'SizeTieredCompactionStrategy'} AND compression={'class':'LZ4Compressor' };
異なるノード上の複数のcassandra-stressインスタンスに負荷を分散させる
この例は、1つのcassandra-stress
負荷ジェネレーター・ノードがクラスターを飽和させない程度の大きさの負荷でクラスターに読み込む場合に便利です。この例では、$NODES
は10.0.0.1,10.0.0.2のようにIPアドレスのリストをコンマで区切った値を持つ変数です。
# Node1で実行する $$ cassandra-stress write n=1000000 cl=one -mode native cql3 -schema keyspace="keyspace1" -pop seq=1..1000000 -log file=~/node1_load.log -node $NODES # Node2で実行する $ cassandra-stress write n=1000000 cl=one -mode native cql3 -schema keyspace="keyspace1" -pop seq=1000001..2000000 -log file=~/node2_load.log -node $NODES
YAMLファイルを使用してcassandra-stressを実行する
この例では、クエリー定義にだけでなく、キースペースとテーブルの定義にもYAMLファイルを使用します。simple1として定義されている操作は、一度だけ実行されます。 ウォームアップは指定せず、整合性レベルはQUORUM
に設定します。
$ cassandra-stress user profile=tools/cqlstress-example.yaml ops\(simple1=1\) no-warmup cl=QUORUM
これらのサンプル・ファイルの詳しい説明は、Improved Cassandra 2.1 Stress Tool: Benchmark Any Schema – Part 1を参照してください。