programing

이상한 mongodb 및 mongoose 오류: 마스터 및 slaveOk=false 오류가 아닙니다.

subpage 2023. 5. 9. 22:44
반응형

이상한 mongodb 및 mongoose 오류: 마스터 및 slaveOk=false 오류가 아닙니다.

node.js 앱에서 이상한 오류가 발생합니다.

not master and slaveOk=false code 13435

mongoose 4.0.2를 사용하여 mongodb 3.0.1을 히트시키는 findOne 쿼리를 하고 있습니다.쿼리가 오늘 이전에 작동했습니다.

이 오류는 무엇입니까?나는 그들의 gb당 표준 요금제로 mongohq를 실행하고 있습니다.

즉, 복제본 집합의 보조 노드에서 읽으려고 시도하는 것이며 기본적으로 기본 노드에서만 읽을 수 있습니다.

를 실행하여 보조 노드가 읽기를 수락하도록 허용할 수 있습니다.rs.slaveOk()해당 보조 노드에 연결된 몽고 쉘에서.노드가 아직 기본 노드와 동기화되지 않은 경우 오래된 데이터를 읽을 수 있으므로 보조 노드의 읽기를 허용하지 않는 것이 좋습니다.

업데이트: Janusz Slota의 논평이 지적했듯이,rs.slaveOk()더 이상 사용되지 않습니다.사용하다rs.secondaryOk()그러나 이는 여전히 권장되지 않습니다.다음은 rs.secondaryOk()대한 설명서입니다.

저는 Mongoose로 MongoDB에 연결하기 위해 URI myNode.js 애플리케이션이 사용하던 URI를 수정하는 것만으로 이 문제를 해결했습니다.

이 오류가 발생했을 때 내 URI는

mongodb://user:password@host:port/datatabase,

마스터슬레이브 OK=false가 아닌 오류가 발생했습니다.

그런 다음 복제 세트 정보를 추가하기 위해 URI를 변경했고 URI는 다음과 같이 되었습니다.

mongodb://user:password@host:port,replicaSetHost:replicaSetPort/database?replicaSet=rs-someServer.

이 구성이 일반적인 패턴인지는 모르겠습니다. MongoLab에서 사용하는 구성이기 때문입니다. MongoLab에서는 이 구성을 사용합니다. MongoLab에서는 데이터베이스가 호스팅됩니다.그러나 URI에 복제 세트 정보도 추가하여 문제를 해결할 수 있습니다.

(IBM의 mongoDB 인스턴스에 연결하여 발생한) 문제를 해결했습니다.

mongoose.connect('mongodb://host1:port1/?replicaSet=rsName');

보낸 사람: https://mongoosejs.com/docs/connections.html#replicaset_connections

마스터 노드에 장애가 발생하여 슬레이브 노드에서 읽기를 시도하고 있지만 기본적으로 읽기 소스는 기본 노드로만 설정되어 있습니다.

연결 문자열 끝에 다음과 같은 옵션을 연결할 수 있습니다.?readPreference=secondary2차 연결을 사용할 것입니다.

사용할 수 있습니다.readPreference연결 문자열에 연결합니다.

mongodb://localhost:27017/?readPreference=secondary&directConnection=true&ssl=false

기본 설정을 사용하여 연결할 수 없는 경우 보조 기본 설정을 사용할 수 있습니다.

이것은 mongoose 4.x 및 mongodb 3.0.x에서 작동합니다.

model.find().read('secondary').....

http://mongoosejs.com/docs/api.html#query_Query-read 을 참조하십시오.

언급URL : https://stackoverflow.com/questions/30088833/strange-mongodb-and-mongoose-error-not-master-and-slaveok-false-error

반응형