2013-06-12 115 views
2

我的理解在這裏可能不對。據我瞭解,Couchbase使用智能客戶端來自動選擇要在羣集中寫入或讀取哪個節點。我不明白的是,當這些數據被寫入/讀取時,它是否也立即寫入所有其他節點?如果是這樣,在發生節點故障時,Couchbase如何知道使用與當前操作/密鑰「標記爲主」的節點不同的節點?如果您的某個節點出現故障,您是否會丟失數據?Couchbase節點故障

這句話從Couchbase服務器手冊給我的印象,你數據丟失(這將使Couchbase不適合高可用性要求):

  • 用較少的大節點,萬一節點故障的給 應用程序的影響將更大

預先感謝您的時間:)

回答

3

默認情況下,當數據寫入couchbase客戶端時,返回success之後,數據被寫入一個節點的內存。之後,couchbase將其保存到磁盤並進行復制。

如果您想確保數據在大多數客戶端庫中都保存到磁盤,那麼可以使用這些函數來執行此操作。藉助這些功能,您還可以確保將數據複製到另一個節點。該功能被稱爲observe

當一個節點出現故障時,應該是failover ed。在服務器設置中設置Auto failover超時時,Couchbase服務器可以自動執行此操作。即如果您有3個節點羣集,並且存儲的數據有2個副本,並且有一個節點發生故障,則不會丟失數據。如果第二個節點失敗,您也不會丟失所有數據 - 它將在最後一個節點上可用。

如果一個節點Master發生故障並且故障切換 - 其他活動節點變爲Master。在您的客戶端中,您指向集羣中的所有服務器,因此如果它無法從一個節點中檢索數據,則會嘗試從另一個節點獲取數據。

另外,如果您有2個節點供您使用,則可以安裝2個獨立的couchbase服務器並配置XDCR(跨數據中心複製),並使用HA代理或其他方式手動檢查服務器的可用性。這樣你只會得到一個連接的IP(代理的IP),它將自動從活着的服務器獲取數據。

3

希望Couchbase是HA系統的良好系統。

讓我用幾句話解釋它是如何工作的,假設你有一個5節點的簇。使用客戶端API/SDK的應用程序始終了解羣集的拓撲(以及拓撲中的任何更改)。

在集羣中設置/獲取文檔時,客戶端API使用與服務器相同的算法來選擇應在哪個節點上編寫它。所以客戶端選擇使用CRC32哈希節點,寫入該節點。然後,異步羣集將複製一個或多個副本到其他節點(取決於您的配置)。

Couchbase當時只有一個文檔的活動副本。所以很容易保持一致。所以應用程序從這個活動文檔中獲取並設置。

如果發生故障,服務器有一些工作要做,一旦發現故障(自動或通過監控系統)發生「故障轉移」。這意味着副本被激活爲活動狀態,並且可以像以前一樣工作。通常您會重新平衡節點以正確平衡羣集。

您正在評論的句子只是說您擁有的節點數量越少,失敗/重新平衡時的影響就越大,因爲您必須將相同數量的請求路由到較小的數字的節點。希望你不會丟失數據;)

您可以找到有關Couchbase CTO博客這種工作方式一些非常詳細的資料: http://damienkatz.net/2013/05/dynamo_sure_works_hard.html

注:我的工作是開發者傳道者在Couchbase