サーバー・エラー

サーバー・エラーはサーバーで発生し、クライアントに送られます。

cassandra.yaml

cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/cassandra.yaml
tarボール・インストール installation_location/resources/cassandra/conf/cassandra.yaml

サーバー・エラーはサーバーで発生し、クライアントに送られます。こうしたエラーすべてに関する追加情報は、Apache Cassandra native_protocol documentのセクション9「エラー・コード」でご覧になれます。

認証エラー

説明

サーバーによって認証が求められましたが、失敗しました。考えられる失敗の原因は、使用している認証システムによって異なります。エラー・メッセージには、失敗に関する詳細情報が記載されている場合があります。

修復

DSEおよびアプリケーションが採用している認証メカニズムを調べます。ユーザー名とパスワードを今一度よく確認します。詳細については、「DSEドライバーにおける認証」を参照して、「DSE Unified Authenticationについて」を確認してください。

Unavailable例外

1. Unavailable例外

Unavailable例外

説明

このエラーは、クエリーの整合性レベルが、そのクエリーを処理する上で使用可能なレプリカの数よりも高いことを示しています。この例外には、3つの要素があります。

  • CL:例外をトリガーしたクエリーの整合性レベルです。
  • Required:ノード数を表す整数で、CLを受け取る上で動作している必要があります。
  • Alive:レプリカ数を表す整数で、要求が処理されていた間は、動作している必要があるとされていました。

修復

整合性レベルで、十分な数のレプリカが利用できることを確認します。このエラーは、ノードがダウンしているか、コーディネーターへの接続が確立されていないことを示しているケースがよくあります。それ以外にも、DSEクラスターがローリング再起動やアップグレードの最中であることも考えられます。オペレーターが、ローリング・アップグレードや再起動を実行する際は、前のノードが完全に立ち上がっており、クエリー要求を受け取る準備が整っていることを確認してから、手順上の次のノードを再起動してください。

過負荷になっている例外

説明

コーディネーター・ノードは要求によって過負荷になっているため、要求は処理されませんでした。

修復

過負荷になっている例外は、クライアントから発信されるクラスターを処理できないことを示しています。これは、トラフィックの急増時やノードのリソースを使い果たす高い負荷がかかるクエリが原因でトリガーされる場合があります。これは一般的に、プロビジョニングされたクラスターが十分ではないことを示しています。

書き込みタイムアウト

2. 書き込みタイムアウト例外

書き込みタイムアウト例外

説明

書き込みタイムアウトは、書き込み要求時にサーバー側でタイムアウト例外が発生したことを示します。このエラーは、以下の4つの要素で構成されています。

  • CL:書き込みタイムアウトをトリガーしたクエリーの整合性レベルです。
  • received:要求を認識したノードの数です。
  • blockfor:整合性レベルを満たす上で必要とされたレプリカ数を表す整数です。
  • writetype:タイムアウトした書き込みのタイプを説明する文字列です。書き込みには、他にも以下のタイプがあります。
    • SIMPLE
    • BATCH
    • BATCH_LOG
    • UNLOGGED_BATCH
    • COUNTER
    • CAS
    • VIEW (MV)
    • CDC

修復

カウンターのインクリメントなど、非べき等な書き込みにおいてこの問題が発生した場合、ノードによるテーブルへのデータの書き込みが行われていない可能性があるため、クライアイントによって注意する必要があります。べき等書き込みを使用して、書き込みを簡単に再試行することができます。バッチログ書き込みのみ、ドライバーのデフォルトの再試行ポリシーで再試行されます。クエリーのべき等は、アプリケーション内で定義可能です。APIの仕様については、個々のドライバーのドキュメントをご覧ください。

SLAやアプリケーションの要件によっては、デフォルトのサーバー側の書き込みタイムアウトが当てはまらない場合があります。cassandra.yamlで、この値を調整することができます。よくある例としては、バッチが大きい場合や複数のパーティションにまたがる場合、書き込みタイムアウトが発生します。この問題に対処するには、バッチ・サイズを抑え、単一パーティションへのバッチの書き込みを制限することをご検討ください。このエラーを適切に処理するための詳細については、ブログ記事を参照してください。

読み取りタイムアウト

説明

読み取りタイムアウトは、読み取り要求時にサーバー側でタイムアウト例外が発生したことを示します。このエラーは、以下の4つの要素で構成されています。

  • CL:読み取りタイムアウトをトリガーしたクエリーの整合性レベルです。
  • received:要求を認識したノードの数です。
  • blockfor:整合性レベルを満たす上で必要とされたレプリカ数を表す整数です。
  • data present:この値が0の場合、データを求められた際のレプリカが応答しなかったことを意味します。そうでない場合、値は0になりません。コーディネーターは、データに対して1つのノードを求めるだけで、他のノードからのチェックサムを使用してデータに整合性があるかどうかを判断します。

修復

読み取りタイムアウトが発生する理由は多種多様です。考えられる原因としては、クエリーが極めて膨大な量のデータを一度に要求したり、サーバー側で時間がかかるガーベージ・コレクション・イベントが発生しているなどが挙げられます。こうした場合、サーバーにおいてパフォーマンスの低下を招いているデータ・モデルやクエリー・パターンに問題があることを通常示します。デバッグするには、最初にガーベージ・コレクション時間を受け入れ可能なサーバー・ログ内を検証してから、データ・モデルとアクセス・パターンを検証します。サーバー側の読み取りタイムアウトは、 cassandra.yaml 内で変更できます(タイムアウトにおける根本的な問題が他に見当たらなかった場合)。

読み取り障害

説明

読み取り障害は、読み取り要求時に発生する非タイムアウト例外です。このエラーは、以下の5つの要素で構成されています。

  • CL:エラーをトリガーしたクエリーの整合性レベルです。
  • received:要求を認識したノードの数です。
  • blockfor:整合性レベルを満たす上で必要とされたレプリカ数を表す整数です。
  • reasonmap:失敗原因コードに対するエンドポイントのマップです。失敗の原因を表すコードに対する要求を実行できなかったレプリカ・ノードのエンドポイントをマッピングします。
  • data present:この値が0の場合、データを求められた際のレプリカが応答しなかったことを意味します。そうでない場合、値は0になりません。コーディネーターは、データに対して1つのノードを求めるだけで、他のノードからのチェックサムを使用してデータに整合性があるかどうかを判断します。

修復

このエラーに遭遇することはほとんどありません。原因マップを精査して、根本的な原因を見つけ出します。この種のエラーの原因として一番多いのが、要求時に読み込むトゥームストーンの数が多すぎるというものです。

書き込み障害

説明

書き込み障害は、書き込み要求時に発生する非タイムアウト例外です。このエラーは、以下の5つの要素で構成されています。

  • CL:エラーをトリガーしたクエリーの整合性レベルです。
  • received:要求を認識したノードの数です。
  • blockfor:整合性レベルを満たす上で必要とされたレプリカ数を表す整数です。
  • reasonmap:失敗原因コードに対するエンドポイントのマップです。失敗の原因を表すコードに対する要求を実行できなかったレプリカ・ノードのエンドポイントをマッピングします。
  • writeType:失敗した書き込みのタイプを説明する文字列です。失敗した書き込みのタイプを説明する文字列の値です。書き込みには、他にも以下のタイプがあります。
    • SIMPLE
    • BATCH
    • BATCH_LOG
    • UNLOGGED_BATCH
    • COUNTER
    • CAS
    • VIEW (MV)
    • CDC

修復

このエラーに遭遇することはほとんどありません。原因マップを精査して、根本的な原因を見つけ出します。この種のエラーの原因として一番多いのが、パッチ・サイズが大きすぎるというものです。

機能障害

説明

実行時のユーザー定義関数(UDF)に失敗しました。エラー・メッセージには、以下の情報が含まれます。

  • keyspace:失敗した機能のキースペースです。
  • function:失敗した関数の名前です。
  • arg_types:失敗した関数の引数のタイプのリストです。

修復

ユーザー定義関数で、無限ループや構文エラーなど、何かが論理的に間違っている可能性が高いと考えられます。UDF定義を精査して、問題を見つけ出します。

構文エラー

説明

送信したクエリーには、無効な構文が含まれます。

修復

CQLの構文が適切であることを確認します。

無効なエラー

説明

送信したクエリーは、構文的には正しいのですが、有効なクエリーではありません。

修復

クエリーが有効であることを確認します。構文的には正しいものの無効なクエリーというものの中には、キースペースを存在しないキースペースに設定しようとしたり、存在しないテーブルをクエリーしたりすることも含まれます。

既存のエラー

説明

既に存在するキースペースやテーブルの作成を試みたクエリーです。このエラーは、以下の2つの要素で構成されています。

  • ks:既に存在するキースペースやテーブルに関連するクエリーです。
  • table:既に存在するテーブルの名前です。テーブルが何も関係していない場合、ここには何も入りません。

修復

キースペースやテーブルが、存在していないことを確認してから作成するか、IF NOT EXISTS CQL構文を使用します。

不測のエラー

説明

ステートメントの準備が事前に整っていない段階で、準備済みステートメントの実行が試みられました。

修復

実行する前にステートメントを準備します。