Để thiết lập các thiết lập sao, tôi đã chạy trong 3 tab thiết bị đầu cuối riêng biệt:MongoDB replica set ngăn chặn các truy vấn để thứ
$ 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
Sau đó, tôi được cấu hình sao chép trong vỏ Mongo và xác minh rằng nó làm việc:
> 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
}
kịch bản của tôi chạy tốt so với chính:
$ ./runScripts.sh -h localhost -p 27017
MongoDB shell version: 2.4.3
connecting to: localhost:27017/test
Successful completion
Tuy nhiên, so với eith er thứ:
$ ./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
Tôi đã đọc ở nhiều nơi sử dụng rs.slaveOk()
hoặc db.getMongo().setSlaveOk()
, nhưng không ai trong số những có bất kỳ tác dụng, cho dù nhập từ vỏ hoặc gọi trong kịch bản của tôi. Những tuyên bố này không ném lỗi khi được gọi, nhưng họ cũng không khắc phục được sự cố.
Có ai biết lý do tại sao tôi không thể định cấu hình thay thế của mình để cho phép truy vấn phụ?
rs.slaveOk() sẽ cho phép bạn đọc. Tôi chỉ thử nghiệm bằng cách sử dụng vỏ mongo và 2.4.3 và một số() làm việc cho tôi. Bạn có thể chia sẻ kịch bản của mình không? –
@JamesWahlin là đúng - cách duy nhất điều này xảy ra là nếu bạn không thiết lập rs.slaveOk() trước khi chạy lệnh cho kết quả này. Thông tin thêm về nội dung tập lệnh js của bạn có thể hữu ích. –
có thể trùng lặp của [mongodb, sao chép và lỗi: {"$ err": "không phải là master và slaveOk = false", "code": 13435}] (http://stackoverflow.com/questions/8990158/mongodb-replicates- và-error-err-not-master-and-slaveok-false-code) – Pykler