我有一个node.js应用程序在Azure中作为App Service运行。它通过mongoose + tunnel-ssh连接到MongoDB。我有多个应用程序服务部署在各种地理位置,一切正常。作为App Service运行在Azure中的node.js应用程序的临时插槽为我提供了EADDRINUSE
当我创建我获得以下从SSH隧道为分期例如错误的暂存插槽(注:PROD插槽仍然正常工作):
{"code":"EADDRINUSE", "errno":"EADDRINUSE", "syscall":"listen", "address":"127.0.0.1", "port":27017}
对我来说,似乎上演插槽上运行相同的虚拟机,并尝试使用相同的端口作为生产,这就是为什么它无法建立到数据库的连接。这意味着我可能无法扩展应用程序,因为另一个实例会遇到同样的问题。
我该如何解决这个问题,用于分段和其他实例(缩放时)?
分期可以使用不同的端口,但如何动态地设置它,所以它也将努力调整后的情况?
我做了更多的挖掘 - 我已经隔离了我的网络应用程序,除了我之外没有人能够访问它。我已经重新启动了prod和stg插槽,并且我以相同的情况结束了 - prod能够通过SSH连接到数据库,而不是stg。当我停止刺激时,stg突然间能够连接,但是在启用刺激之后,整个问题都在这个插槽中移动。在我看来,只有一个插槽可以创建和使用ssh隧道(使用端口)。 – Michal
您正在使用哪种mongodb服务?因为它让我困惑,你的错误信息显示为“address”:“127.0.0.1”。目前,您可以为您的插槽启用mongodb的不同端口,并为mongodb连接字符串在不同的插槽中设置不同的应用程序设置,作为解决方法。 –
它是从Azure托管的Bitnami进行复制的MongoDB。地址是localhost,因为我创建了一个ssh隧道,将流量转发到托管Mongo的虚拟机的公共IP。配置应该可以,因为它适用于一个插槽。问题是第二个不能建立连接。 – Michal