[英]Connection timeout to MongoDb on Azure VM
將Azure Web App連接到Azure VM上托管的MongoDb時,我遇到了一些超時問題。
2015-12-19T15:57:47.330+0100 I NETWORK Socket recv() errno:10060 A connection attempt
failed because the connected party did not properly respond after a period of time,
or established connection failed because connected host has failed to respond.
2015-12-19T15:57:47.343+0100 I NETWORK SocketException: remote: 104.45.x.x:27017 error:
9001 socket exception [RECV_ERROR] server [104.45.x.x:27017]
2015-12-19T15:57:47.350+0100 I NETWORK DBClientCursor::init call() failed
目前mongodb配置在單個服務器上(僅適用於dev),並通過公共IP公開。 網站使用azure域名(* .westeurope.cloudapp.azure.com)連接到它,沒有虛擬網絡。
通常一切都運行良好,但在幾分鍾不活動后,我得到超時異常。 從我的PC上使用MongoDb shell時會發生同樣的情況,所以我很確定這是mongodb方面的一個問題。
我錯過了一些配置?
經過一些搜索我的考慮因素:
net.ipv4.tcp_keepalive_time
設置為低於Azure的tcp保持活動狀態的值,默認情況下為240秒。 通過這種方式,連接被關閉,MongoDb驅動程序可以攔截這種情況並打開一個新連接。 如果Azure關閉連接,則驅動程序無法攔截它。 如果要在Azure上更改此設置(不推薦),可以在Public Ip配置中找到它。 在我的開發環境中,我將net.ipv4.tcp_keepalive_time
設置為120,現在一切似乎都正常。 請注意,如果您在Docker容器中托管MondoDb,則應在Docker主機上設置此設置。
這里還有一些有用的鏈接:
使用C#Mongo驅動程序時,我們通過設置以下內容解決了這個問題
MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromMinutes(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.