반응형
보조 쿼리를 허용하지 않는 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
그런 다음 Mongo 셸에서 복제를 구성하고 작동하는지 확인했습니다.
> 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
단, 다음 중 하나의 보조 장치에 대해서는:
$ ./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()
그러나 이 두 가지 모두 아무런 효과가 없었습니다. 껍질에서 입력된 것이든, 제 대본에서 호출된 것이든 말입니다.이 문장들은 호출될 때 오류를 발생시키지는 않았지만 문제를 해결하지도 못했습니다.
보조 쿼리를 허용하도록 replset을 구성할 수 없는 이유를 아는 사람이 있습니까?
rs.slaveOk()
mongo 쉘에서 실행하면 2차 정보를 읽을 수 있습니다.다음은 MongoDB 2.4.3에서 mongo 셸을 사용한 데모입니다.
$ mongo --port 27017
MongoDB shell version: 2.4.3
connecting to: 127.0.0.1:27017/test
replset:PRIMARY> db.foo.save({})
replset:PRIMARY> db.foo.find()
{ "_id" : ObjectId("51bf5dbd473d5e80fc095b17") }
replset:PRIMARY> exit
$ mongo --port 27018
MongoDB shell version: 2.4.3
connecting to: 127.0.0.1:27018/test
replset:SECONDARY> db.foo.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
replset:SECONDARY> rs.slaveOk()
replset:SECONDARY> db.foo.find()
{ "_id" : ObjectId("51bf5dbd473d5e80fc095b17") }
replset:SECONDARY> db.foo.count()
1
명령을 실행해야 합니다.rs.slaveOk()
보조 서버의 셸에 있습니다.
다음을 사용하여 MongoDB 보조에서 쿼리를 실행합니다.
db.getMongo().setReadPref('secondary')
언급URL : https://stackoverflow.com/questions/17153813/mongodb-replica-set-preventing-queries-to-secondary
반응형
'programing' 카테고리의 다른 글
빈 문자열 또는 0-값 문자열 테스트 중 (0) | 2023.05.31 |
---|---|
npm 설치 오류 - MSB3428: Visual C++ 구성 요소 "VCBuild.exe"를 로드할 수 없습니다. (0) | 2023.05.31 |
asp: 텍스트 상자에 힌트를 넣는 방법 (0) | 2023.05.31 |
Flutter 및 Android Studio를 설치한 후 "cmdline-tools 구성 요소가 없습니다" 오류가 발생합니다.안드로이드 SDK를 추가했습니다.어떻게 해결할 수 있을까요? (0) | 2023.05.31 |
루비: 해시 키를 필터링하는 가장 쉬운 방법은? (0) | 2023.05.31 |