Cassandra ドキュメント

バージョン

プレリリースバージョンのドキュメントを表示しています。

最新版を表示

Nodetool の使用

Cassandra の nodetool を使用すると、クラスタ全体の問題を特定のノードに絞り込み、Cassandra プロセス自体の状態を詳細に把握できます。 数十個の便利なコマンドがありますが (すべてのコマンドについては nodetool help を参照)、トラブルシューティングに最も役立つコマンドの一部を簡単に紹介します。

クラスタステータス

nodetool status を使用して、クラスタのステータスを評価できます。

$ nodetool status <optional keyspace>

Datacenter: dc1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
UN  127.0.1.1  4.69 GiB   1            100.0%            35ea8c9f-b7a2-40a7-b9c5-0ee8b91fdd0e  r1
UN  127.0.1.2  4.71 GiB   1            100.0%            752e278f-b7c5-4f58-974b-9328455af73f  r2
UN  127.0.1.3  4.69 GiB   1            100.0%            9dc1a293-2cc0-40fa-a6fd-9e6054da04a7  r3

この場合、1 つのデータセンターに約 4.6GB のデータを持つ 3 つのノードがあり、すべて "稼働中" であることがわかります。ノードの稼働/停止ステータスは、クラスタ内のすべてのノードによって独立して決定されるため、クラスタ内の複数のノードで nodetool status を実行して、全体像を確認する必要がある場合があります。

nodetool status と grep を使用して、停止しているノードを確認できます。

$ nodetool status | grep -v '^UN'
Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
Datacenter: dc2
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
DN  127.0.0.5  105.73 KiB  1            33.3%             df303ac7-61de-46e9-ac79-6e630115fd75  r1

この場合、2 つのデータセンターがあり、データセンター dc2 とラック r1 に停止しているノードが 1 つあります。これは、127.0.0.5 に問題がある可能性があり、調査が必要であることを示している可能性があります。

コーディネータクエリレイテンシ

nodetool proxyhistograms を使用して、コーディネータの読み取りおよび書き込みレイテンシのレイテンシ分布を表示し、レイテンシの問題を絞り込むことができます。

$ nodetool proxyhistograms
Percentile       Read Latency      Write Latency      Range Latency   CAS Read Latency  CAS Write Latency View Write Latency
                     (micros)           (micros)           (micros)           (micros)           (micros)           (micros)
50%                    454.83             219.34               0.00               0.00               0.00               0.00
75%                    545.79             263.21               0.00               0.00               0.00               0.00
95%                    654.95             315.85               0.00               0.00               0.00               0.00
98%                    785.94             379.02               0.00               0.00               0.00               0.00
99%                   3379.39            2346.80               0.00               0.00               0.00               0.00
Min                     42.51             105.78               0.00               0.00               0.00               0.00
Max                  25109.16           43388.63               0.00               0.00               0.00               0.00

ここでは、読み取り、書き込み、範囲リクエスト (例: select * from keyspace.table)、CAS 読み取り (CAS の比較フェーズ)、CAS 書き込み (比較と設定の設定フェーズ) の完全なレイテンシ分布を確認できます。これらは、高レベルのレイテンシの問題を絞り込むのに役立ちます。たとえば、この場合、クライアントの読み取りタイムアウトが 20 ミリ秒の場合、このノードから時々タイムアウトが発生する可能性がありますが、1% 未満です (99% 読み取りレイテンシが 3.3 ミリ秒 < 20 ミリ秒であるため)。

ローカルクエリレイテンシ

レイテンシ/エラーの問題が発生しているテーブルがわかっている場合は、nodetool tablehistograms を使用して、ノードでローカルに何が起こっているかをより詳細に把握できます。

$ nodetool tablehistograms keyspace table
Percentile  SSTables     Write Latency      Read Latency    Partition Size        Cell Count
                              (micros)          (micros)           (bytes)
50%             0.00             73.46            182.79             17084               103
75%             1.00             88.15            315.85             17084               103
95%             2.00            126.93            545.79             17084               103
98%             2.00            152.32            654.95             17084               103
99%             2.00            182.79            785.94             17084               103
Min             0.00             42.51             24.60             14238                87
Max             2.00          12108.97          17436.92             17084               103

これは、特に重要なメトリクスのパーセンタイル内訳を示しています。

最初の列には、論理読み取りごとに読み取られた sstable の数が含まれています。ここでの数値が非常に大きい場合は、間違ったコンパクション戦略を選択した可能性があります。たとえば、更新が多いワークロードの場合、SizeTieredCompactionStrategy は通常、LeveledCompactionStrategy よりも読み取りごとの読み取り数がはるかに多くなります。

2 番目の列は、*ローカル* 書き込みレイテンシのレイテンシ内訳を示しています。この場合、p50 は 73 マイクロ秒と非常に良好ですが、最大レイテンシは 12 ミリ秒と非常に遅くなっています。書き込みの最大レイテンシが高い場合は、多くの場合、コミットログボリュームの速度が遅い (fsync が遅い) か、コミットログセグメントをすぐに飽和させる大きな書き込みがあることを示しています.

3 番目の列は、*ローカル* 読み取りレイテンシのレイテンシ内訳を示しています。ローカル Cassandra 読み取りは (予想どおり) ローカル書き込みよりも遅く、読み取り速度は読み取りごとに読み取られる sstable の数と高度に相関していることがわかります。

4 番目と 5 番目の列は、パーティションサイズとパーティションごとの列数の分布を示しています。これらは、テーブルに平均してスキニーパーティションまたはワイドパーティションがあるかどうかを判断するのに役立ち、不正なデータパターンを特定するのに役立ちます。たとえば、2 メガバイトの単一セルがある場合、読み取られるとヒープ圧力が発生する可能性があります。

スレッドプール状態

nodetool tpstats を使用して、特定のノードの現在の未処理リクエストを表示できます。これは、Cassandra プロセスに不足しているリソース (読み取りスレッド、書き込みスレッド、コンパクション、リクエストレスポンススレッド) を特定しようとする場合に役立ちます。例えば

$ nodetool tpstats
Pool Name                         Active   Pending      Completed   Blocked  All time blocked
ReadStage                              2         0             12         0                 0
MiscStage                              0         0              0         0                 0
CompactionExecutor                     0         0           1940         0                 0
MutationStage                          0         0              0         0                 0
GossipStage                            0         0          10293         0                 0
Repair-Task                            0         0              0         0                 0
RequestResponseStage                   0         0             16         0                 0
ReadRepairStage                        0         0              0         0                 0
CounterMutationStage                   0         0              0         0                 0
MemtablePostFlush                      0         0             83         0                 0
ValidationExecutor                     0         0              0         0                 0
MemtableFlushWriter                    0         0             30         0                 0
ViewMutationStage                      0         0              0         0                 0
CacheCleanupExecutor                   0         0              0         0                 0
MemtableReclaimMemory                  0         0             30         0                 0
PendingRangeCalculator                 0         0             11         0                 0
SecondaryIndexManagement               0         0              0         0                 0
HintsDispatcher                        0         0              0         0                 0
Native-Transport-Requests              0         0            192         0                 0
MigrationStage                         0         0             14         0                 0
PerDiskMemtableFlushWriter_0           0         0             30         0                 0
Sampler                                0         0              0         0                 0
ViewBuildExecutor                      0         0              0         0                 0
InternalResponseStage                  0         0              0         0                 0
AntiEntropyStage                       0         0              0         0                 0

Message type           Dropped                  Latency waiting in queue (micros)
                                             50%               95%               99%               Max
READ                         0               N/A               N/A               N/A               N/A
RANGE_SLICE                  0              0.00              0.00              0.00              0.00
_TRACE                       0               N/A               N/A               N/A               N/A
HINT                         0               N/A               N/A               N/A               N/A
MUTATION                     0               N/A               N/A               N/A               N/A
COUNTER_MUTATION             0               N/A               N/A               N/A               N/A
BATCH_STORE                  0               N/A               N/A               N/A               N/A
BATCH_REMOVE                 0               N/A               N/A               N/A               N/A
REQUEST_RESPONSE             0              0.00              0.00              0.00              0.00
PAGED_RANGE                  0               N/A               N/A               N/A               N/A
READ_REPAIR                  0               N/A               N/A               N/A               N/A

このコマンドは、あらゆる種類の興味深い統計情報を示しています.最初のセクションには、現在実行中のスレッド数 (アクティブ) と実行を待機しているスレッド数 (保留中) を含む、Cassandra ステージごとのスレッドプールの詳細な内訳が表示されます。通常、特定のスレッドプールで保留中の実行が表示される場合は、そのタイプの操作に限定された問題が発生していることを示します。たとえば、RequestResponseState キューがバックアップしている場合、これはコーディネータが多くのダウンストリームレプリカリクエストを待機しており、トークン認識の不足、または読み取りリクエストで使用されている非常に高い整合性レベル (たとえば、ALL での読み取りは RF RequestResponseState スレッドを拘束しますが、LOCAL_ONEReadStage スレッドプール内の単一スレッドのみを使用します) を示している可能性があります。一方、多くの保留中のコンパクションが表示される場合は、コンパクションスレッドが書き込みの量に追いつかず、コンパクション戦略または concurrent_compactors または compaction_throughput オプションを調整する必要があることを示している可能性があります。

2 番目のセクションには、すべての主要なリクエストタイプのドロップ (エラー) とレイテンシ分布が表示されます。ドロップはプロセス開始以降累積されますが、ドロップとして認定されるデフォルトのタイムアウトが非常に高いため (約 5 ~ 10 秒)、深刻な問題を示すものがある場合は、ドロップされたメッセージをさらに調査する必要があります。

コンパクション状態

Cassandra は LSM データストアであるため、Cassandra は sstable をまとめて圧縮する必要がある場合があり、パフォーマンスに悪影響を与える可能性があります。特に、コンパクションはかなりの量の CPU リソースを使用し、大量の OS ページキャッシュ を無効にし、ディスクドライブに大きな負荷をかける可能性があります。これが当てはまるかどうかを判断するための優れた os ツール <os-iostat> がありますが、多くの場合、nodetool compactionstats を使用してコンパクションが実行されているかどうかを確認することをお勧めします。

$ nodetool compactionstats
pending tasks: 2
- keyspace.table: 2

id                                   compaction type keyspace table completed total    unit  progress
2062b290-7f3a-11e8-9358-cd941b956e60 Compaction      keyspace table 21848273  97867583 bytes 22.32%
Active compaction remaining time :   0h00m04s

この場合、keyspace.table テーブルで 1 つのコンパクションが実行されており、97 のうち 21.8 メガバイトが完了し、Cassandra は (設定されたコンパクションスループットに基づいて) これに 4 秒かかると推定しています。 -H を渡して、単位を人間が判読できる形式にすることもできます。

一般に、実行中の各コンパクションは単一のコアを消費できますが、並列して実行するほどデータのコンパクションが高速になります.コンパクションは良好な読み取りパフォーマンスを確保するために不可欠であるため、コンパクションが迅速に完了し、クエリ スレッドから多くのリソースを奪わないように、同時コンパクションの適切なバランスをとることがパフォーマンスにとって非常に重要です。コンパクションが追いつかないことに気付いた場合は、Cassandra の concurrent_compactors または compaction_throughput オプションを調整してみてください。

データファイルに使用されるパス

Cassandra は、設定されたディレクトリ内のディスクにデータを永続化しています。データファイルは、data_file_directories で設定されたディレクトリに分散されます。キースペースとテーブルの構造に似て、Cassandra は data_file_directories 内にサブディレクトリを作成します。ただし、テーブルとキースペースが削除されても、ディレクトリは削除されません。これらのディレクトリはスナップショットを保持するという理由で保持されていますが、削除される可能性があります。運用担当者は、どのディレクトリがまだ使用されているかを知る必要があります。 nodetool datapaths コマンドを実行すると、Cassandra が実際に sstable データをディスクに保存しているディレクトリを簡単に一覧表示できます。

% nodetool datapaths -- system_auth
Keyspace: system_auth
	Table: role_permissions
	Paths:
		/var/lib/cassandra/data/system_auth/role_permissions-3afbe79f219431a7add7f5ab90d8ec9c

	Table: network_permissions
	Paths:
		/var/lib/cassandra/data/system_auth/network_permissions-d46780c22f1c3db9b4c1b8d9fbc0cc23

	Table: resource_role_permissons_index
	Paths:
		/var/lib/cassandra/data/system_auth/resource_role_permissons_index-5f2fbdad91f13946bd25d5da3a5c35ec

	Table: roles
	Paths:
		/var/lib/cassandra/data/system_auth/roles-5bc52802de2535edaeab188eecebb090

	Table: role_members
	Paths:
		/var/lib/cassandra/data/system_auth/role_members-0ecdaa87f8fb3e6088d174fb36fe5c0d

デフォルトではすべてのキースペースとテーブルが一覧表示されますが、特定のデータパスを照会するために keyspacekeyspace.table 引数のリストを指定できます。 --format オプションを使用すると、出力を YAML または JSON としてフォーマットできます。