将我的 Azure Web 应用程序连接到 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 配置在单个服务器上(仅用于开发),并且通过公共 IP 公开。网站使用天蓝色域名 (*.westeurope.cloudapp.azure.com) 连接到它,无需虚拟网络。
通常一切正常,但几分钟不活动后我会遇到超时异常。从我的电脑上使用 MongoDb shell 时也会发生同样的情况,所以我很确定这是 mongodb 方面的问题。
我缺少一些配置吗?
经过一番搜索后我的考虑:
- 对 Azure 上访问的每个资源(数据库、VM 等)实施某种重试逻辑通常是一种很好的做法。对于 MongoDb 有一个部分实现,因此您应该编写自己的实现。也可以看看这个问题 https://jira.mongodb.org/browse/CSHARP-1343 and this https://jira.mongodb.org/browse/SERVER-28916.
- 如果可能,Azure 上的所有资源都应位于同一个 Azure 虚拟网络中(这样,所有连接都使用 Azure 专用 Ip 而不是公共 Ip 进行。出于安全原因,这也很有用,因为您不需要向公众开放端点。
- 在Azure上部署MongoDb时尝试遵循官方MongoDb 指南 https://docs.mongodb.org/ecosystem/platforms/windows-azure/.
- 在这种特殊情况下,您应该设置
net.ipv4.tcp_keepalive_time
更改为低于 Azure 的 TCP 保持活动时间的值(默认情况下为 240 秒)。通过这种方式,连接被关闭,MongoDb 驱动程序可以拦截此情况并打开一个新连接。如果 Azure 关闭连接,则驱动程序无法拦截它。如果您想在 Azure 上更改此设置(不推荐),您可以在公共 IP 配置中找到它。
在我的开发环境中我设置了net.ipv4.tcp_keepalive_time
到 120 现在一切似乎都正常。考虑一下,如果您在 Docker 容器内托管 MongoDb,则应该在 Docker 主机上设置此设置。
这里还有一些其他有用的链接:
- http://focusmatic.tumblr.com/post/39569711018/solving-mongodb-connection-losses-on-windows-azure http://focusmatic.tumblr.com/post/39569711018/solving-mongodb-connection-losses-on-windows-azure
- https://docs.mongodb.org/ecosystem/platforms/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://michaelmckeownblog.wordpress.com/2013/12/04/resolving-internal-ips-vs-dns-names-between-vms/
- https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490 https://gist.github.com/davideicardi/f2094c4c3f3e00fbd490
- Azure 上的 MongoDB 连接问题 https://stackoverflow.com/questions/28695879/mongodb-connection-problems-on-azure
- MongoDB 连接超时 (Azure) https://stackoverflow.com/questions/16322874/mongodb-connection-timeouts-azure?rq=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)