当Read Preference为Primary(默认)时,为什么MongoDB C#Client 2.0会创建与副本集的每个成员的连接?
我有一个MaxPoolSize设置为100的应用程序,但它创建了300个连接,一个连接到副本集中的每个节点。当它从种子列表中收到的数据中确定哪个节点是主节点时,它应该只连接到主节点吗?
我有两个数据节点和一个仲裁器。这两个数据节点在地理位置上与消费应用程序接近,仲裁器的ping时间更长。虽然我认识到需要至少在MongoClient级别连接一次。 为什么池需要连接到每个池连接上的所有节点?
我只允许读取主要的首选项,因此它是从单个服务器进行写入和读取。问题是我遇到了很多连接错误(因此我对此进行了研究并发现了这一点)。
我认为客户端应该连接到池连接上的单个服务器,如果写入则为Primary,在读取时为池中的辅助或主要,具体取决于读取首选项。它不应该多次连接到Arbiter。
我在这里遗漏了什么吗?当我破坏我的池连接并且连接受到Azure负载平衡器的限制时,它会导致问题。
我的连接字符串:
的mongodb://用户:pass@mongo1.domain.com:27000,mongo2.domain.com:27000
注意我没有指定仲裁器,它发现在查询副本集后,继续打开100个连接,没用,因为它没有数据。