如何从BigCouch群集中删除节点?

时间:2012-02-10 14:41:22

标签: couchdb cluster-computing bigcouch

我创建了具有4个节点的BigCouch集群,只需将PUT发送到节点数据库:

curl -X PUT http://bigcouch-a.example.com:5986/nodes/bigcouch@bigcouch-a.example.com -d {}
curl -X PUT http://bigcouch-a.example.com:5986/nodes/bigcouch@bigcouch-b.example.com -d {}
curl -X PUT http://bigcouch-a.example.com:5986/nodes/bigcouch@bigcouch-c.example.com -d {}
curl -X PUT http://bigcouch-a.example.com:5986/nodes/bigcouch@bigcouch-d.example.com -d {}

所有节点都已正确注册,将GET发送到成员资格返回所有4个节点:

{"all_nodes":[
    "bigcouch@bigcouch-a.example.com",
    "bigcouch@bigcouch-b.example.com",
    "bigcouch@bigcouch-c.example.com",
    "bigcouch@bigcouch-d.example.com"]
 "cluster_nodes":[
    "bigcouch@bigcouch-a.example.com",
    "bigcouch@bigcouch-b.example.com",
    "bigcouch@bigcouch-c.example.com",
    "bigcouch@bigcouch-d.example.com"]
}

问题是:如何删除节点?

我尝试将DELETE发送到节点数据库

curl -X DELETE http://bigcouch-a.example.com:5986/nodes/bigcouch@bigcouch-d.example.com

但是我收到了一个错误:

{"error":"conflict", "reason":"Document update conflict."}

一旦我停止了节点d,我的会员资格就会恢复:

{"all_nodes":[
    "bigcouch@bigcouch-a.example.com",
    "bigcouch@bigcouch-b.example.com",
    "bigcouch@bigcouch-c.example.com"]
 "cluster_nodes":[
    "bigcouch@bigcouch-a.example.com",
    "bigcouch@bigcouch-b.example.com",
    "bigcouch@bigcouch-c.example.com",
    "bigcouch@bigcouch-d.example.com"]
}

所以节点d"all_nodes"消失,但仍然作为"cluster_nodes成员存在。

我无法在此状态下创建任何新数据库。每次收到消息时:

could not load validation funs {function_clause,
    [{lists, flatmap,
    [#Fun<couch_db.36.90395586>,
    {nodedown, <<"progress not possible">>}]},
    {couch_db, '-load_validation_funs/1-fun-1-', 1}]}

任何想法如何解决?

1 个答案:

答案 0 :(得分:4)

节点db是couchdb数据库,因此您需要传递当前版本以更新或删除文档。

请参阅我之前关于如何移动分片的答案:moving a shard from one bigcouch server to another (for balancing)