2014-10-30 72 views
7

對於Cassandra,假設複製因子爲1(即數據集的兩個副本),則至少需要三個節點才能以強一致性進行寫入。對於Couchbase來說,這個要求似乎並不是這樣,至少我沒有在任何地方發現它。儘管如此,Couchbase仍然建議生產系統至少使用三個節點。我發現的唯一動機是(1)雙節點系統中的單節點故障會導致單點故障,(2)雙節點系統在擴展到第三節點時需要更加努力節點,而不是三節點系統(我假設這是因爲重新平衡)。爲什麼三個節點是推薦的最低Couchbase節點數量?

無動機似乎格外引人注目我:

原因(1)感覺有點像說雙磁盤RAID-1是沒用的,只有一個三磁盤RAID-6(一個數據,二校驗和)是可以接受的。儘管如此,RAID-1相當流行(比三磁盤RAID-6:還要多),並且通常被認爲是相對安全的。假設節點的丟失將導致管理員的快速行動,所以風險應該是短暫的。

原因(2)對我來說似乎更加短暫。添加第四個節點時,添加三個節點時,兩個節點需要更努力地工作。儘管如此,這只是一個問題,大多數應用程序每天都會有負載變化,因爲在這種情況下,可以重新平衡。

所以我想知道是否有任何其他原因避免雙節點Couchbase集羣,假設兩個節點都能夠承載負載?

回答

9

主要原因是自動故障切換被禁用,並且少於三個節點。這是爲了防止「裂腦」情況。考慮兩個節點,節點A和節點B.如果一個節點是不可達的(由於網絡問題),則:

  • 節點A無法到達節點B,並且沒有其他節點與賦予所以他故障轉移(從集羣中刪除B並推銷他自己的副本)
  • 節點B無法到達節點A,並且類似地沒有其他節點,因此他故障切換(從集羣中刪除A)。

任何仍然可以看到兩個節點的客戶端現在基本上都有兩個獨立的集羣,他們都認爲他們擁有整個數據集。

基本上在這種情況下,您違反了CAP中的一致性

爲此Couchbase將少於三個節點進行自動故障轉移,並且因爲這是一個推薦的功能,在生產系統中使用,你在你的集羣至少需要三個節點。

請參閱Couchbase管理指南中的Failover considerations一章以瞭解更多詳細信息。

+1

謝謝!這聽起來像一個非常好的理由!我發現這個鏈接:https://github.com/couchbaselabs/docs-ng/blob/master/content/couchbase-manual-2.2/administration-tasks.markdown#using-automatic-failover更詳細地解釋問題。如果包含它(或其他來源),您的答案可能會得到改進。 – 00prometheus 2014-10-30 18:22:51

+0

@ 00prometheus好點 - 完成。 – DaveR 2014-10-31 07:49:13

相關問題