在 MongoDB 的 replicaSet 中遇到了“not master”错误的烦恼的故事
In Chinese: 初始条件
我目前在 Docker 中使用三个节点配置了 MongoDB 的副本集。
version: '3'
services:
...
node1:
restart: always
image: "mongo:4.0"
command: --replSet rs1
node2:
restart: always
image: "mongo:4.0"
command: --replSet rs1
node3:
restart: always
image: "mongo:4.0"
command: --replSet rs1
...
注意:在启动初始阶段后,需要进行复制品的初始化处理。
应用程序将连接字符串写成了这样
ur = `mongodb://node1:27017/testDb?replicaSet=rs1,mongodb://node2:27017/testDb?replicaSet=rs1,mongodb://node3:27017/testDb?replicaSet=rs1`
有什麼疑問?
-
- レプリカ初期化処理を行い、アプリからは正常にアクセスできました
docker-compose で down してから再度 up しました
db.user.insert(…) 処理で not master エラーになりました
应对问题
-
- URL の書き方が間違っていました。ホストのリストをカンマ区切りで、mongodb://と/testDb?replicaSet=rs1 の真ん中に置く必要があります
mongodb://node1:27017,node2:27017,node3:27017/testDb?replicaSet=rs1 のフォーマットで書きましょう
ちゃんとドキュメント読めましょう
总结
- 恥ずかしいですが、半日もハマってました。ちゃんと ドキュメント読めましょうを読みましょう!!!
请参考以下链接
-
- Connect to MongoDB
- MongoDB の レプリカセット へ Node.jsドライバー を使って アクセスする 方法 – galife