2012-07-23 54 views
3

我們從cassandra集羣獲得了奇怪的行爲(1.0.10)。在沒有複製因子的情況下在cassandra *中設置密鑰空間

我們正在運行一個3節點的集羣。

[[email protected]] 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 
[[email protected]] use foo; 
Authenticated to keyspace: foo 
[[email protected]] 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 
[[email protected]] 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 
[[email protected]] 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) 

(該帶不能的問題,以達到節點不應該是一個問題,因爲說here

如果我創建一個密鑰空間沒有設置複製因子,那麼我試圖輸入數據時會出錯)

但是,如果我創建密鑰空間並指定複製因子(1,2或3),那麼它工作正常。

如果在創建羣集時沒有指定複製因子有問題,那麼在創建時不應該拋出異常呢?如果不是在多節點羣集上指定複製因子,那麼預期的行爲是什麼?

+0

它聽起來像一個錯誤。您可以在以下網址提交錯誤報告:https://issues.apache.org/jira/browse/CASSANDRA – psanford 2012-07-23 16:12:11

+0

謝謝 - 錯誤提交:https://issues.apache.org/jira/browse/CASSANDRA-4486 – agentgonzo 2012-08-03 09:30:24

回答

3

cassandra-cli內部創建密鑰空間時的默認複製策略是NetworkTopologyStrategy(NTS),它實際上並沒有單個的概念replication_factor。 NTS副本按每個數據中心進行配置。使用NTS時的默認複製選項爲「{datacenter1:1}」,表示應將一個副本放入「datacenter1」副本組中。如果您沒有配置特定的snitch,那麼很可能所有節點都被分配到「datacenter1」。

我感到困惑,你是如何複製因子設置爲1,2,或3,因爲卡桑德拉-CLI不應該讓你指定replication_factor同時沒有指定SimpleStrategyplacement_strategy過了,如果你這樣做,我想你會更清楚這種差異。

無論如何,既然您在默認情況下的有效複製因子是1,我認爲您的問題確實是警告消息中的下降節點。他們是真正的殭屍節點,就像你引用的郵件中討論的那樣,還是真正的節點仍然在環中,哪些是不可達的? nodetool ring的輸出應該有助於診斷爲什麼Cassandra不認爲它可以成功存儲您的記錄。

最後,我要指出,你會發現這樣的工作很多cassandra-cli更容易與cqlsh工具。在這種情況下,它至少會迫使你提供一個明確的複製策略和策略選項。

+0

當我手動設置射頻,我也設置了放置策略,所以工作得很好。如果我只是做了簡單的'create keyspace foo'它設置了一個密鑰空間,但對該密鑰空間的所有訪問都失敗了。如果使用cassandra-cli時發生錯誤,告訴我使用csh並沒有幫助 - 我將提交一個錯誤報告。 – agentgonzo 2012-08-03 09:23:55

+0

是的,這不是cassandra-cli中的錯誤。 – 2012-08-03 15:42:35

相關問題