如何解决部署到 Docker Swarm 的应用程序未与 MongoDB 副本集连接 解决方案
我已经在 3 台机器上使用 Docker Swarm 部署了我的应用程序。
MongoDB 副本集是手动配置的,它在 Ubuntu 机器上作为服务运行。
我正在尝试将我的后端应用程序连接到 MongoDB 副本集,但出现超出上下文截止日期错误。我使用 Private-ip
进行连接,因为机器在同一个 AWS VPC 中。端口27017
在安全组中开放,可供VPC网络IP使用。
/etc/hosts
在每台机器上都正确配置。
我正在使用 Docker-Compose
文件来部署堆栈。
副本集工作正常。我已经通过手动插入几个文件进行了检查。
图片将帮助读者更好地理解上下文。
缩写
- BE = 后端
- FE = 前端
- Mac 1 = 机器 1
- AZ-1 = 可用区 1
- VPC = 虚拟私有云
我的猜测:
是不是因为 Replica-Set 不在 Swarm Network 中,这就是它无法连接的原因???
我尝试解决这个问题已经有一段时间了,但还没有成功。现在需要帮助。
解决方法
我找到了解决方案。
问题与 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",{
"_id" : 2,"host" : "node3:27017","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 中的第三个 mongo 条目做了同样的处理。
希望这能帮助读者解决类似的问题。
这是更改副本集中主机名的链接。
https://docs.mongodb.com/manual/tutorial/change-hostnames-in-a-replica-set/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。