【问题标题】:Unable to create a replica set in mongoDB: "ok" : 0无法在 mongoDB 中创建副本集:“ok”:0
【发布时间】:2020-02-11 00:53:21
【问题描述】:

我正在使用 Oracle Virtualbox 托管 3 个运行 CentOS 7 的 VM。

Vbox 网络设置为:

primary-db Adapter1:NAT 模式,网络设置中没有转发规则 & Adapter2:Bridge 模式,混杂模式=全部允许

secondary-db1 Adapter1:NAT 模式,网络设置中没有转发规则 & Adapter2:桥接模式,混杂模式=全部允许

secondary-db2 Adapter1:NAT 模式,网络设置中没有转发规则 & Adapter2:Bridge 模式,混杂模式=全部允许

  1. 我已将 27017 端口添加到防火墙。 (我还添加了 27018 到 测试)
  2. 已创建 /data/db。
  3. 我已经在每台服务器的 /etc/hosts 文件中添加了所有主机 IP,并且 评论了 127.0.0.1 行
  4. 我已经像这样配置了所有的 mongo.conf 文件:
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

processManagement:
  fork: true  
  pidFilePath: /var/run/mongodb/mongod.pid 
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27017
  bindIp: 192.168.1--.---,127.0.0.1

replication:
  replSetName: "replica01"

问题:

现在当我运行

# mongo -host <secondary-db server/192.168.---.---> -port 27017

在主服务器,我可以进入从服务器的mongo shell

但是当我尝试使用

rs.add('secondary-db1')

rs.add('secondary-db1:27017') 

我不断收到这个:

replica01:PRIMARY> rs.add('secondary-db')
{
        "operationTime" : Timestamp(1581381570, 1),
        "ok" : 0,
        "errmsg" : "Either all host names in a replica set configuration must be localhost references, or none must be; found 1 out of 2",
        "code" : 103,
        "codeName" : "NewReplicaSetConfigurationIncompatible",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1581381570, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
replica01:PRIMARY>

我什至尝试评论 bindIP 行以进行测试,但它给了我相同的结果。我有没有看过一些东西? 我用过这个tutorial as my reference.

【问题讨论】:

    标签: mongodb virtualbox centos7 replicaset


    【解决方案1】:

    只是为了健全性检查:

    每个节点都有一个单独/不同的端口 每个节点都有一个单独/不同的目录文件夹

    从您的帖子中不清楚...您仅通过防火墙声明了 1 个端口,但每个节点都需要自己的端口、文件夹 - 它们都是独立且并行的....

    直接登录到 1 个节点并首先执行以下操作: rs.initiate()

    然后为其他 2 个节点执行 rs.add

    这会将它们分组到一个副本集

    【讨论】:

    • 你的意思是如果我在节点 1 上打开 27017,我应该在节点 2 上打开 27018,在节点 3 上打开 27019?
    【解决方案2】:

    如果您的问题是节点的设置 - 肯定是的 - 它们每个都必须是一个单独且不同的端口,并且它们需要驻留在单独的 dir 文件夹中......

    如果您的问题是关于防火墙/前端的:我在数据方面的工作更多是通过查询而不是前端...但它是一个副本集,如果主服务器出现故障,您的应用程序需要适用于任何一个辅助节点(无论哪个被选举为主节点都是随机的)......

    Mongo 有一所免费的大学,而 M103 课程专门关于旋转副本集 - 您可以快速观看视频以加快速度......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      相关资源
      最近更新 更多