3

cassandraクラスター(1.0.10)から奇妙な動作が発生しています。

3ノードのクラスターを実行しています。

レプリケーション係数を設定せずにキースペースを作成すると、データを入力しようとしたときにエラーが発生します。

[default@unknown] create keyspace foo;
ae639ba0-d4b8-11e1-0000-424d3d43a8df
Waiting for schema agreement...
Warning: unreachable nodes 10.227.65.172, 10.51.62.63... schemas agree across the cluster
[default@unknown] use foo;
Authenticated to keyspace: foo
[default@foo] create column family User with comparator = UTF8Type;
b4608180-d4b8-11e1-0000-424d3d43a8df
Waiting for schema agreement...
Warning: unreachable nodes 10.227.65.172, 10.51.62.63... schemas agree across the cluster
[default@foo] update column family User with
...             column_metadata =
...             [
...             {column_name: first, validation_class: UTF8Type},
...             {column_name: last, validation_class: UTF8Type},
...             {column_name: age, validation_class: UTF8Type, index_type: KEYS}
...             ];
b70562c0-d4b8-11e1-0000-424d3d43a8df
Waiting for schema agreement...
Warning: unreachable nodes 10.227.65.172, 10.51.62.63... schemas agree across the cluster
[default@foo] set User['jsmith']['first'] = 'John';
null
UnavailableException()
        at org.apache.cassandra.thrift.Cassandra$insert_result.read(Cassandra.java:15206)
        at org.apache.cassandra.thrift.Cassandra$Client.recv_insert(Cassandra.java:858)
        at org.apache.cassandra.thrift.Cassandra$Client.insert(Cassandra.java:830)
        at org.apache.cassandra.cli.CliClient.executeSet(CliClient.java:901)
        at org.apache.cassandra.cli.CliClient.executeCLIStatement(CliClient.java:218)
        at org.apache.cassandra.cli.CliMain.processStatementInteractive(CliMain.java:220)
        at org.apache.cassandra.cli.CliMain.main(CliMain.java:348)

(ノードに到達できないという問題は、ここで述べられているような問題ではないはずです)

ただし、キースペースを作成してレプリケーション係数(1、2、または3)を指定すると、正常に機能します。

レプリケーション係数を指定せずにクラスターを作成することに問題がある場合は、代わりに作成時に例外をスローするべきではありませんか?マルチノードクラスターでレプリケーションファクターを指定しない場合、予想される動作はどうなりますか?

4

1 に答える 1

3

内部からキースペースを作成するときのデフォルトのレプリケーション戦略cassandra-cliNetworkTopologyStrategy(NTS) で、実際には単一のreplication_factor. NTS のレプリカは、データセンターごとに構成されます。NTS を使用する場合のデフォルトのレプリケーション オプションは " {datacenter1:1}" です。これは、1 つのレプリカを "datacenter1" レプリカ グループに配置する必要があることを意味します。特定のスニッチが構成されていない場合、ほとんどの場合、すべてのノードが「datacenter1」に割り当てられています。

レプリケーション ファクターを 1、2、または 3 に設定する方法について混乱しています。なぜなら、cassandra-cli では、 ofreplication_factorも指定せずに指定することはできないからです。その違いをより意識します。placement_strategySimpleStrategy

とにかく、デフォルトの場合の有効なレプリケーション係数は 1 であるため、問題は実際には警告メッセージからのノードのダウンであると予想されます。あなたが引用したメールで議論されているように、それらは本当にゾンビノードですか、それともまだリング内にあり、到達できない実際のノードですか? の出力はnodetool ring、Cassandra がレコードを正常に保存できないと判断した理由を診断するのに役立ちます。

最後に、この種の作業は、よりもツールを使用した方はるかに簡単であることに気付くはずです。この場合、少なくともレプリケーション戦略と戦略オプションを明示的に指定する必要がありました。cqlshcassandra-cli

于 2012-07-23T22:03:09.243 に答える