我使用镜像版本 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 连接问题的任何见解或建议,我将不胜感激。谢谢你。
尝试过的解决方法:
切勿使用
directConnection=true
。在极少数且非常特殊的情况下可能需要此选项。
没有错误日志,我们不仅仅是从服务器收到任何响应。
这是不可能的,如果驱动程序没有收到任何服务器响应,就会出现超时错误。
您没有提供任何日志(可以在 driver 和 server 端收集),但因为您指定了
directConnection=true
,我认为会发生这样的情况:
directConnection
强制驱动程序仅使用此服务器。readPreference=primary
,这意味着您还强制驱动程序仅允许从主服务器读取,主服务器现在是与最初不同的服务器。因此,由于这 2 个连接字符串选项,在这种情况下驱动程序无法执行任何操作并失败。您应该为连接字符串指定 replicaSet 选项。