To łączy bez opóźnienia:Mongo połączenie php replika bardzo powolny
$connection = new MongoClient("mongodb://localhost:27017", array("replicaSet" => REPLICASET,'username'=>USER, 'password'=>PASSWORD, 'db'=>DATABASE));
Jednak ta trwa do 10 sekund, kiedy dodać wszystkie hosty z zestawu replik. Sterownik 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));
W logu opóźnienie wydaje się znajdować przy każdym połączeniu. Oto fragment z dziennika:
[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
Kiedy ssh do serwera podstawowego i spróbuj połączyć z terminalem jej szybko, jak dobrze.
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
Dlaczego połączenie się z PHP trwa tak długo?
20 lipca Aktualizacja:
zaktualizowałem Mongo na moim podstawowego serwera do 2.6.10, ale nadal trwa 5 sekund na mojej stronie testowej, aby załadować. Oto, jak próbuję się połączyć:
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() . "]");
}
Każda pomoc będzie doceniona.
Dwa udostępnione komunikaty dziennika nie wyglądają na zwyczajne. 60 sekund to domyślny limit czasu połączenia używany przez sterownik (przekroczenie limitu czasu gniazd domyślnie wynosi 30 sekund). Czy możesz śledzić z pełnym wyjściem MongoLog (wszystkie moduły i pełną szczegółowością)? Zobacz przykład na [MongoLog :: setCallback()] (http://php.net/manual/en/mongolog.setcallback.php), jeśli potrzebujesz kodu, aby to zrobić. Oczekuję, że pełny dziennik będzie zbyt duży dla PO, ale wystarczający będzie link do istoty i będę mógł przytoczyć odpowiednie linie w odpowiedzi. – jmikola
Witam jmikola. Oto treść: https://gist.githubusercontent.com/castles/a0f08297fcb3fad48b2a/raw/4ff15990a389f6285b9f4fe34813dd8f61d7f97e/gistfile1.txt – Castles
Inne niż połączenie 'demo.example.com.au: 27018', które zajmuje 5 sekund, nie zobacz cokolwiek niezwykłego w dziennikach.Moje pierwsze założenie było takie, że być może twój URI używał innych nazw hostów niż zgłoszonych przez isMaster, w którym to przypadku sterownik nie utrzymywałby połączeń z listą nasion. Czy możesz spróbować odtworzyć opóźnienie połączenia (do tego samego hosta/portu) za pomocą ['socket_create()'] (http://php.net/manual/en/function.socket-create.php) i ['socket_connect () '] (http://php.net/manual/en/function.socket-connect.php)? – jmikola