运行 aprox 后,从 C# 程序中安装 MongoDB 服务器后,我没有收到任何响应。超过1小时

问题描述 投票:0回答:1

我使用镜像版本 docker.io/bitnami/mongodb:7.0.2-debian-11-r7 在 Kubernetes 集群中部署了 MongoDB 服务器。 MongoDB 服务器由部署在具有 5 个副本的同一集群中的 C# 控制台应用程序访问,使用 MongoDB.Driver (2.22.0)。

应用程序连续查询 MongoDB 中的一个或多个集合,具体使用下面的 GetParemeterDetails 函数:

public BsonDocument GetParemeterDetails(string companyId, string applicationId, string id)
{
    MongoClient dbClient = new MongoClient(mongDBConnectionstr);
    var database = dbClient.GetDatabase($"derivedparameters{companyId}{applicationId}");
    var collection = database.GetCollection<BsonDocument>("Derived_Paramater_Config");
    var filter = Builders<BsonDocument>.Filter.Eq("Derived_Parameter_Id", id);
    var project = Builders<BsonDocument>.Projection.Exclude("_id");
    var funcLogDocument = collection.Find(filter).Project(project).FirstOrDefault();
    return funcLogDocument;
}

应用程序连续运行约1小时后,MongoDB服务器没有响应。

附加信息:

该问题是在升级项目中的多个组件后出现的,包括MongoDB服务器版本和驱动版本。 如果您能提供有关如何解决此 MongoDB 连接问题的任何见解或建议,我将不胜感激。谢谢你。

尝试过的解决方法:

  1. 1分钟后线程取消并重试,观察到多次重试失败,没有任何响应。
  2. 切换到FindAsync方法并等待,将问题的发生延迟到14小时左右。
  3. 尝试降级/升级 MongoDB 服务器版本(之前的 4.4.11)和驱动程序版本(之前的 2.12.0),但没有解决问题。
mongodb kubernetes mongodb-.net-driver bitnami
1个回答
0
投票

切勿使用

directConnection=true
。在极少数且非常特殊的情况下可能需要此选项。

没有错误日志,我们不仅仅是从服务器收到任何响应。

这是不可能的,如果驱动程序没有收到任何服务器响应,就会出现超时错误。

您没有提供任何日志(可以在 driverserver 端收集),但因为您指定了

directConnection=true
,我认为会发生这样的情况:

  1. 您使用具有很少节点的副本集。
  2. 在应用程序启动时,您连接到特定的 mongo 服务器(当时是主要的服务器)。并且设置
    directConnection
    强制驱动程序仅使用此服务器。
  3. 在某些时候,服务器宕机,这使得之前的主服务器=>辅助服务器(甚至不可用)。然后指定
    readPreference=primary
    ,这意味着您还强制驱动程序仅允许从主服务器读取,主服务器现在是与最初不同的服务器。因此,由于这 2 个连接字符串选项,在这种情况下驱动程序无法执行任何操作并失败。

您应该为连接字符串指定 replicaSet 选项。

© www.soinside.com 2019 - 2024. All rights reserved.