0

私は Cassandra 2.0.3 を使用しており、ファイル (source コマンド) をロードして、cqlsh を介して単純なテーブルをドロップして再作成します。同じファイルで、新しく作成したテーブルにいくつかの行を挿入します。

3 ~ 4 回の試行ごとに、いくつかの挿入で rpc_timeout が発生します。この場合、クラスターの 1 つのノードで常に次の例外が発生します。

 WARN [Thread-63] 2014-05-07 10:52:39,658 IncomingTcpConnection.java (line 83) UnknownColumnFamilyException reading from socket; closing
org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find cfId=15a8520e-bb08-3a79-82a0-f735287315bf
    at org.apache.cassandra.db.ColumnFamilySerializer.deserializeCfId(ColumnFamilySerializer.java:178)
    at org.apache.cassandra.db.ColumnFamilySerializer.deserialize(ColumnFamilySerializer.java:103)
    at org.apache.cassandra.db.RowMutation$RowMutationSerializer.deserializeOneCf(RowMutation.java:304)
    at org.apache.cassandra.db.RowMutation$RowMutationSerializer.deserialize(RowMutation.java:284)
    at org.apache.cassandra.db.RowMutation$RowMutationSerializer.deserialize(RowMutation.java:312)
    at org.apache.cassandra.db.RowMutation$RowMutationSerializer.deserialize(RowMutation.java:254)
    at org.apache.cassandra.net.MessageIn.read(MessageIn.java:99)
    at org.apache.cassandra.net.IncomingTcpConnection.receiveMessage(IncomingTcpConnection.java:153)
    at org.apache.cassandra.net.IncomingTcpConnection.handleModernVersion(IncomingTcpConnection.java:130)
    at org.apache.cassandra.net.IncomingTcpConnection.run(IncomingTcpConnection.java:74)

cqlsh で直接 INSERT を実行しても、rpc_timeout で失敗します。通常、約 1 分後に挿入が成功します。

私のノードは時間同期されており (PC で 3 つの VM を使用しています)、LAN はもちろんすべての VM がローカルで実行されているため超高速です。

単一ノードで実行されている既存の Cassandra に 2 つのノードを追加してクラスターを作成しました。私のキースペースはレプリケーションを使用していません:

CREATE KEYSPACE eras
  WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };

問題を再現するために使用するファイルの内容は次のとおりです。

DROP TABLE IF EXISTS erasconfig;

CREATE TABLE erasconfig (
  name text,
  category text,
  description text,
  ismodifiablebyuser int,
  value text,
  format text,
  PRIMARY KEY (name, category)
);

INSERT INTO ErasConfig (isModifiableByUser, format, name, value, category, description) VALUES (1, '', 'RECORD_IN_BASE', 'garbage', 'Path', 'Absolute path used for RECORD INPUT files');

この INSERT は、クラスターの 3 番目のノードに入ります。これは、上記の例外を除いて、テーブルの作成中に時々失敗するノードです。

4

1 に答える 1

1

問題は、スキーマのレプリケーションが作成の完了と非同期であることです。そのため、マルチノード クラスタでは、スキーマの変更を使用する前に、すべてのノードにスキーマの変更が反映されていることを確認する必要があります。を使用nodetool describeclusterして、スキーマが一致しているかどうかを確認できます。クライアントから system.peers テーブルをチェックして、すべてのスキーマ バージョンが更新されていることを確認できます。

于 2014-05-13T05:16:46.463 に答える