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.

Historique

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

User Contributed Notes 1 note

up
2
wpigott at nospam dot example dot com
12 years ago
When using the mongodb connection string on a replica set, make sure you DO NOT PUT A SPACE between the servers.

IE. mongodb://db1.example.com:27017, db2.example.com:27017 will throw an error, but mongodb://db1.example.com:27017,db2.example.com:27017 will work correctly.
To Top