mongodb - replicar - mongo php réplica de conexión muy lenta
replicar mongodb (1)
No veo ninguna información de hardware en su pregunta y en términos de rendimiento en mi Q&A de Mongo asistente y hablando con los ingenieros que trabajan para mongo. Entiendo que verificar y elegir el hardware correcto y la ubicación física del hardware es un factor importante para acelerar las cosas.
1) ¿Están las réplicas en el mismo centro de datos? E incluso si están en el mismo centro de datos, la comunicación entre los servidores es rápida en términos de medir el tiempo para hacer ping y verificar el trazado de ruta entre cada una de las réplicas (es decir, 1 a 2, 1 a 3, 2 a 3). se pasan muchas transacciones entre las réplicas para mantenerse actualizados y si se encuentran en diferentes centros de datos, eso podría ser un factor. Por lo tanto, un tipo de solución sería garantizar que las réplicas estén lo suficientemente cerca y, a veces, incluso en el mismo centro de datos. Aunque hay algo que decir acerca de tener réplicas en diferentes centros de datos para la tolerancia de partición. 2) el ram y la cpu del hardware hacen la diferencia, tal vez aumentarlos también marcaría la diferencia, ya que el uso de unidades SSD acelera las cosas en general.
Además, y como nota al margen, un tipo de "solución alternativa" al problema que está viendo es agrupar las conexiones a mongodb para que las conexiones estén disponibles, pero me doy cuenta de que no es lo que está preguntando, está preguntando por la conexión. ¡Sí y por qué es lento!
Esto se conecta sin demora:
$connection = new MongoClient("mongodb://localhost:27017", array("replicaSet" => REPLICASET,''username''=>USER, ''password''=>PASSWORD, ''db''=>DATABASE));
Sin embargo, esto toma hasta 10 segundos cuando agrego todos los hosts del conjunto de réplicas. Driver 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));
En el registro el retraso parece estar en cada conexión. Aquí hay un extracto del registro:
[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
Cuando ssh en el servidor primario e intente conectar desde el terminal también es rápido.
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
¿Por qué PHP tarda tanto en conectarse?
Actualización del 20 de julio:
He actualizado mongo en mi servidor primario a 2.6.10, pero todavía demora 5 segundos para que se cargue mi página de prueba. Así es como estoy intentando conectar:
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() . "]");
}
Cualquier ayuda sería apreciada.