gpt4 book ai didi

mongodb - Azure VM 上的 MongoDb 连接超时

转载 作者:IT老高 更新时间:2023-10-28 13:31:48 26 4
gpt4 key购买 nike

将我的 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 配置在单个服务器上(仅用于开发),并且通过公共(public) IP 公开。网站使用 azure 域名 (*.westeurope.cloudapp.azure.com) 连接到它,无需虚拟网络。

通常一切正常,但在几分钟不活动后我会遇到超时异常。从我的电脑上使用 MongoDb shell 时也会发生同样的情况,所以我很确定这是 mongodb 端的问题。

我缺少一些配置?

最佳答案

经过一番搜索后我的考虑:

  • 对 Azure 上访问的每个资源(数据库、VM 等)实现某种重试逻辑通常是一种很好的做法。对于 MongoDb 有一个部分实现,因此您应该编写自己的实现。另请参阅this issuethis .
  • 如果可能,Azure 上的所有资源都应位于同一个 Azure 虚拟网络中(这样所有连接都使用 Azure 专用 Ip 而不是公共(public) Ip 进行。出于安全原因,这也很有用,因为您不需要打开端点向公众公开。
  • 在 Azure 上部署 MongoDb 时,请尝试遵循官方 MongoDb guidelines
  • 在这种特殊情况下,您应该将 net.ipv4.tcp_keepalive_time 设置为低于 Azure 的 tcp keepalive 的值(默认情况下为 240 秒)。通过这种方式,连接被关闭,MongoDb 驱动程序可以拦截此情况并打开一个新连接。如果 Azure 关闭连接,则驱动程序无法拦截它。如果您想在 Azure 上更改此设置(不推荐),您可以在公共(public) IP 配置中找到它。

在我的开发环境中,我已将 net.ipv4.tcp_keepalive_time 设置为 120,现在一切似乎都工作正常。考虑一下,如果您在 Docker 容器内托管 MondoDb,则应在 Docker 主机上设置此设置。

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

关于mongodb - Azure VM 上的 MongoDb 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com