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.
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.
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.
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.
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
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mongo.connecting.rs.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.