mongophp复制连接非常慢

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (20)

它毫不拖延地连接:

$connection = new MongoClient("mongodb://localhost:27017", array("replicaSet" => REPLICASET,'username'=>USER, 'password'=>PASSWORD, 'db'=>DATABASE));

但是,当我从复制集中添加所有主机时,这需要10秒的时间。PHP驱动程序(1.6.7)

$connection = new MongoClient("mongodb://".HOST_1.":27017,".HOST_2.":27017,".HOST_3.":27018", array("replicaSet" => REPLICASET,'username'=>USER, 'password'=>PASSWORD, 'db'=>DATABASE));

在日志中,每个连接似乎都有延迟。下面是日志的摘录:

[22-Jun-2015 12:04:41 Australia/ACT] PHP Notice:  CON     FINE: Connecting to tcp://ec2-XX-XXX-XXX-XXX.ap-southeast-2.compute.amazonaws.com:27017 (ec2-XX-XXX-XXX-XXX.ap-southeast-2.compute.amazonaws.com:27017;launch;launch/launch/55a850dad20e018890350ece678dc293;15873) with connection timeout: 60.000000 in /home/user/public_html/test.php on line 52
[22-Jun-2015 12:04:47 Australia/ACT] PHP Notice:  CON     INFO: stream_connect: Not establishing SSL for ec2-XX-XXX-XXX-XXX.ap-southeast-2.compute.amazonaws.com:27017 in /home/user/public_html/test.php on line 52

当我将ssh连接到主服务器并尝试从终端连接时,它的速度也很快。

mongo --host "launch/host:27017,ec2-XX-XXX-XXX-XXX.ap-southeast-2.compute.amazonaws.com:27017,host2:27018" --authenticationDatabase launch -u USERNAME -p PASSWORD

为什么PHP要花这么长时间连接?

7月20日最新情况:

我已经将主服务器上的mongo更新为2.6.10,但加载测试页面仍然需要5秒时间。这就是我试图连接的方式:

error_reporting(E_ALL);
MongoLog::setLevel(MongoLog::ALL);
MongoLog::setModule(MongoLog::ALL);

try {
    $connection = new MongoClient("mongodb://host1:27017,ec2host1:27017,ec2arbiterhost:27017", array("replicaSet" => "setname",'username'=>USER, 'password'=>PASSWORD, 'db'=>DATABASE));

    echo 'connected';

} catch (MongoConnectionException $e) {
  die("Unable to connect to database [code: " . $e->getCode() . "]");
}

任何帮助都将不胜感激。

提问于
用户回答回答于

我在你的问题中没有看到任何硬件方面的信息,就我参加的Mongo问答和与mongo公司的工程师交谈时的表现而言,我理解检查和选择正确的硬件和硬件的物理位置是加快速度的一个重要因素。

1)副本是否位于同一数据中心?即使它们位于同一数据中心,服务器之间的通信也是快速的,以测量每个副本(即1到2、1至3)之间的ping时间和Traceroute检查时间。(2到3)在副本之间传递了很多事务,以保持自身的最新,如果它们位于不同的数据中心,这可能是一个因素。因此,一种解决方案是确保副本足够接近,有时甚至在同一个数据中心。尽管对于在不同的数据中心中拥有副本有一些需要说明的地方,以实现分区容限。2)硬件的RAM和CPU可能会产生不同,增加这些可能也会产生不同,使用SSD驱动器一般会加快速度。

另外,顺便指出,看到的问题的一种“解决办法”是将连接集中到MongoDB,这样连接就可以很容易地获得,但我知道这不是想要的。正在询问连接本身以及为什么连接速度慢!

扫码关注云+社区