Verhindern des Replikatssatz einzurichten, I in 3 separate Anschlußfahnen ausgeführt haben:MongoDB Replikatssatz Abfragen an sekundären
$ sudo mongod --replSet rs0 --dbpath /data/mining --port 27017
$ sudo mongod --replSet rs0 --dbpath /data/mining2 --port 27018
$ sudo mongod --replSet rs0 --dbpath /data/mining3 --port 27019
Dann konfiguriert I-Replikation in der Schale Mongo und verifiziert, dass es funktioniert:
> var rsconf = {
_id: "rs0",
members: [
{
_id: 0,
host: 'localhost:27017'
},
{
_id: 1,
host: 'localhost:27018'
},
{
_id: 2,
host: 'localhost:27019'
}
]
};
> rs.initiate(rsconf);
{
"info": "Config now saved locally. Should come online in about a minute.",
"ok": 1
}
// Some time later...
> rs.status()
{
"set": "rs0",
"date": ISODate("2013-06-17T13:23:45-0400"),
"myState": 2,
"syncingTo": "localhost:27017",
"members": [
{
"_id": 0,
"name": "localhost:27017",
"health": 1,
"state": 1,
"stateStr": "PRIMARY",
"uptime": 4582,
"optime": {
"t": 1371489546,
"i": 1
},
"optimeDate": ISODate("2013-06-17T13:19:06-0400"),
"lastHeartbeat": ISODate("2013-06-17T13:23:44-0400"),
"lastHeartbeatRecv": ISODate("2013-06-17T13:23:44-0400"),
"pingMs": 0
},
{
"_id": 1,
"name": "localhost:27018",
"health": 1,
"state": 2,
"stateStr": "SECONDARY",
"uptime": 5034,
"optime": {
"t": 1371489546,
"i": 1
},
"optimeDate": ISODate("2013-06-17T13:19:06-0400"),
"self": true
},
{
"_id": 2,
"name": "localhost:27019",
"health": 1,
"state": 2,
"stateStr": "SECONDARY",
"uptime": 4582,
"optime": {
"t": 1371489546,
"i": 1
},
"optimeDate": ISODate("2013-06-17T13:19:06-0400"),
"lastHeartbeat": ISODate("2013-06-17T13:23:44-0400"),
"lastHeartbeatRecv": ISODate("2013-06-17T13:23:45-0400"),
"pingMs": 0,
"syncingTo": "localhost:27017"
}
],
"ok": 1
}
Mein Skript läuft gut gegen die primäre:
$ ./runScripts.sh -h localhost -p 27017
MongoDB shell version: 2.4.3
connecting to: localhost:27017/test
Successful completion
jedoch gegen eith er sekundär:
$ ./runScripts.sh -h localhost -p 27018
MongoDB shell version: 2.4.3
connecting to: localhost:27017/test
Mon Jun 17 13:30:22.989 JavaScript execution failed: count failed:
{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }
at src/mongo/shell/query.js:L180
failed to load: /.../.../myAggregateScript.js
ich an mehreren Stellen gelesen haben rs.slaveOk()
oder db.getMongo().setSlaveOk()
zu verwenden, aber keiner von ihnen hatten keine Wirkung, sei es aus der Shell eingegeben oder in meinem Skript aufgerufen. Diese Anweisungen haben beim Aufruf keine Fehler ausgelöst, aber sie haben das Problem auch nicht behoben.
Weiß jemand, warum ich meine replset nicht konfigurieren kann, Abfrage der sekundären zu ermöglichen?
rs.slaveOk() sollte Ihnen erlauben zu lesen. Ich habe gerade mit der Mongo Shell und 2.4.3 getestet und eine count() funktionierte für mich. Kannst du dein Skript teilen? –
@JamesWahlin hat recht - der einzige Weg, wie dies geschieht, ist, wenn Sie rs.slaveOk() nicht vor dem Ausführen des Befehls gesetzt haben, der diese Ausgabe lieferte. Mehr Informationen über Ihren js-Skript-Inhalt können helfen. –
mögliches Duplikat von [Mongodb, Replikate und Fehler: {"$ err": "nicht Master und SlaveOk = false", "Code": 13435}] (http://stackoverflow.com/questions/8990158/mongodb-replicates- und-error-err-not-master-und-slaveok-false-code) – Pykler