【问题标题】:MongoDB 3.6 replica stuck on STARTUPMongoDB 3.6 副本卡在 STARTUP
【发布时间】:2018-03-25 09:40:48
【问题描述】:

我正在使用 mongodb,两台服务器分别位于意大利和法国。

法国服务器运行 Ubuntu 服务器是副本集的主服务器,工作正常,即它接受来自 mongo shell 的本地或远程连接,并由 python 客户端持续更新。

意大利的第二台服务器在 CentOS 上独立运行良好,但在作为副本集的一部分启动时卡在 STARTUP 状态。日志表明它从主服务器接收到配置。

我尝试了几种方法来解决这个问题,但都没有奏效:

  • 尝试在副本集成员之间使用(或不使用)密钥文件。
  • 使用 nmap 检查防火墙两侧是否打开
  • 添加 iptables 规则以断言 mongodb 端口接受输入/输出流量。
  • 检查 mongod 是否已启动并监听双方的所有 IP。
  • 在使用 --replSet 重新启动之前,在辅助服务器上配置(或不)相同的管理员用户。此步骤只能在辅助节点独立时执行,因为作为副本集的成员启动,它处于瞬态,因此它不接受用户创建。因此,登录到辅助服务器失败。

另外两个成员(法国:primary 和意大利:secondary)都以 --auth、--replSet rs0、--keyFile 开头。

我之前在网上研究过这个问题,在这里找到了最接近的答案: MonogoDB Replica Set Status Not changing from Startup to Secondary

但是作者提到辅助没有收到配置,这使得问题与这个不同。

感谢您的帮助。

【问题讨论】:

  • 我遇到了几乎相同的问题。你解决过这个问题吗?

标签: mongodb replication


【解决方案1】:

遇到了类似的问题。你在运行 iptables 还是 nftables?

对我来说,接受从127.0.0.0/8 到端口27017 的入站数据包和到127.0.0.0/8 端口27017 的出站数据包就可以了。

这是我使用 nft 添加的规则,但它们特定于我的 nftables 设置,因此它们可能无法按原样为您工作。

nft add rule inet filter input ip saddr 127.0.0.0/8 tcp dport 27017 accept
nft add rule inet filter output ip daddr 127.0.0.0/8 tcp dport 27017 accept

这里是 iptables 的等价物。

iptables -A INPUT -s 127.0.0.0/8 -p tcp -m tcp --dport 27017 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -p tcp -m tcp --dport 27017 -j ACCEPT

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,为我解决的问题是确保每个成员的名称使用的是 IP 地址而不是主机名。我只需重新配置即可将副本集中的成员更改为使用 IP 地址

    conf=rs.conf()
    conf.members[0].host="XX.XX.XX.XX:27017"
    conf.members[1].host="XX.XX.XX.XX:27017"
    conf.members[2].host="XX.XX.XX.XX:27017"
    rs.reconfig(conf, {force: true})
    

    然后我通过 IP 地址添加了我的新成员

    rs.add("XX.XX.XX.XX:27017")
    

    它成功了。

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 2021-02-15
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      相关资源
      最近更新 更多