Conjuntos de réplicas

Para conectarse a un grupo réplica, se debe especificar uno o más miembros del grupo usando la opción replicaSet. Se pueden delimitar múltiples servidores mediante comas.

Ejemplo #1 Lista de semillas de ReplicaSet

<?php
// Usar múltiples servidores como lista de semillas (preferido)
$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName");

// Usar un servidor como lista de semillas
$m = new MongoClient("mongodb://rs1.example.com:27017", array("replicaSet" => "myReplSetName"));

// Usar múltiples servidores como lista de semillas
$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017", array("replicaSet" => "myReplSetName"));
?>

El driver de PHP hará una petición al servidor(es) de base de datos listados para determinar el primario. Mientras se pueda conectar almenos a uno de los servidores listados y pueda encontrar un primario, la conexión se establecerá con éxito. Si no se puede realizar una conexión a ninguno de los servidores listados o no puede encontrar un primario, será lanzada una MongoConnectionException.

Sugerencia

Se debería proporcionar siempre una lista de semillas con más de un miembro del ReplicaSet. Para una mayor disponibilidad se debería sembrar con al menos un servidor de cada centro de datos.

Advertencia

Los nombres de host que se especifiquen en la lista de semillas deben coincidir con los nombres de la configuración del conjunto de réplica. Esto es así debido a que el controlador solamente utiliza los nombres de host de la configuración del conjunto de réplica para crear el hash para sus conexiones persistentes.

Por ejemplo, si una dirección IP se emplea en la lista de semillas y el conjunto de réplica se configura con nombres de host, el controlador desechará cualquier conexión de lista de semillas que difiera de los nombres de host canónicos declarados por el conjunto de réplica. De hecho, estas conexiones de listas de semillas no canónicas serán recreadas en cada petición, reduciendo enormemente el beneficio de utilizar conexiones presistentes.

Advertencia

El controlador no admite la conexión a diferentes conjuntos de réplica con el mismo nombre. Esto se extiende más allá de un script, por lo que se ha de asegurar de tener diferentes nombres para cada conjunto de réplica. Esto también significa que no se puede hacer esto:

Ejemplo #2 Duplicación errónea de un nombre de un conjunto de réplica

<?php
$m 
= new MongoClient("mongodb://devserver1,devserver2,devserver3/?replicaSet=repset");
$m = new MongoClient("mongodb://prodserver1,prodserver2,prodserver3/?replicaSet=repset");
?>

En su lugar, se han de tener dos nombre diferentes para los conjuntos de réplica:

Ejemplo #3 Uso correcto de dos nombres de conjuntos de réplica

<?php
$m 
= new MongoClient("mongodb://devserver1,devserver2,devserver3/?replicaSet=devset");
$m = new MongoClient("mongodb://prodserver1,prodserver2,prodserver3/?replicaSet=prodset");
?>

Si el primario no está disponible, se hará una elección y se promoverá un secundario al rol de primario (a menos que no se pueda establecer un voto mayoritario). Durante este tiempo (» 20-60 segundos), la conexión no podrá ralizar ninguna operación de escritura, por lo que intentarlo resultará en una excepción. Las conexiones a secundarios aún podrán realizar lecturas.

Nota:

La Preferencias de lectura predeterminada solamente es para leer desde el primario. Durante el proceso de elección no hay primario, por lo que todas las lecturas fallarán.

Se recomienda usar la preferencia de lectura MongoClient::RP_PRIMARY_PREFERRED para aplicaciones que requieren una alta disponibilidad de lecturas, ya que las lecturas solamente serán ejecutadas en los secundarios cuando simplemente no haya un primario disponible.

Una vez que el primario es elegido, el intento de realizar una lectura o escritura permitirá al controlador detectar el nuevo primario. El controlador hará de esta su conexión de bases de datos primaria y continuará operando normalmente.

La salud y el estado de un secundario se comprueba cada 5 segundos (configurable con mongo.ping_interval) o cuando la siguiente operación ocurra después de 5 segundos. También recomprobará la configuración cuando el controlador tenga un problema al llegar al servidor.

La tolerancia a fallos del conjunto de réplicas se verifica cada 60 segundos (configurable con mongo.is_master_interval), y siempre que una operación de escritura falle cuando se utilicen escrituras aceptadas.

Precaución

Los secundarios podrían estar detrás del primario en las operaciones, por lo que la aplicación debe poder manejar datos desactualizados cuando se usan preferencias de lectura distintas de MongoClient::RP_PRIMARY.

Para obtener más información acerca de conjuntos de réplica, consulte la » documentación del núcleo.

Historial de cambios

Versión Descripción
1.0.9 Se añadió el soporte para conexiones a ReplicaSet y tolerancia a fallos automática.