Connection
PHP Manual

Paires de réplication

Pour se connecter à une paire de réplication, vous devez spécifier au moins un membre de la paire et utiliser l'option "replicaSet". Plusieurs serveurs doivent être délimités par une virgule.

Exemple #1 Liste du jeu de réplication

<?php

// Utilisation de plusieurs serveurs de la liste (méthode préférée)
$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName");


// Utilisation d'un seul serveur de la liste
$m = new MongoClient("mongodb://rs1.example.com:27017", array("replicaSet" => "myReplSetName"));

// Utilisation de plusieurs serveurs de la liste
$m = new MongoClient("mongodb://rs1.example.com:27017,rs2.example.com:27017", array("replicaSet" => "myReplSetName"));
?>

Le pilote PHP requêtera le(s) serveur(s) de base de données listé(s) pour vérifier qui est le primaire. Dès qu'il peut se connecter à au moins un hôte listé, et trouver un primaire, la connexion sera réussie. Dans le cas contraire, une MongoConnectionException est envoyée.

Astuce

Vous devriez toujours fournir une liste de partage contenant plus d'un membre du jeu de réplication. Pour une haute disponibilité, vous devriez partager avec au moins un serveur de chacun de vos centres de données.

Avertissement

Les noms d'hôtes que vous spécifiez ici doivent correspondre aux noms fournis dans la configuration du jeu de réplication, car le driver utilise le nom tel que spécifié dans la configuration du jeu de réplication comme identifiant dans son mappage interne. Le fait de spécifier (par exemple) l'adresse IP au lieu du nom d'hôte configuré fera que le driver gardera une connexion pour à la fois le nom d'hôte et son adresse IP.

Avertissement

Le driver ne supporte pas les connexions aux différents jeux de réplication avec un nom identique. Vous devez vous assurer d'avoir des noms différents pour chaque serveur de vos jeux de réplication. Cela signifie également que vous ne pouvez pas faire ceci :

Exemple #2 Mauvais noms pour le jeu de réplication

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

A la place, vous devez avoir deux noms différents pour vos jeux de réplications :

Exemple #3 Utilisation correcte des noms de deux jeux de réplication

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

Si le primaire devient indisponible, les secondaires ne deviendront pas primaires pendant ces quelques secondes. Pendant ce temps là (» 20-60 secondes), la connexion ne sera pas capable d'effectuer les opérations sur la base de données (les connexions aux secondaires pourront toujours effectuer des lectures) et une exception sera levée.

Note:

La préférence de lecture par défaut est de ne lire que depuis le primaire. Lors du processus d'élection, il n'y a pas de primaire, et toutes les lectures échoueront.

Il est recommandé d'utiliser la préférence de lecture MongoClient::RP_PRIMARY_PREFERRED pour les applications qui requièrent une haute disponibilité pour les lectures, vu que les lectures ne seront réalisées sur les secondaires que lorsqu'il n'y a aucun primaire de disponible.

Une fois le maître trouvé, essayer des lectures ou écritures permettra au pilote de détecter le nouveau primaire. Le pilote en fera alors sa connexion principale et continuera les opérations normalement.

La santé et le statut d'un secondaire sont vérifiés toutes les 5 secondes (configurable avec la directive mongo.ping_interval) ou lorsque la prochaine opération survient après 5 secondes. La configuration sera de nouveau analysée lorsque le driver rencontre un problème lors d'une connexion à un serveur.

Les failovers du jeu de réplication sont vérifiés toutes les 60 secondes (configurable avec la directive mongo.is_master_interval), et lorsqu'une opération en écriture échoue avec des écritures reconnues.

Attention

Les secondaires peuvent être derrière le primaire lors des opérations, aussi, votre application doit être capable de gérer les données périmées lors de l'utilisation de préférences de lecture autre que MongoClient::RP_PRIMARY.

Pour plus d'informations sur les paires de réplication, reportez-vous à la » documentation interne.

Voir aussi

Historique

Version Description
1.0.9 Ajout du support au jeu de réplication, et du failover automatique.

Connection
PHP Manual