Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP客户端的Mongodb复制集,避免节点之间的连接_Php_Mongodb_Replicaset - Fatal编程技术网

使用PHP客户端的Mongodb复制集,避免节点之间的连接

使用PHP客户端的Mongodb复制集,避免节点之间的连接,php,mongodb,replicaset,Php,Mongodb,Replicaset,我们有一个Mongodb复制集,有两个节点,每个节点位于不同国家/地区的不同CPD中 两个节点之间的延迟是可测量的。这在写入数据时不是问题,因为这是使用脱机进程每天完成一次 但是在读取时,在每个请求中,节点都会在它们之间建立连接,这会占用大量时间,使请求速度变慢,并在网络上造成问题 我们发现主节点和辅助节点之间有约700个连接打开 我尝试了几种连接、连接字符串和readPreference设置,但这种情况经常发生 是否有任何方式可以在每个请求的节点之间不进行连接?当节点之间的距离不是很近时,人们

我们有一个Mongodb复制集,有两个节点,每个节点位于不同国家/地区的不同CPD中

两个节点之间的延迟是可测量的。这在写入数据时不是问题,因为这是使用脱机进程每天完成一次

但是在读取时,在每个请求中,节点都会在它们之间建立连接,这会占用大量时间,使请求速度变慢,并在网络上造成问题

我们发现主节点和辅助节点之间有约700个连接打开

我尝试了几种连接、连接字符串和readPreference设置,但这种情况经常发生

是否有任何方式可以在每个请求的节点之间不进行连接?当节点之间的距离不是很近时,人们如何处理这个问题

编辑:

如果我重复运行测试脚本,有时会非常快。我在蒙古语的细节中看到了这一点:

180 [+0.004990] IO FINE getting cursor body
181 [+0.005032] CON FINE No timeout changes for xxxx:27017;rs1;.;101877
182 [+0.005080] CON FINE Initializing cursor timeout to 30000 (from connection options)
183 [+0.005095] CON INFO command supports Read Preferences
184 [+0.005109] CON INFO mongo_get_read_write_connection: finding a REPLSET connection (read)
185 [+0.005128] CON FINE found connection xxxxx:27017;rs1;.;101877 (looking for xxxx:27017;rs1;.;101877)
186 [+0.005140] CON FINE is_ping: skipping: last ran at 1432113918, now: 1432113922, time left: 1
187 [+0.005153] CON FINE found connection yyyy:27017;rs1;.;101877 (looking for yyyyy:27017;rs1;.;101877)
188 [+0.005163] CON FINE is_ping: skipping: last ran at 1432113919, now: 1432113922, time left: 2
189 [+0.005175] CON FINE discover_topology: checking ismaster for xxxxx:27017;rs1;.;101877
190 [+0.005186] CON FINE found connection xxxx:27017;rs1;.;101877 (looking for xxxxx:27017;rs1;.;101877)
191 [+0.005196] CON FINE ismaster: skipping: last ran at 1432113919, now: 1432113922, time left: 12
192 [+0.005206] CON FINE discover_topology: ismaster got skipped
193 [+0.005218] CON FINE discover_topology: checking ismaster for yyyyy:27017;rs1;.;101877
194 [+0.005228] CON FINE found connection yyyyy:27017;rs1;.;101877 (looking for yyyyy:27017;rs1;.;101877)
195 [+0.005237] CON FINE ismaster: skipping: last ran at 1432113919, now: 1432113922, time left: 12
196 [+0.005246] CON FINE discover_topology: ismaster got skipped

当3个计时器中的任何一个达到0时,连接就建立起来。看起来我可以增加3次检查的间隔,对吗?

我最终通过以下更改解决了问题:

  • mongo.is\u master\u interval
    mongo.ping\u interval
    设置更改为更高的值
  • 更改读取和写入操作的连接设置。对于读取,我使用独立连接配置(不带replicaSet参数),对于写入,我使用replicaSet配置。这样,读取操作就不会在服务器之间产生连接

您的
主节点
次节点
是否在不同的数据中心?是的,确实在不同的大陆,这些连接是否只有在请求完成时才会打开,或者是定期打开?我发现它们时有发生:编辑我的问题您觉得奇怪吗?除了数据同步,节点还定期检查可用性,在不可用时进行选择等。