MongoDB没有在副本集中分发读取

MongoDB没有在副本集中分发读取,mongodb,Mongodb,我们在一个副本集中有三台服务器。例如,ServerA是主服务器,而ServerB和ServerC是辅助服务器。在对环境进行压力测试时,ServerA上的服务器负载已达到4.00左右,而二级服务器负载保持在0.00左右。压力测试的URL目标不向mongo执行任何写入操作,但读取操作似乎没有分发到辅助设备 我们使用的是官方的C#driver ServerA日志显示了许多正在打开的连接、lsn集合条目和一堆“killcursors”命令——显然它正在为页面提供服务。然而,ServerB和ServerC

我们在一个副本集中有三台服务器。例如,ServerA是主服务器,而ServerB和ServerC是辅助服务器。在对环境进行压力测试时,ServerA上的服务器负载已达到4.00左右,而二级服务器负载保持在0.00左右。压力测试的URL目标不向mongo执行任何写入操作,但读取操作似乎没有分发到辅助设备

我们使用的是官方的C#driver

ServerA日志显示了许多正在打开的连接、lsn集合条目和一堆“killcursors”命令——显然它正在为页面提供服务。然而,ServerB和ServerC只显示来自web服务器的初始连接(其中四个),之后日志中只显示“lsn set”条目。几分钟后,最初的四个连接超时并关闭

副本集处于完全工作状态。我可以阻止mongo进行初选,然后二级将正确地选择一个新的初选

Web.config中的连接字符串:

<connectionStrings>
    <add name="wellness.mongodb" connectionString="mongodb://serverA:27017,serverB:27017,serverC:27017/mydatabase?safe=true;replicaset=myreplicaset;slaveok=true" />
</connectionStrings>


我们做错了什么?

连接字符串看起来正常。我将尝试复制并报告。

您使用的官方C#驱动程序的确切版本是什么?您必须指定slaveOK吗?如果您使用的是github主分支的最新版本的C#驱动程序,我发现了一个错误,导致所有读取都发送到同一服务器。修复程序已推送到github。如果您使用的是v1.0版本,那么我需要进一步调查。我们使用的是v1.0版本,但我们将从github试用最新版本。我将很快跟进。当我使用v1.0驱动程序进行测试时,我看到读取正确地分布在二级数据库中。只有在使用来自github的最新驱动程序源时,才会出现错误(现已修复)。如果读取是与v1.0驱动程序一起分发的,那么最好的方法是什么?也许我误解了日志?我通过两种方式确认了这一点:我在驱动程序中设置了一个断点,在读取发生的位置,并检查了读取要到哪个服务器。在我的例子中,我有两个二级读物,所以它们之间的读物是交替的。我还使用-vvv标志启动了mongod,这样它就可以将查询回显到控制台窗口,并且我看到查询被回显到两个辅助窗口。