203 votes

mongodb, réplique et erreur : { "$err" : "not master and slaveOk=false", "code" : 13435 }

J'ai essayé les ensembles de répliques mongo pour la première fois.

J'utilise ubuntu sur ec2 et j'ai démarré trois instances. J'ai utilisé l'adresse IP privée de chacune des instances. J'ai choisi la première comme primaire et voici le code.

mongo --host Private IP Address
rs.initiate()
rs.add(“Private IP Address”)
rs.addArb(“Private IP Address”)

Tout va bien à ce stade. Lorsque je me rends à la http://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:28017/_replSet site je vois que j'ai un primaire, un secondaire et un arbitre.

Ok, maintenant pour un test.

Sur le primaire créer une base de données dans ce qui est le code :

use tt
db.tt.save( { a : 123 } )

sur le secondaire, je fais alors ceci et j'obtiens l'erreur suivante :

db.tt.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

Je suis très novice en matière de mongodb et de répliques, mais je pensais que si je faisais quelque chose dans l'un, cela allait dans l'autre. Donc, si j'ajoute un enregistrement dans l'un, que dois-je faire pour répliquer entre les machines ?

7voto

Michael Points 66

AVERTISSEMENT : slaveOk() est déprécié et pourrait être supprimé dans la prochaine version majeure. Veuillez utiliser secondaryOk() à la place. rs.secondaryOk()

4voto

Prabhat Points 320

SlaveOk ne fonctionne plus. Il faut utiliser readPreference https://docs.mongodb.com/v3.0/reference/read-preference/#primaryPreferred

par exemple

const client = new MongoClient(mongoURL + "?readPreference=primaryPreferred", { useUnifiedTopology: true, useNewUrlParser: true });

2voto

jit Points 333

J'ajoute juste cette réponse pour une situation embarrassante du fournisseur de DB.

Ce qui s'est passé dans notre cas, c'est que les bases de données primaires et secondaires ont été déplacées de façon inverse (primaire vers secondaire et vice versa) et nous obtenons la même erreur.

Veuillez donc vérifier dans les paramètres de configuration l'état de la base de données, ce qui pourrait vous aider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X