将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方面的一个问题。
我错过了一些配置?
答案 0 :(得分:11)
在这里搜索了一些我的注意事项:
net.ipv4.tcp_keepalive_time
设置为低于Azure的tcp保持活动的值,默认情况下为240秒。通过这种方式,连接被关闭,MongoDb驱动程序可以拦截这种情况并打开一个新连接。如果Azure关闭连接,则驱动程序无法拦截它。如果要在Azure上更改此设置(不推荐),可以在Public Ip配置中找到它。在我的开发环境中,我已将net.ipv4.tcp_keepalive_time
设置为120,现在一切似乎都正常。请注意,如果您在Docker容器中托管MondoDb,则应在Docker主机上设置此设置。
这里有一些其他有用的链接:
答案 1 :(得分:4)
使用C#Mongo驱动程序时,我们通过设置以下
解决了这个问题MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromMinutes(1);