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 jeux 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ôte que vous spécifiez dans la liste de partage
doivent correspondre aux noms d'hôte présent
dans la configuration du jeux de réplication. Et ce, car le driver utilise
uniquement les noms d'hôte présents dans la configuration du jeux de
réplication pour créer le hash pour ces connexions persistentes.
Par exemple, si une adresse IP est utilisée dans la liste de partage
et que le jeux de réplication est configuré avec les noms d'hôte, le
driver va rejeter toutes les connexions de la liste de partage qui
diffèrent des noms d'hôte canoniques présents dans le jeux de réplication.
En pratique, ces connexions non-canoniques de la liste de partage
seront re-créées à chaque requête, ce qui réduit le bénéfice de l'utilisation
des connexions persistentes.
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.