当前位置:  开发笔记 > 数据库 > 正文

Azure VM上与MongoDb的连接超时

如何解决《AzureVM上与MongoDb的连接超时》经验,为你挑选了1个好方法。

将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方面的一个问题.

我错过了一些配置?



1> Davide Icard..:

经过一些搜索我的考虑因素:

在Azure上访问的每个资源(数据库,VM,...)上实现某种重试逻辑通常是一种很好的做法.对于MongoDb,有一个部分实现,所以你应该写自己的.另见本期和本期.

如果可能,Azure上的所有资源都应位于同一个Azure虚拟网络中(这样所有连接都使用Azure Private Ip而不是Public Ip.出于安全考虑,这也很有用,因为您不需要向公众开放端点.

在Azure上部署MongoDb时,请尝试遵循MongoDb官方指南.

在这种特殊情况下,您应该将net.ipv4.tcp_keepalive_time值设置为低于Azure的tcp keep alive,默认情况下为240秒.通过这种方式,连接被关闭,MongoDb驱动程序可以拦截这种情况并打开一个新连接.如果Azure关闭连接,则驱动程序无法拦截它.如果要在Azure上更改此设置(不推荐),可以在Public Ip配置中找到它.

在我的开发环境中,我设置net.ipv4.tcp_keepalive_time为120,现在一切似乎都运行正常.请注意,如果您在Docker容器中托管MondoDb,则应在Docker主机上设置此设置.

这里还有一些有用的链接:

http://focusmatic.tumblr.com/post/39569711018/solving-mongodb-connection-losses-on-windows-azure

https://docs.mongodb.org/ecosystem/platforms/windows-azure/

https://michaelmckeownblog.wordpress.com/2013/12/04/resolving-internal-ips-vs-dns-names-between-vms/

https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490

Azure上的MongoDB连接问题

MongoDB连接超时(Azure)

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有