好的,我有一个在 M1 mac 上运行的 multipass vm。它托管一个 ubuntu 服务器。在这台 ubuntu 服务器上,我安装了 go、gin 和一系列其他相关技术。然后我去mongo。
我首先创建复制集sudo docker network create mongoCluster
然后我启动三个节点:
sudo docker run -d -p 27017:27017 --name mongo1 --network mongoCluster -e MONGODB_INITDB_ROOT_USERNAME=myuser -e MONGODB_INITDB_ROOT_PASSWORD=mypassword -e MONGO_INITDB_DATABASE=task mongo:latest mongod --replSet myReplicaSet --bind_ip localhost,mongo1
sudo docker run -d -p 27018:27017 --name mongo2 --network mongoCluster mongo:latest mongod --replSet myReplicaSet --bind_ip localhost,mongo2
sudo docker run -d -p 27019:27017 --name mongo3 --network mongoCluster mongo:latest mongod --replSet myReplicaSet --bind_ip localhost,mongo3
然后我初始化复制集
sudo docker exec -it mongo1 mongosh --eval "rs.initiate({
_id: \"myReplicaSet\",
members: [
{_id: 0, host: \"mongo1\"},
{_id: 1, host: \"mongo2\"},
{_id: 2, host: \"mongo3\"}
]
})"
运行sudo docker exec -it mongo2 mongosh --eval "rs.status()"显示我已经正确设置了 mongo1 作为 PRIMARY
到目前为止,一切都很好!
然后我启动我的应用程序并与 uri 建立连接:mongodb://myuser:mypassword@localhost:27017/?retryWrites=true&w=majority Mongo 抛出一个错误Failed to ping cluster,但它随后报告它已连接然后它抛出这个:
Could not create Task: server selection error: context deadline exceeded, current topology: { Type: ReplicaSetNoPrimary, Servers: [{ Addr: mongo1:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp: lookup mongo1: Temporary failure in name resolution }, { Addr: mongo2:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp: lookup mongo2: Temporary failure in name resolution }, { Addr: mongo3:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp: lookup mongo3: Temporary failure in name resolution }, ] }
所以看起来各个节点看不到对方我已经在 googs 上搜索了一段时间,但似乎没有任何东西可以解决我的具体问题
我什至花钱参加培训课程来解决这个问题,但我没有。请帮忙!
慕的地6264312
相关分类