我正在使用mongodb,两台服务器分别位于意大利和法国。
法国服务器运行Ubuntu服务器是副本集的主服务器,并且工作正常,即它接受来自mongo shell的连接,无论是本地还是远程,并且由python客户端不断更新。
意大利的第二台服务器与CentOS一起运行良好,但在作为副本集的一部分启动时会陷入STARTUP状态。日志表明它从主服务器接收配置。
我尝试了几个方法来解决这个问题,但没有一个能够解决问题:
此外,两个成员(法国:主要和意大利:次要成员)都以--auth, - relpSet rs0, - keyFile启动。
我之前在网上研究过这个问题,并在这里找到了最接近的答案: MonogoDB Replica Set Status Not changing from Startup to Secondary
但作者提到辅助设备没有收到使问题与此不同的配置。
感谢您的帮助。
答案 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")
它奏效了。