MongoDB 错误:连接到 mongo 副本集时无法到达集合 [set_name] 的主节点

Posted

技术标签:

【中文标题】MongoDB 错误:连接到 mongo 副本集时无法到达集合 [set_name] 的主节点【英文标题】:MongoDB Error: Unable to reach primary for set [set_name] when connect to mongo replica set 【发布时间】:2019-03-27 03:48:35 【问题描述】:

我正在尝试连接到由 3 个 mongo docker-container 组成的 MongoDB 副本集,但出现错误消息:Unable to reach primary for set rs0

Git 存储库:https://github.com/frontalnh/mongodb-replica-set

我让 docker swarm 由 3 个 MongoDB docker-container 组成,并将每个端口映射到 localhost:27017、27018、27019

可以通过以下命令连接到单个 mongo docker-container

mongo localhost:27017

但是当我尝试通过以下命令连接到由 3 个组成的副本集时,

错误消息:出现Unable to reach primary for set rs0

命令

mongo "mongodb://localhost:27017,localhost:27018,localhost:27019/testdb?replicaSet=rs0"

配置

cfg = 
  _id: 'rs0',
  members: [
     _id: 0, host: 'mongo-rs0-1:27017' ,
     _id: 1, host: 'mongo-rs0-2:27017' ,
     _id: 2, host: 'mongo-rs0-3:27017' 
  ]
;
cfg.protocolVersion = 1;
rs.reconfig(cfg,  force: true );

Docker 编写

version: '3'

services:
  mongo-rs0-1:
    image: 'mongo-start'
    build: ./mongo-rs0-1
    ports:
      - '27017:27017' # left is computer's port right side is docker internal port
    volumes:
      - ./mongo-rs0-1/data:/data/db
    depends_on:
      - 'mongo-rs0-2'
      - 'mongo-rs0-3'

  mongo-rs0-2:
    image: 'mongo'
    command: --replSet rs0
    command: --config ./conf/mongo.conf
    ports:
      - '27018:27017'
    volumes:
      - ./mongo-rs0-2/data:/data/db
      - ./mongo-rs0-2/conf:/conf

  mongo-rs0-3:
    image: 'mongo'
    command: --replSet rs0
    command: --config ./conf/mongo.conf
    ports:
      - '27019:27017'
    volumes:
      - ./mongo-rs0-3/data:/data/db
      - ./mongo-rs0-2/conf:/conf

  setup-rs:
    image: 'setup-rs'
    build: ./setup
    depends_on:
      - 'mongo-rs0-1' # mongo-rs0-1 서비스가 실행중이어야 해당 서비스가 실행될 수 있다.

  adminmongo:
    image: 'mrvautin/adminmongo'
    ports:
      - '1234:1234'

【问题讨论】:

【参考方案1】:

我通过在 localhost 中注册主机名解决了它

任何需要在 localhost 中设置 mongo 副本集的人都可以使用 docker-compose 设置副本集。

https://github.com/frontalnh/mongodb-replica-set

【讨论】:

【参考方案2】:

您可能在 fork 模式下运行副本集的另一个节点,并且您在某个时候关闭了计算机。通过 mongod --config [your_config_file.conf] --fork 以 fork 模式重新启动这些节点为我解决了这个问题。

当所有其他辅助节点都无法访问时,主节点变为辅助节点,因此您将无法选择新的主节点。

尝试使用它们的配置文件重新启动其他节点,一切顺利。

【讨论】:

【参考方案3】:

只需重启当前的主节点即可。 重复此操作,直到所需节点成为主节点。之后就可以运行mongos了。

注意:确保数据库没有流量。

【讨论】:

以上是关于MongoDB 错误:连接到 mongo 副本集时无法到达集合 [set_name] 的主节点的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 连接到运行的 mongo 容器的 MongoDB 副本集

如何在 Docker 中将 Debezium 连接到 MongoDB?

mongo-express 没有连接到 mongodb

使用mongo_dart连接到MongoDB Atlas

如何在 Sails 中捕获 MongoDB 错误

[Database] MongoDB 副本集配置