回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试以编程方式设置集群。为此,我遵循了文档(这里是<a href="https://docs.couchdb.org/en/stable/setup/cluster.html#the-cluster-setup-api" rel="nofollow noreferrer">https://docs.couchdb.org/en/stable/setup/cluster.html#the-cluster-setup-api</a>),并创建了一个快速python脚本来为我实现这一点</p>
<p>然后我得到以下输出:<code>{'error': 'setup_error', 'reason': 'Cluster setup unable to sync admin passwords'}</code>。所以我决定试试Fauxton界面(它可以工作),看看到底是什么</p>
<p>对python脚本进行了一些更改,以完全匹配Fauxton发送到集群的内容。。。但是如果手动界面(通过Fauxton)正常工作,我在复制引擎盖下发生的事情时仍然会出现“无法同步”错误。。。这让我快发疯了</p>
<p>使用以下启动脚本:</p>
<pre><code>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
</code></pre>
<p>它使用couchdb的3.1.1版本启动了三个新的docker容器。
我用于集群化的脚本可以在这里找到:<a href="https://github.com/wasperen/couchdb_clusterify/blob/main/clusterize.py" rel="nofollow noreferrer">https://github.com/wasperen/couchdb_clusterify/blob/main/clusterize.py</a></p>
<p>谢谢你的帮助。但无论如何:新年快乐</p>
<p>只是一步一步地遵循文档,结果是一样的:</p>
<pre><code>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", "bind_address":"0.0.0.0", "username": "admin", "password":"admin", "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", "port": 5984, "username": "admin", "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", "bind_address":"0.0.0.0", "username": "admin", "password":"admin", "port": 5984, "node_count": "3", "remote_node": "box03.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":"box03.couch", "port": 5984, "username": "admin", "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"}
</code></pre>
<p>使用Fauxton用户界面(在box01上)从浏览器日志中获取:</p>
<pre><code>POST http://localhost:15984//_cluster_setup
DATA {"action":"enable_cluster","username":"admin","password":"admin","bind_address":"0.0.0.0","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","username":"admin","password":"admin","bind_address":"0.0.0.0","port":5984,"node_count":3,"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","username":"admin","password":"admin","host":"box02.couch","port":5984,"singlenode":false}
RESPONSE 201 {"ok":true}
POST http://localhost:15984//_cluster_setup
DATA {"action":"enable_cluster","username":"admin","password":"admin","bind_address":"0.0.0.0","port":5984,"node_count":3,"remote_node":"box03.couch","remote_current_user":"admin","remote_current_password":"admin"}
RESPONSE 201 {"ok":true}
POST http://localhost:15984//_cluster_setup
DATA {"action":"add_node","username":"admin","password":"admin","host":"box03.couch","port":5984,"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@box02.couch","couchdb@box03.couch"]}
</code></pre>