Couchdb

all_nodes VS cluster_nodes CouchDB 2.X 集群成員之間的區別?

  • August 30, 2017

_membershipCouchDB ( ) 中的端點http://user:pass@domain:5985/_membership向我返回以下 json:

{
 all_nodes: [
   "couchdb@n1.domain.me",
   "couchdb@n2.domain.me",
   "couchdb@n3.domain.me"
 ],
 cluster_nodes: [
   "couchdb@n1.domain.me",
   "couchdb@n2.domain.me",
   "couchdb@n3.domain.me"
 ]
}

什麼時候all_nodes不一樣cluster_nodes

從原始碼建構 CouchDB 時,我設法錯誤地設置了一個集群——“all_nodes”中有 3 個節點,但“cluster_nodes”中沒有。

一個答案指向伺服器故障問題BigCouch all_nodes vs cluster_nodes,作者發現使用 BigCouch_membership返回了一個列表,cluster_nodes但沒有 in all_nodes。(與我所問的問題非常相似,儘管與我所看到的只有all_nodes值的情況相反)。

我不明白答案:

我剛剛從 IRC 上的 Robert Newson 那裡聽說 BigCouch 節點是惰性連接的。

因為:

  1. 我以為我在某處的 CouchDB 中讀到節點在添加到集群時要線上;和
  2. 這充其量是結果可能存在差異的原因all_nodes之一cluster_nodes

我實際上是在問為什麼在 CouchDB 2.x 中有兩個欄位似乎是相同的東西?all_nodes我的(非常有限的)經驗是,在現場顯示節點但不在現場顯示節點的集群cluster_nodes不起作用。

它要麼不是這個問題的答案,要麼遠遠超出我的水平,我不明白。

從 CouchDB slack 頻道,答案是:

一個是目前可聯繫節點的列表(即,那些已啟動的節點),另一個是 _dbs 數據庫中列出的每個節點

不確定這與另一個問題的答案有何联系。也許與節點在啟動時如何找到彼此有關。

伺服器故障問答中可能已經(部分)回答了您的問題:

BigCouch all_nodes vs cluster_nodes

官方文件指出,當您將節點添加到 CouchDB 集群時,查詢的輸出將_membership返回all_nodes和的列表cluster_nodes。除非您考慮到以下情況,否則沒有跡象表明此資訊可能有所不同:

查看節點的名稱以及它知道並連接的所有節點。

…這略微暗示可能存在差異。

連結的 Server Fault 答案指的是CouchDB 的開發人員Robert Newson :

我剛剛從 IRC 上的 Robert Newson 那裡聽說 BigCouch 節點是惰性連接的。

我想在這種情況下這是一個相當權威的答案。

當您請求_membership頁面時,CouchDB 可能已連接所有節點,也可能沒有。這可以解釋為什麼您注意到all_nodescluster_nodes列表中的差異。


在您的all_nodes包含比cluster_nodes更多資訊的特定情況下,官方文件中解釋了原因:

  • all_nodes 是該節點知道的所有節點。
  • cluster_nodes 是連接到該節點的節點。

您遇到的情況是,您正在查詢的節點知道其他節點(all_nodes),但它們都不屬於您的集群(clustered_nodes)。


似乎只有 Github 上的開發人員或社區才能完全回答您的問題。考慮在 Github 上提問,或在 apache/couchdb Github 頁面上打開問題。

引用自:https://dba.stackexchange.com/questions/184238