प्रश्नों को रोकने प्रतिकृति सेट सेट करने के लिए, मैं 3 अलग टर्मिनल टैब में सामना किया है: तो फिरMongoDB प्रतिकृति सेट करने के लिए माध्यमिक
$ 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
, मैं मोंगो खोल में प्रतिकृति विन्यस्त और सत्यापित है कि यह काम किया:
> 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
}
मेरे स्क्रिप्ट प्राथमिक के खिलाफ ठीक चलाता है:
$ ./runScripts.sh -h localhost -p 27017
MongoDB shell version: 2.4.3
connecting to: localhost:27017/test
Successful completion
हालांकि, eith के खिलाफ एर माध्यमिक:
$ ./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
मैं कई स्थानों में पढ़ा है rs.slaveOk()
या db.getMongo().setSlaveOk()
, उपयोग करने के लिए है, लेकिन इनमें से कोई भी खोल से डाल देते हैं या मेरी स्क्रिप्ट में कहा जाता है कि किसी भी प्रभाव नहीं पड़ा। इन बयानों ने बुलाए जाने पर त्रुटियों को फेंक नहीं दिया, लेकिन उन्होंने समस्या को ठीक नहीं किया।
क्या किसी को पता है कि मैं माध्यमिक की पूछताछ की अनुमति देने के लिए अपनी प्रतिलिपि को कॉन्फ़िगर क्यों नहीं कर सकता?
rs.slaveOk() आपको पढ़ने की अनुमति देनी चाहिए। मैंने अभी मोंगो खोल और 2.4.3 का उपयोग करके परीक्षण किया है और एक गिनती() ने मेरे लिए काम किया है। क्या आप अपनी स्क्रिप्ट साझा कर सकते हैं? –
@ जेम्सस्हलिन सही है - यह एकमात्र तरीका हो रहा है यदि आपने इस आउटपुट को दिए गए आदेश को चलाने से पहले rs.slaveOk() सेट नहीं किया है। आपकी जेएस स्क्रिप्ट सामग्री के बारे में अधिक जानकारी मदद कर सकती है। –
[mongodb, replicates और त्रुटि: {"$ err": "मास्टर और दास ओके = झूठा नहीं", "कोड": 13435}] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/8990158/mongodb-replicates- और-त्रुटि-गलती-मास्टर-और-दासोक-झूठी-कोड) – Pykler