2011-04-20 51 views
2

所以,我一直在玩Cassandra,並且已經建立了一個有三個節點的集羣。我正試圖弄清楚冗餘如何與ConsistencyLevels協同工作。目前,我正在使用ConsistenyLevel.ALL編寫數據,並使用ConsistencyLevel.ONE讀取數據。從我一直在讀的內容來看,這似乎是有道理的。我有三個Cassandra節點,我想寫給他們三個。我只關心閱讀其中的一個,所以我會採取第一個迴應。爲了測試這個,我寫了一堆數據(再次,ConsistencyLevel.ALL)。然後我殺了我的一個節點(不是「種子」或「listen_address」機器)。Cassandra和ConsistencyLevel問題(冗餘)

當我嘗試閱讀時,我預計可能會延遲一段時間以獲取我的數據。最初,我得到一個TimeoutException ...我期望的。這就是Cassandra試圖處理意外節點丟失時得到的結果,對吧?大約20秒後,我再試一次,現在得到一個UnavailableException,它被描述爲「並非所有需要的副本都可以創建和/或讀取」。

那麼,我不在乎所有的副本......只有一個(就像我在get語句中的ConsistencyLevel.ONE中),對吧?

我在這裏是否缺少ConsistencyLevel點?如果一個節點死亡,我如何配置它仍然可以獲取我的信息?

感謝

回答

1

這聽起來像你有複製因子(RF)設置爲1,意味着只有一個節點持有任何給定行。因此,當您關閉一個節點時,無論您使用何種一致性級別,都無法讀取或寫入1/3的數據。您的期望與RF = 3時的情況相符。

+0

您說得對!我沒有在密鑰空間級別設置我的複製因子,這是我想我必須設置它的地方。我認爲讀取和寫入分別處理數據如何被複制。我解開了我的密鑰空間,現在看起來工作正常。謝謝!! – Wanderer 2011-04-21 20:48:07