MongoDB 3.6副本卡在STARTUP

时间:2018-03-25 09:40:49

标签: mongodb replication

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

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

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

我尝试了几个方法来解决这个问题,但没有一个能够解决问题:

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

此外,两个成员(法国:主要和意大利:次要成员)都以--auth, - relpSet rs0, - keyFile启动。

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

但作者提到辅助设备没有收到使问题与此不同的配置。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

遇到类似问题。您正在运行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

答案 1 :(得分:0)

我遇到了同样的问题,为我解决的问题是确保每个成员的姓名都使用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")

它奏效了。