微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以编程方式创建 CouchDB 集群失败

如何解决以编程方式创建 CouchDB 集群失败

我正在尝试以编程方式设置集群。为此,我遵循了文档(此处为 https://docs.couchdb.org/en/stable/setup/cluster.html#the-cluster-setup-api),并为我创建了一个快速的 Python 脚本。

然后我得到以下输出{'error': 'setup_error','reason': 'Cluster setup unable to sync admin passwords'}。所以我决定尝试 Fauxton 界面(有效),看看会发生什么。

对 python 脚本进行了一些更改,以与 Fauxton 发送到集群的内容完全匹配...但是手动界面(通过 Fauxton)是否有效,在复制引擎盖下发生的事情时,我仍然遇到此“无法同步”错误......这让我发疯了......

使用以下启动脚本:

for i in {1..3}; \
  do echo "$i"5984:5984; \
  docker run -d --rm -p "$i"5984:5984 \
    -e NODENAME=Box0$i.couch -e ERL_FLAGS='-setcookie "brumbrum"' \
    -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=admin \
    --name Box0$i --network couch  \
    couchdb:3.1.1; \
done

使用 3.1.1 版本的 couchdb 启动三个新的 docker 容器。 我用来聚类的脚本可以在这里找到:https://github.com/wasperen/couchdb_clusterify/blob/main/clusterize.py

感谢您的帮助。但无论如何:新年快乐!

只是按照文档一步一步来,结果相同:

root@75c127f35ad6:~# curl -X POST -H "Content-Type: application/json" http://admin:admin@Box01.couch:5984/_cluster_setup -d '{"action": "enable_cluster","bind_address":"0.0.0.0","username": "admin","password":"admin","node_count":"3"}'
{"error":"bad_request","reason":"Cluster is already enabled"}
root@75c127f35ad6:~# curl -X POST -H "Content-Type: application/json" http://admin:admin@Box01.couch:5984/_cluster_setup -d '{"action": "enable_cluster","port": 5984,"node_count": "3","remote_node": "Box02.couch","remote_current_user": "admin","remote_current_password": "admin" }'
{"ok":true}
root@75c127f35ad6:~# curl -X POST -H "Content-Type: application/json" http://admin:admin@Box01.couch:5984/_cluster_setup -d '{"action": "add_node","host":"Box02.couch","password":"admin"}'
{"ok":true}
root@75c127f35ad6:~# curl -X POST -H "Content-Type: application/json" http://admin:admin@Box01.couch:5984/_cluster_setup -d '{"action": "enable_cluster","remote_node": "Box03.couch","host":"Box03.couch","password":"admin"}'
{"ok":true}
root@75c127f35ad6:~# curl -X POST -H "Content-Type: application/json" http://admin:admin@Box01.couch:5984/_cluster_setup -d '{"action": "finish_cluster"}'
{"error":"setup_error","reason":"Cluster setup unable to sync admin passwords"}

这来自浏览器日志,使用 Fauxton 用户界面(在 Box01 上):

POST http://localhost:15984//_cluster_setup
DATA {"action":"enable_cluster","username":"admin","port":5984,"node_count":3,"singlenode":false}
RESPONSE 400 {"error":"bad_request","reason":"Cluster is already enabled"}

POST http://localhost:15984//_cluster_setup
DATA {"action":"enable_cluster","remote_node":"Box02.couch","remote_current_user":"admin","remote_current_password":"admin"}
RESPONSE 201 {"ok":true}

POST http://localhost:15984//_cluster_setup
DATA {"action":"add_node","singlenode":false}
RESPONSE 201 {"ok":true}

POST http://localhost:15984//_cluster_setup
DATA {"action":"enable_cluster","remote_node":"Box03.couch","singlenode":false}
RESPONSE 201 {"ok":true}

POST http://localhost:15984//_cluster_setup
DATA {"action":"finish_cluster"}
RESPONSE 201 {"ok":true}

GET http://localhost:15984/_membership
RESPONSE 200 {"all_nodes":["couchdb@Box01.couch","couchdb@Box02.couch","couchdb@Box03.couch"],"cluster_nodes":["couchdb@Box01.couch","couchdb@Box03.couch"]}

解决方法

我认为 CouchDB 3.x 中可能存在一个错误,即在使用基本身份验证时它不接受 finish_cluster 操作。如果您首先通过 _session 端点获取会话 cookie,然后将其用于身份验证,那么它似乎工作得非常好。

,

我检查了您的代码,看起来一切正常,就像您在这里遇到了这个问题:https://github.com/apache/couchdb/issues/2858。它可以通过向集群协调器节点发送 GET 请求来解决。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。