2014-01-28 55 views
2

我正在使用NetworkTopologyStrategy和PropertyFileSnitch在4個DC上測試Cassandra 2.0的部署。每個DC的複製配額爲1,這意味着每個DC都有完整的數據庫。 我的密鑰空間配置爲「一」讀取一致性。意思(據我所知)客戶可以在本地獲得數據,如果沒有執行任何法定人數的話可以獲得數據。卡桑德拉讀一致性,受其他節點影響?

不幸的是,我的測試結果表明否則。如果我人爲地(使用MiniNet)增加其中一個DC的延遲,我可以看到我在其他DC上的讀取速度顯着減慢(與延遲成比例,超過dynamic_snitch_badness_threshold)。

在此測試過程中,我不寫任何數據,我只是在執行閱讀。請注意,如果我完全斷開其中一個節點,我可以將性能恢復到100%。

因此我有2個問題,1.爲什麼一個DC會降低整個系統的性能,當我執行一致性讀取時。和2.爲什麼動態snytch不會將通信重新路由到性能不佳的節點(默認設置,測試時間超過20分鐘)。

問候。

編輯: 所以這是我迄今爲止的一系列行動。 當我創建表時,我添加了這個:read_repair_chance = 0和speculative_retry ='NONE';

問題:當我使用cqlsh控制檯時,我可以讀取當前的一致性級別,並且可以根據文檔設置LOCAL_ONE。但新的設置不是持久的,當我退出cqlsh並再次輸入時,我可以再次看到默認的一致性ONE。這似乎是每個會話的設置?

我在緩慢的節點上運行nodetool netstat,我發現沒有修復嘗試,但有一些響應?

Mode: NORMAL 
Not sending any streams. 
Read Repair Statistics: 
Attempted: 0<<----------- 
Mismatch (Blocking): 0 
Mismatch (Background): 0 
Pool Name     Active Pending  Completed 
Commands      n/a   0    0 
Responses      n/a   0   3807<<------------ 

回答

1

1)根據您的讀取負載,即使您使用LOCAL_ONE或LOCAL_QUORUM,也可能會導致其他數據中心節點的某些負載不能讀取修復。嘗試觀察nodetool tpstats的輸出並查看節點是否正在進行大量的讀取修復。如果是這樣,請嘗試通過將cf設置爲零來關閉read_repair_chance。

遵守上述行爲,啓用調試日誌記錄,並尋找類似這樣的臺詞:

ReadCallback.java(線79)Blockfor是....

應該告訴你,如果該請求被阻止通過向其他DC中的節點發送請求,可能是由於read_repair。

2)動態告警具有復位間隔。這意味着無論過去的歷史如何,它都會重置它爲每個節點的延遲捕獲的分數。您可能會觀察到在重新啓動snitch之後路由到慢節點的查詢。

+0

以下是相關的JIRA:https://issues.apache.org/jira/browse/CASSANDRA-7902 –

1

答案1)是「一」需要一個單一的反應,但不要求協調器將請求路由到本地DC。爲此使用'LOCAL_ONE'。這保證你的讀取不會交叉直流。

LOCAL_ONE可用於Cassandra 1.2.11和2.0.2及更高版本。必須將寫入 發送到本地數據中心中的至少一個副本節點,併成功進行確認。在多數據中心 羣集中,ONE的一致性級別通常是可取的,但交叉流量不是。 LOCAL_ONE完成此操作。對於安全性和質量 的原因,您可以在脫機數據中心 中使用此一致性級別,以防止在脫機節點故障時自動連接到其他數據中心的聯機節點 。

http://www.datastax.com/documentation/cassandra/2.0/webhelp/cassandra/dml/dml_config_consistency_c.html

嘗試追查一些要求,以獲取有關如何C *在執行您的查詢的詳細信息。 http://www.datastax.com/dev/blog/tracing-in-cassandra-1-2

+0

感謝您的回答。 是的,LOCAL_ONE是一個選項,但我不認爲我想要一起去。你認爲我看到由於在後臺發生ReadRepair而導致性能下降? http://wiki.apache.org/cassandra/ReadRepair 例如,如果我在perfrom讀取的DC嘗試推送/驗證最新版本以減慢DC,並且在某些階段緩衝區正在被填滿,我們必須等待最慢的節點趕上? – kirbo

+1

您可以嘗試關閉讀取修復以查看是否有效果,填充緩衝區可能會損害性能,但我會再次嘗試跟蹤來確保。 – RussS