Hi, I configure mongodb replicaset: 1 primary and 3 secondary nodes. I want to route all read data’s to all secondary nodes but node js app routes all request to only one mongodb secondary node. why does it work like this?
mongodb server rs config:
testrs [direct: secondary] test> rs.config()
{
_id: 'testrs',
version: 7,
term: 31,
members: [
{
_id: 0,
host: 'mongodb01.test.local:27017',
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 1,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
},
{
_id: 1,
host: 'mongodb02.test.local:27017',
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 0.5,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
},
{
_id: 2,
host: 'mongoarbiter.test.local:27017',
arbiterOnly: true,
buildIndexes: true,
hidden: false,
priority: 0,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
},
{
_id: 3,
host: 'mongodb03.test.local:27017',
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 1,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
},
{
_id: 4,
host: 'mongodb04.test.local:27017',
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 1,
tags: {},
secondaryDelaySecs: Long("0"),
votes: 1
}
],
protocolVersion: Long("1"),
writeConcernMajorityJournalDefault: true,
settings: {
chainingAllowed: true,
heartbeatIntervalMillis: 2000,
heartbeatTimeoutSecs: 10,
electionTimeoutMillis: 10000,
catchUpTimeoutMillis: -1,
catchUpTakeoverDelayMillis: 30000,
getLastErrorModes: {},
getLastErrorDefaults: { w: 1, wtimeout: 0 },
replicaSetId: ObjectId("63636928358215d6a25de74c")
}
}
node js app server config:
"spring.data.mongodb.uri": "mongodb://notification:password@mongodb01.test.local:27017,mongodb02.test.local:27017,mongodb03.test.local:27017,mongodb04.test.local:27017/notification?replicaSet=testrs&readPreference=secondaryPreferred&serverSelectionTimeoutMS=10000&connectTimeoutMS=10000"