all_nodes VS cluster_nodes CouchDB 2.X 集群成員之間的區別?
_membership
CouchDB ( ) 中的端點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
但沒有 inall_nodes
。(與我所問的問題非常相似,儘管與我所看到的只有all_nodes
值的情況相反)。我不明白答案:
我剛剛從 IRC 上的 Robert Newson 那裡聽說 BigCouch 節點是惰性連接的。
因為:
- 我以為我在某處的 CouchDB 中讀到節點在添加到集群時要線上;和
- 這充其量是結果可能存在差異的原因
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_nodes和cluster_nodes列表中的差異。在您的all_nodes包含比cluster_nodes更多資訊的特定情況下,官方文件中解釋了原因:
- all_nodes 是該節點知道的所有節點。
- cluster_nodes 是連接到該節點的節點。
您遇到的情況是,您正在查詢的節點知道其他節點(all_nodes),但它們都不屬於您的集群(clustered_nodes)。
似乎只有 Github 上的開發人員或社區才能完全回答您的問題。考慮在 Github 上提問,或在 apache/couchdb Github 頁面上打開問題。