我有一個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