我用3台机器部署了我的应用程序。
MongoDB副本集是手动配置的,它作为Ubuntu机器上的服务工作。
我正在尝试连接到我的后端应用程序到MongoDB副本集,但我的上下文截止日期超过了错误。我使用Private-ip来连接,因为机器都在同一个AWS中。端口27017在安全组中是开放的,可以被VPC网络IP使用。
在每台计算机上都正确配置了/etc/hosts。
我使用Docker-Compose文件来部署堆栈。
复制件工作正常。我用手工插入了很少的文件来检查它。
这幅画将帮助读者更好地理解上下文。
缩略语
h 117VPC=虚拟私有云H 218f 219
我猜:
是因为复制-设置不是在群集网络中,这就是为什么它无法连接?
我正试图解决这个问题很长一段时间,但还没有成功。现在需要帮助。

发布于 2021-06-02 10:18:46
我找到了解决办法。
这个问题与MongoDB副本实例的名称有关。
第一个成员的主机名是"host" : "10.0.0.223:27017"
"host" : "node2:27017"
"host" : "node3:27017"。
由于这种不一致性,后端应用程序无法连接到副本集。
{
"_id" : "replica1",
"version" : 5,
"term" : 5,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{
"_id" : 0,
"host" : "10.0.0.223:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "node2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "node3:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],解决方案
为了解决这个问题,我用私有IP重新配置了副本集节点。用于复制集配置的私有IP的节点。
第一个ssh到主机器。登录到mongo主节点shell并执行以下命令,以更改JSON中第二个mongo节点的主机条目。
> cfg = rs.conf()
> cfg.members[2].host = "10.0.5.242:27017" (Private IP of second mongodb instance)
> rs.reconfig(cfg)在JSON中的第三条芒果条目也是如此。
下面是在副本集中更改主机名的链接。
https://docs.mongodb.com/manual/tutorial/change-hostnames-in-a-replica-set/
另一个解决方案:
如果您的MongoDB部署都很好,并且一切都已正确设置,但仍然无法连接到DB,请尝试使用Change the Primary DB Instance。
ssh到主machine.replica:PRIMARY>rs.stepDown(120)。这将使您的其他实例主实例和当前实例成为次要实例.我经历了这个问题,经过连续3天的尝试,这个解决方案对我有效。
希望这能帮助读者解决类似的问题。
https://stackoverflow.com/questions/67751750
复制相似问题