MongoDB错误:连接到mongo副本集时,无法达到集合[set_name]的主要数据库

时间:2018-10-23 01:51:39

标签: mongodb docker-compose replicaset

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

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

我制作了由3个MongoDB docker-container组成的docker swarm,并将每个端口映射到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 Compose

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'

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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