這沒有延遲連接:蒙戈PHP副本連接很慢
$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日更新:
我已經更新了我的主服務器上蒙戈到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() . "]");
}
任何幫助,將不勝感激。
您共享的兩條日誌消息不會顯得不尋常。 60秒是驅動程序使用的默認連接超時(此後套接字超時默認爲30秒)。 你可以跟進你的完整的MongoLog輸出(所有模塊和完整的冗長)嗎?如果您需要一些代碼,請參見[MongoLog :: setCallback()](http://php.net/manual/en/mongolog.setcallback.php)上的示例。我預計OP的完整日誌可能太大了,但是一個要點的鏈接就足夠了,我可以引用相關的迴應。 – jmikola
hi jmikola。這是要點:https://gist.githubusercontent.com/castles/a0f08297fcb3fad48b2a/raw/4ff15990a389f6285b9f4fe34813dd8f61d7f97e/gistfile1.txt – Castles
除了'demo.example.com.au:27018'連接需要5秒鐘,我沒有在日誌中看到任何不尋常的東西。我的第一個假設是,也許你的URI使用的是不同於isMaster報告的主機名,在這種情況下,驅動程序不會保留種子列表連接。你能嘗試用['socket_create()'](http://php.net/manual/en/function.socket-create.php)和['socket_connect()來重現連接延遲(到同一個主機/端口) )'](http://php.net/manual/en/function.socket-connect.php)? – jmikola