Mongo php replica соединение очень медленное
Это соединение без задержки:
$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 так долго подключается?
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() . "]");
}
Любая помощь будет оценена.
Ответы
Ответ 1
Я не вижу никакой информации об оборудовании в вашем вопросе и с точки зрения производительности в моем посещающем монго Q & A и разговоре с инженерами, работающими на монго, я понимаю, что проверка и выбор правильного аппаратного и физического расположения аппаратного обеспечения является большим фактором в ускорении.
1) Являются ли реплики в одном центре данных? И даже если они находятся в одном и том же центре данных, это связь между серверами с точки зрения измерения времени для пинга и проверки трассировки между каждой из реплик (то есть от 1 до 2, от 1 до 3, от 2 до 3)
есть много транзакций, проходящих между репликами, чтобы поддерживать себя в актуальном состоянии, и если они находятся в разных центрах обработки данных, которые могут быть фактором. Таким образом, тип решения будет заключаться в обеспечении того, чтобы реплики были достаточно близки, а иногда даже в одном и том же центре данных. Хотя есть кое-что, что можно сказать, для того, чтобы иметь реплику в разных датацентрах для толерантности раздела.
2) RAM и процессор аппаратного обеспечения делают разницу, возможно, увеличивая их, и это будет иметь значение, а использование SSD-накопителей ускоряет работу в целом.
Кроме того, в качестве дополнительной заметки тип "обходного пути" к проблеме, которую вы видите, - это объединение соединений с mongodb, чтобы соединения были легко доступны, но я понимаю, что вы не просите, вы спрашиваете о самой связи и почему она медленная!