Mongo Node.js ResetSet大查询优化

问题描述

我有一个连接到mongodb数据库的nodejs应用程序(1个主设备2个从属设备)

该应用程序运行良好,每小时都有一个运行的脚本在mongodb上占用大量资源。

我真的不知道这是否正常,但是似乎每个查询都在通过master,所以我不知道mongo在内部做什么,但是当脚本运行mongo master时slave变得疯狂而另一个不动

这是我的副本集的状态

{
        "set" : "rs0","date" : ISODate("2020-09-17T08:29:22.555Z"),"myState" : 1,"term" : NumberLong(91),"syncingTo" : "","syncSourceHost" : "","syncSourceId" : -1,"heartbeatIntervalMillis" : NumberLong(2000),"majorityVoteCount" : 2,"writeMajorityCount" : 2,"optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1600331354,1),"t" : NumberLong(91)
                },"lastCommittedWallTime" : ISODate("2020-09-17T08:29:14.201Z"),"readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1600331354,"readConcernMajorityWallTime" : ISODate("2020-09-17T08:29:14.201Z"),"appliedOpTime" : {
                        "ts" : Timestamp(1600331354,"durableOpTime" : {
                        "ts" : Timestamp(1600331354,"lastAppliedWallTime" : ISODate("2020-09-17T08:29:14.201Z"),"lastDurableWallTime" : ISODate("2020-09-17T08:29:14.201Z")
        },"lastStableRecoveryTimestamp" : Timestamp(1600331354,"lastStableCheckpointTimestamp" : Timestamp(1600331354,"electionCandidateMetrics" : {
                "lastElectionReason" : "stepUpRequestSkipDryRun","lastElectionDate" : ISODate("2020-08-28T16:55:35.926Z"),"electionTerm" : NumberLong(91),"lastCommittedOpTimeAtElection" : {
                        "ts" : Timestamp(1598633735,"t" : NumberLong(90)
                },"lastSeenopTimeAtElection" : {
                        "ts" : Timestamp(1598633735,"numVotesNeeded" : 2,"priorityAtElection" : 1,"electionTimeoutMillis" : NumberLong(10000),"priorPrimaryMemberId" : 0,"numCatchUpOps" : NumberLong(0),"newTermStartDate" : ISODate("2020-08-28T16:55:35.931Z"),"wMajorityWriteAvailabilityDate" : ISODate("2020-08-28T16:55:38.029Z")
        },"electionParticipantMetrics" : {
                "VotedForCandidate" : true,"electionTerm" : NumberLong(90),"lastVoteDate" : ISODate("2020-08-22T21:11:10.366Z"),"electionCandidateMemberId" : 0,"VoteReason" : "","lastAppliedOpTimeAtElection" : {
                        "ts" : Timestamp(1598129847,"t" : NumberLong(89)
                },"maxAppliedOpTimeInSet" : {
                        "ts" : Timestamp(1598129847,"priorityAtElection" : 1
        },"members" : [
                {
                        "_id" : 0,"name" : "mongo-1.mongo.live.svc.cluster.local:27017","health" : 1,"state" : 2,"stateStr" : "SECONDARY","uptime" : 1697606,"optime" : {
                                "ts" : Timestamp(1600331354,"t" : NumberLong(91)
                        },"optimeDurable" : {
                                "ts" : Timestamp(1600331354,"optimeDate" : ISODate("2020-09-17T08:29:14Z"),"optimeDurableDate" : ISODate("2020-09-17T08:29:14Z"),"lastHeartbeat" : ISODate("2020-09-17T08:29:22.026Z"),"lastHeartbeatRecv" : ISODate("2020-09-17T08:29:21.990Z"),"pingMs" : NumberLong(0),"lastHeartbeatMessage" : "","syncingTo" : "mongo-2.mongo.live.svc.cluster.local:27017","syncSourceHost" : "mongo-2.mongo.live.svc.cluster.local:27017","syncSourceId" : 1,"infoMessage" : "","configVersion" : 7810311
                },{
                        "_id" : 1,"name" : "mongo-2.mongo.live.svc.cluster.local:27017","uptime" : 2200677,"lastHeartbeat" : ISODate("2020-09-17T08:29:21.291Z"),"lastHeartbeatRecv" : ISODate("2020-09-17T08:29:22.033Z"),"syncingTo" : "mongo-0.mongo.live.svc.cluster.local:27017","syncSourceHost" : "mongo-0.mongo.live.svc.cluster.local:27017","syncSourceId" : 3,{
                        "_id" : 3,"name" : "mongo-0.mongo.live.svc.cluster.local:27017","state" : 1,"stateStr" : "PRIMARY","uptime" : 2200701,"electionTime" : Timestamp(1598633735,2),"electionDate" : ISODate("2020-08-28T16:55:35Z"),"configVersion" : 7810311,"self" : true,"lastHeartbeatMessage" : ""
                }
        ],"ok" : 1,"$clusterTime" : {
                "clusterTime" : Timestamp(1600331354,"signature" : {
                        "hash" : BinData(0,"viqVgd9SZDI2Q3NB0sz5lJo4xBM="),"keyId" : NumberLong("6834562805081833474")
                }
        },"operationTime" : Timestamp(1600331354,1)
}

我是与MongoClient.connect的mongo连接

,URL为mongodb://username:password@mongo-0.mongo.live.svc.cluster.local:27017,mongo-1.mongo.live.svc.cluster.local:27017,mongo-2.mongo.live.svc.cluster.local:27017/admin?authSource=admin&replicaset=rs0&slaveOk=true

能否让我知道我的副本和连接是否正常。 我不明白为什么只有主cpu在上升

另一种解决方案是仅为我的脚本添加一个新的母版,这是一个方法吗?

解决方法

@prasad_感谢您的帮助

readPreference=secondaryPreferred到我的连接URL,现在读取请求已在我的两个辅助URL之间分派。