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.