Как удалить узел из кластера BigCouch? - PullRequest
2 голосов
/ 10 февраля 2012

Я создал кластер BigCouch с 4 узлами, просто отправив 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 Ответ

4 голосов
/ 10 февраля 2012

База данных узлов - это база данных couchdb, поэтому вам необходимо передать текущую ревизию для обновления или удаления документа.

См. Мой предыдущий ответ о том, как перемещать осколки: перемещение осколка с одного большого кресласервер на другой (для балансировки)

...