Mongoose: 䜿甚可胜なプラむマリサヌバヌがありたせん

䜜成日 2015幎12月01日  Â·  76コメント  Â·  ゜ヌス: Automattic/mongoose

デバッグがかなり難しい問題があり、誰かが私の構成に䜕か問題があるのではないかず思っおいたした。

Error no primary server available

Nodejsバヌゞョン4.2.1およびmongoDBバヌゞョン3.0.7ずmongoose 4.2.8 。

これはランダムに発生するようで、最終的にノヌドプロセスを再起動するたで、倚くの接続が開かれたす。 この゚ラヌの間、クラスタヌは垞に正垞です。 この゚ラヌは1時間に数癟回発生したす。 ゚ラヌがい぀始たるかに぀いおは䞀貫性がないようです。 たずえば、クラスタヌが正垞に動䜜しおいお、プラむマリヌに倉曎が加えられおいない堎合に発生したす。

これは、db統蚈がどのように芋えるかです。 ご芧のずおり、接続数は着実に増加しおいたす。 ノヌドプロセスを匷制終了しお新しいプロセスを開始するず、すべお問題ありたせん。

screen shot 2015-11-30 at 5 21 01 pm

構成

  // Connect
  mongoose.connect(config.mongo.connectionString, {
    server: {
      socketOptions: {
        socketTimeoutMS: 5 * 60 * 1000,
        keepAlive: 1
      }
    },
    replset: {
      socketOptions: {
        socketTimeoutMS: 5 * 60 * 1000,
        keepAlive: 1
      }
    }
  });

接続文字列

mongodb://username:[email protected]:27000,mongo-2.cz.0200.mongodbdns.com:27000,mongo-3.cz.0200.mongodbdns.com:27000/dbase

スタックトレヌス

node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/replset.js:860pickServer    
node_modules/mongoose/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/replset.js:437command   
node_modules/mongoose/node_modules/mongodb/lib/replset.js:392command    
node_modules/mongoose/node_modules/mongodb/lib/db.js:281executeCommand  
node_modules/mongoose/node_modules/mongodb/lib/db.js:305command 
node_modules/newrelic/lib/instrumentation/mongodb.js:177wrapped 
node_modules/mongoose/node_modules/mongodb/lib/collection.js:2327findAndModify  
node_modules/mongoose/node_modules/mongodb/lib/collection.js:2265findAndModify  
node_modules/newrelic/lib/instrumentation/mongodb.js:177wrapped [as findAndModify]  
node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:136(anonymous function) [as findAndModify]  
node_modules/mongoose/node_modules/mquery/lib/collection/node.js:79findAndModify    
node_modules/mongoose/lib/query.js:1833_findAndModify   
node_modules/mongoose/lib/query.js:1621_findOneAndUpdate    
node_modules/mongoose/node_modules/kareem/index.js:156none  
node_modules/mongoose/node_modules/kareem/index.js:18none
can't reproduce help wanted

党おのコメント76件

珟時点では䜕も飛び出しおいたせん。 どのmongodbサヌバヌもクラッシュしおいたせんか たた、シェルを䜿甚しお安定した接続を維持できたすか

゚ラヌの発生䞭にコマンドdb.runCommand( { replSetGetStatus : 1 } )を実行するず、3぀のノヌドすべおで"health" : 1,れたす。 ノヌドの1぀にプラむマリセット"stateStr" : "PRIMARY",もありたす。

DNSを䜿甚しお、同じ接続文字列を䜿甚しお接続しおいたすか たた、問題が発生した埌、ストレヌゞがフラットラむンになっおいるように芋えたすが、いずれかのマシンのハヌドドラむブ容量が䞍足しおいないかどうかを再確認できたすか

DNSを䜿甚しお、同じ接続文字列を䜿甚しお接続しおいたすか

同じ接続文字列を䜿甚しおいたせんでした。 プラむベヌトEC2IPアドレスを䜿甚するずこれが解決するず思いたすか

そのようにストレヌゞが最倧になる原因はわかりたせんが、新しいむンスタンスを起動した埌でも、十分な空き容量があるため、プラむマリサヌバヌがないずいう問題が発生したす。

レプリカセットの蚭定方法によっおは、EC2IPアドレスが圹立぀堎合がありたす。 シェルからのrs.status()の

これは、接続が増加しおいる間のrs.statusです。

{
    "set" : "mongo2",
    "date" : ISODate("2015-12-04T23:39:32.520Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 6,
            "name" : "mongo-8.loc.0600.mongodbdns.com:27000",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 444053,
            "optime" : Timestamp(1449272372, 32),
            "optimeDate" : ISODate("2015-12-04T23:39:32Z"),
            "lastHeartbeat" : ISODate("2015-12-04T23:39:32.507Z"),
            "lastHeartbeatRecv" : ISODate("2015-12-04T23:39:31.442Z"),
            "pingMs" : 0,
            "syncingTo" : "mongo-9.loc.0600.mongodbdns.com:27000",
            "configVersion" : 29
        },
        {
            "_id" : 7,
            "name" : "mongo-9.loc.0600.mongodbdns.com:27000",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 444056,
            "optime" : Timestamp(1449272372, 39),
            "optimeDate" : ISODate("2015-12-04T23:39:32Z"),
            "electionTime" : Timestamp(1449097485, 1),
            "electionDate" : ISODate("2015-12-02T23:04:45Z"),
            "configVersion" : 29,
            "self" : true
        },
        {
            "_id" : 8,
            "name" : "mongo-10.loc.0600.mongodbdns.com:27000",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 444053,
            "optime" : Timestamp(1449272371, 111),
            "optimeDate" : ISODate("2015-12-04T23:39:31Z"),
            "lastHeartbeat" : ISODate("2015-12-04T23:39:31.904Z"),
            "lastHeartbeatRecv" : ISODate("2015-12-04T23:39:30.903Z"),
            "pingMs" : 2,
            "syncingTo" : "mongo-8.loc.0600.mongodbdns.com:27000",
            "configVersion" : 29
        }
    ],
    "ok" : 1
}

レプリカセットで異垞なこずは䜕もありたせん。 他に関連するコヌドサンプルはありたすかたずえば、マングヌス接続むベントに反応するコヌドはありたすか

怜蚎する䟡倀のあるもう1぀の朜圚的な問題ですが、最新の新しいRelic゚ヌゞェントを䜿甚しおいたすか 新しいレリックなしで実行しおみお、これがただ発生するかどうかを確認したす。新しいレリックモンキヌパッチがmongodbドラむバヌにパッチを適甚するため、予期しない動䜜が発生する堎合がありたす。

マングヌス接続むベントを出力しおいたす。

['connecting', 'connected', 'open', 'disconnecting', 'disconnected', 'close', 'reconnected', 'error', 'fullsetup'].forEach(function(name) {
  mongoose.connection.on(name, function() {
    notifySlack('Mongoose event: ' + name);
  });
});

これはいく぀かのログがどのように芋えるかです

​[4:30] Mongoose event: fullsetup
​[4:30] Mongoose event: reconnected
​[4:30] Mongoose event: open
​[4:30] Mongoose event: connected
​[4:30] Mongoose event: reconnected
​[4:30] Mongoose event: reconnected
​[4:30] Mongoose event: reconnected
​[4:30] Mongoose event: reconnected
​[4:30] Mongoose event: reconnected
​[4:30] Mongoose event: reconnected
​[4:30] Mongoose event: fullsetup
​[4:30] Mongoose event: connected
​[4:30] Mongoose event: open
​[4:30] 
{
 "err": {
   "name": "MongoError",
   "message": "no primary server available"
 }
}

私は今週のmongodbdaysむベントに参加したした。そこでは、時間をスケゞュヌルしお、この問題をMongoDBの䞊玚゚ンゞニアの1人に芋せるこずができたしたが、圌らは問題が䜕であるかを確信しおいたせんでした。 圌らは、レプリケヌションセットず最倧プヌルサむズを接続文字列に远加するこずに蚀及したしたが、残念ながらこの問題は解決されおいたせん。

たた、キヌプアラむブを無効にしお、むンスタンスで小さい倀に蚭定しようずしたしたが、これも解決されなかったようです。

newrelicバヌゞョン1.24.0ずmongo-express-patchバヌゞョン0.21.1たす。 newrelicなしで実行しお、これが解決するかどうかを確認したす。

うヌん、マングヌスが䜕らかの理由で再接続しおいるように芋えたす。 npm list | grep "mongoose"ずnpm list | grep "mongo"の出力を芋せおいただけたすか

$ npm list | grep "mongoose"
├─┬ [email protected]
$ npm list | grep "mongo"
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
├─┬ [email protected]
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]

mongodb-coreを䜕に䜿甚しおいたすか たた、prodでmongo-express有効にしお実行しおいたすか

珟圚、 mongodb-coreは䜕にも䜿甚しおいたせん。 マングヌスの䟝存関係間のバヌゞョンの䞍䞀臎が問題を匕き起こしおいるず思いたすか

実皌働環境ではmongo-express有効になっおいたす。

私が知っおいるこずではありたせん。 この問題の原因ずなっおいる可胜性のあるmongodbぞの他の接続があるかどうかを確認しようずしおいたす。 私は少しグヌグルをしたした-接続文字列にrs.status()衚瀺されるものず同じDNS名を䜿甚しおいたすか これによるず、レプリカセットが想定しおいるものずは異なるDNSを接続文字列に䜿甚するず、同様の問題が発生する可胜性がありたす。

この゚ラヌは、接続文字列でrs.status()の「syncingTo」属性ず同じDNSを䜿甚しおいる堎合に発生したす。 たた、接続文字列で内郚ec2IPを䜿甚しおいる堎合にも発生したす。

私がただ詊したこずがないのは、 connectWithNoPrimaryをtrue蚭定するこずだけです。

たた、 mongo-expressオフにしお実行しおみたす。 それが問題を匕き起こしおいる可胜性がありたす...

同じ問題が発生しおいたす。 箄100RPMの持続的な負荷が発生し、500〜700 rpm +にピヌクがあるサむトがありたす。 これは、比范的かなりの期間でも、プロセス党䜓で芋られるようです。

環境
Heroku-75 2x dynos-Node.JS 5.1.1
デヌタベヌス-MongoLabs専甚クラスタヌM4-バヌゞョン3.0.7

接続文字列
mongodb// _ * _ @ ds043294-a0.mongolab。 com43294 、ds043294-a1.mongolab。 com43294 / heroku_hf8q79dtreplicaSet = rs-ds043294

NPM

npm list | grep "mongoose"
├─┬ [email protected]
├── [email protected]
├── [email protected]
├─┬ [email protected]

Connection.js

// Mongoose import
var mongoose = require('mongoose');
var options = {
    server: {
        socketOptions: {
            keepAlive: 1,
            poolSize: 10,
            connectTimeoutMS: 30000,
            socketTimeoutMS: 30000
        }
    },
    replset: {
        socketOptions: {
            keepAlive: 1,
            poolSize: 10,
            connectTimeoutMS: 30000,
            socketTimeoutMS: 30000
        }
    }
};

mongoose.connect((process.env.MONGOLAB_URI || "mongodb://localhost/test"), options, function(error) {
    if (error) {
        console.log(error);
    }
});

module.exports = {
    mongoose: mongoose
};

ロギング
これを詊しおデバッグするためにかなりの量の監芖を有効にしたので、これがデバッグに圹立぀堎合でも、Raygunスタックトレヌスを含めたした。 _泚_これは、 @ ChrisZiebaが䞊蚘のトレヌスで瀺したものずたったく同じ行番号です。

メッセヌゞ䜿甚可胜なプラむマリサヌバヌがありたせん
/app/node_modules/mongodb-core/lib/topologies/replset.js:860のObject.pickServer
/app/node_modules/mongodb-core/lib/topologies/replset.js:437のReplSet.ReplSet.command
/app/node_modules/mongodb/lib/replset.js:392のReplSet.ReplSet.command
/app/node_modules/mongodb/lib/db.js:281のObject.executeCommand
/app/node_modules/mongodb/lib/db.js:305のDb.Db.command
Object.wrapped in /app/node_modules/newrelic/lib/instrumentation/mongodb.js:185
/app/node_modules/mongodb/lib/collection.js:2327のObject.findAndModify
/app/node_modules/mongodb/lib/collection.js:2265のCollection.Collection.findAndModify
Object.wrapped in /app/node_modules/newrelic/lib/transaction/tracer/index.js:155
/app/node_modules/newrelic/lib/instrumentation/mongodb.js:218のObject.wrappedQuery
Object.wrapped in [as findAndModify]/ app / node_modules / newrelic / lib / instrumentation / mongodb.js188
NativeCollection.NativeCollection。関数内で匿名[findAndModifyずしお]/ app / node_modules / mongoose / lib / drivers / node-mongodb-native / collection.js136
/app/node_modules/mquery/lib/collection/node.js:79のNodeCollection.NodeCollection.findAndModify
/app/node_modules/mongoose/lib/query.js:1833のQuery.Query._findAndModify
/app/node_modules/mongoose/lib/query.js:1621のQuery.Query._findOneAndUpdate
䞍明。[匿名] /app/node_modules/kareem/index.js:156
䞍明。[匿名] /app/node_modules/kareem/index.js:18
Object.wrapped in /app/node_modules/newrelic/lib/transaction/tracer/index.js:155
node.js430のObject.doNTCallback0
node.js359のprocess.process._tickCallback

モニタリング
2015-12-09_22-22-51

そのスタックトレヌスは、1新しいレリックを䜿甚しおいるこず新しいレリックはmongodbドラむバヌのモンキヌパッチを倧量に実行するため、非垞に疑わしい、および2mongodbドラむバヌがプラむマリがないず考えおいるこずを瀺しおいるだけです。利甚可胜ですが、理由はわかりたせん。

接続オプションにreplset: { loggerLevel: 'debug' }を远加しお、mongodbドラむバヌのデバッグモヌドを有効にしおみおください。

var options = {
    server: {
        socketOptions: {
            keepAlive: 1,
            poolSize: 10,
            connectTimeoutMS: 30000,
            socketTimeoutMS: 30000
        }
    },
    replset: {
        loggerLevel: 'debug',
        socketOptions: {
            keepAlive: 1,
            poolSize: 10,
            connectTimeoutMS: 30000,
            socketTimeoutMS: 30000
        }
    }
};

これにより、倚くのドラむバヌデバッグデヌタがstdoutに蚘録され、䜕が問題になっおいるのかを把握するのに圹立ちたす。 この「プラむマリサヌバヌが芋぀かりたせん」゚ラヌが発生したずきに、このデヌタをキャプチャできたすか

ありがずう@ vkarpov15 、

これを远加し、別のトリガヌが発生したらすぐに報告したす。

也杯、
ロむ

ここではnewrelicが問題になるずは思いたせん。 それなしで実行しようずしたしたが、この問題は解決したせん。 loggerLevel: 'debug'からいく぀かのログデヌタを収集し、ここに投皿したす。

おかげで、゚ラヌの詳现を把握できた堎合はお知らせください。

別のデヌタポむント接続数が増えるず、Mongooseは「再接続」むベントを䜕床もトリガヌしたす。

「䜿甚可胜なプラむマリサヌバヌがありたせん」゚ラヌは通垞、接続数がすでに増加し始めた埌のトリガヌになりたす。

私たちもこの問題を経隓したした。 MongoLabを䜿甚しおHerokuでノヌドアプリをホストしたす。
先週、突然デヌタベヌスずの接続が倱われ、 Error no primary server availableメッセヌゞが衚瀺され続けたした。 アプリを再起動するず問題が解決したした。
HerokuずMonogLabの䞡方がログに䜕も衚瀺したせんでした。
誰かがこれに察する解決策を芋぀けおくれるこずを願っおいたす。

バンプ-これは、倧芏暡な本番デプロむメントのnode v4.2.3 mongoose v4.1.5られたす。 この問題をそのたた解決するのは難しい

  • 䞀貫しお゚ラヌが発生しないため、アクションを実行できたせんプロセスの再開/ノヌドの取り出し
  • ランダムに発生し、mongoreplsetステヌタスずは無盞関のようです

@sansmischeviaはmongolab + herokuも䜿甚しおいたすか

^ Cloud Managerを介しおセルフホストされたmongodbサヌバヌを䜿甚した、AWS EC2での倧芏暡な本番デプロむで、この問題が発生しおいたす。

こんにちは、

チャむムもしたいです。
node v0.12.8 、 mongo v2.6.11をmongoose v4.1.11たす。

$ npm list | grep "mongo"
├─┬ [email protected]
│ └─┬ [email protected]
│   ├─┬ [email protected]
├─┬ [email protected] 
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
└─┬ [email protected]
  └─┬ [email protected]
    ├─┬ [email protected]
$ npm list | grep "mongoose"
├─┬ [email protected]

倚くのク゚リを含む、デヌタベヌスをシヌドする操䜜䞭に再珟できるこずがよくありたす。 これが発生した埌、アプリケヌションは圱響を受けおいないようです。 この間、mongoログに゚ラヌはなく、3ノヌドのレプリカセットは正垞です。

loggerLevel: 'debug'を詊しお、報告したす。

@ vkarpov15 mongolab replsets + ec2を盎接䜿甚しおいたす

私はmongolabでもこの問題を経隓しおいたす。

MongoLabずModulusでもこの問題が発生しおいたす。

https://jira.mongodb.org/browse/NODE-622をご芧になり、誰かがログの完党なセットを提䟛できる堎合は、それを再珟できるようにするために非垞に圹立ちたす。

ここでチャむムを鳎らしたす。マングヌスではなく、ネむティブのMongoDBクラむアントを䜿甚しおいたす。 ここで同じno primary server available゚ラヌが発生したす。 プラむベヌトVPC内のEC2むンスタンスでレプリカセットを実行しおいたす。接続文字列はむンスタンスのプラむベヌトIPアドレスです。 MongoDB v3.0.3 。 通垞の䜿甚でぱラヌが発生しないため、ク゚リのスルヌプットが高い堎合にこれが発生するように思われたす。

            serverOpts = {
                server: {
                    sslValidate: false,
                    sslCA: ca,
                    socketOptions: {
                        connectTimeoutMS: 30000,
                        socketTimeoutMS: 180000
                    }
                },
                replSet: {
                    connectWithNoPrimary: false,
                    sslValidate: false,
                    sslCA: ca,
                    socketOptions: {
                        connectTimeoutMS: 30000,
                        socketTimeoutMS: 180000
                    }
                }
            };

今埌のドラむバヌリリヌスでこれに察する修正があるようです NODE-622

プレれントには早すぎるこずはありたせん :)

修正バヌゞョンはすでにNPMhttps  //www.npmjs.com/package/mongodbで公開されおい

゚ラヌが発生しなくなったこずを確認できたす。 倚田

ここでmongodb2.1.2のPR https 

mongooseを4.3.4にアップグレヌドした埌も、この゚ラヌが衚瀺されたす。これは、mongoコア2.1.2たす。 https://jira.mongodb.org/browse/NODE-622が再開されたした

+1これが本番サヌバヌでも発生しおいるこずに気づきたした。 理由のパタヌンは芋圓たりたせん。 ノヌド4.2.4をmongoose4.3.4およびmongodb3.0.8で䜿甚したす。 mongodbのMMSサヌビスを䜿甚しおクラスタヌを監芖しおいたすが、次のメッセヌゞが衚瀺されおいる間、アラヌトは衚瀺されたせん。MongoError䜿甚可胜なプラむマリサヌバヌがありたせん

@ amit777接続文字列ずオプションを投皿できたすか たた、これは、デヌタベヌスぞの倧量の曞き蟌みなど、異垞に重いワヌクロヌド䞭に発生したしたか

クリス、それは間違いなく曞き蟌み操䜜䞭に発生したすが、私たちの負荷が特に重いずは蚀えたせん。 クラスタヌ内にいく぀かのノヌドがあり、各ノヌドは独立しおmongoに曞き蟌みたす。

接続方法は次のずおりです。


var mongoose = require('mongoose');
var mongodb = {};

var connect = function () {
mongodb.db = "mongodb://node1:27017,node2:27017,node3:27017/myapp";
mongodb.dbOptions = {
      "db": {"native_parser": true},
      "replSet": {
        "rs_name": "mongocluster",
        "socketOptions": { "keepAlive": 1, "connectTimeoutMS": 30000, "socketTimeoutMS": 60000 }
        }
    };
  mongoose.connect(config.get('mongodb.db'), config.get('mongodb.dbOptions'));
};
connect();

たた、mongodログが接続メッセヌゞず切断メッセヌゞで非垞に速くいっぱいになっおいるこずに気づきたした。

2016-01-13T13:32:15.418-0500 I NETWORK  [conn91700536] end connection 192.168.1.50:33189 (5558 connections now open)
2016-01-13T13:32:15.418-0500 I NETWORK  [conn91700534] end connection 192.168.1.50:33187 (5558 connections now open)
2016-01-13T13:32:15.418-0500 I NETWORK  [conn91700540] end connection 192.168.1.50:33193 (5557 connections now open)
2016-01-13T13:32:15.418-0500 I NETWORK  [conn91700538] end connection 192.168.1.50:33191 (5558 connections now open)
2016-01-13T13:32:15.418-0500 I NETWORK  [conn91700542] end connection 192.168.1.50:33195 (5557 connections now open)
2016-01-13T13:32:15.418-0500 I NETWORK  [conn91700532] end connection 192.168.1.50:33185 (5556 connections now open)
2016-01-13T13:32:15.419-0500 I NETWORK  [conn91700533] end connection 192.168.1.50:33186 (5552 connections now open)
2016-01-13T13:32:15.419-0500 I NETWORK  [conn91700535] end connection 192.168.1.50:33188 (5552 connections now open)
2016-01-13T13:32:15.419-0500 I NETWORK  [conn91700537] end connection 192.168.1.50:33190 (5552 connections now open)
2016-01-13T13:32:15.419-0500 I NETWORK  [conn91700541] end connection 192.168.1.50:33194 (5551 connections now open)
2016-01-13T13:32:15.419-0500 I NETWORK  [conn91700543] end connection 192.168.1.50:33196 (5551 connections now open)
2016-01-13T13:32:15.419-0500 I NETWORK  [conn91700539] end connection 192.168.1.50:33192 (5552 connections now open)
2016-01-13T13:32:15.548-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36754 #91705950 (5548 connections now open)
2016-01-13T13:32:15.549-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36755 #91705951 (5549 connections now open)
2016-01-13T13:32:15.550-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36756 #91705952 (5550 connections now open)
2016-01-13T13:32:15.550-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36757 #91705953 (5551 connections now open)
2016-01-13T13:32:15.550-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36758 #91705954 (5552 connections now open)
2016-01-13T13:32:15.551-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36760 #91705955 (5553 connections now open)
2016-01-13T13:32:15.551-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36759 #91705956 (5554 connections now open)
2016-01-13T13:32:15.551-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36762 #91705957 (5555 connections now open)
2016-01-13T13:32:15.551-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36761 #91705958 (5556 connections now open)
2016-01-13T13:32:15.553-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36763 #91705959 (5557 connections now open)
2016-01-13T13:32:15.553-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36764 #91705960 (5558 connections now open)
2016-01-13T13:32:15.554-0500 I NETWORK  [initandlisten] connection accepted from 192.168.1.50:36765 #91705961 (5559 connections now open)

デバッグに圹立぀可胜性のある远加情報を次に瀺したす。接続プヌルに関連するバグがある可胜性があるず思い始めおいたす。 ノヌドプロセスを再起動するず、mongod.logに倚数の新しい接続が衚瀺されたす。 その埌、玄1分埌、mongod.logに倚数の接続終了メッセヌゞが衚瀺されたす。

接続/切断は時間の経過ずずもにどんどん速く増幅するようです私はただそれを確認しようずしおいたすが。

これを匕き起こす兞型的な状況は次のようなものです。

レプリカセットには、ドラむバヌで解決できないホストが含たれおいたす。 ドラむバが接続するず、すべおの接続の正芏゜ヌスずしおレプリカセットが䜿甚されたす。 再接続ではこれらのアドレスが䜿甚されたす。 それらはドラむバヌによっお解決可胜でなければなりたせん。

たた、このような倚くの問題の原因ずなるIPアドレスの䜿甚は避け、完党修食ホスト名短瞮名なしを䜿甚する必芁がありたす。

@christkv OSがホストを解決できる堎合぀たり、pingを実行するこずによっお、これはドラむバヌも解決できるはずだずいう意味ですか

はいのはずですが、い぀でもtelnetホスト名ポヌトを䜿甚しお確認できたす。

ええ、私はホストずポヌトにtelnetで接続できたす。すべおのデヌタベヌスホストには、アプリケヌションサヌバヌに/ etc / hosts゚ントリがありたす。

アプリが起動しお接続プヌルが䜜成された埌、ネットワヌクの問題がない堎合、切断ず再接続が発生する必芁がありたすか たたは、mongodbログに衚瀺される通垞の接続タむムアりトず再接続はありたすか

問題は、ログの完党なセットなしで問題を理解しお再珟しようずするためにこれらのものを盞互に関連付けるこずが䞍可胜であるずいうこずですhttps://jira.mongodb.org/browse/NODE-622に関する私の最埌のコメントを参照しおください

゜ケットタむムアりトりィンドりにすべおの接続を実行するのに十分な操䜜がない堎合、プヌルは閉じお再接続したす。 したがっお、30秒のりィンドりず10の接続があり、5 opsしかない堎合、30秒ごずに再接続むベントが発生したす。

プヌルぞのすべおの接続を閉じたすか それずも、行䜿されおいない接続のみですか 30秒以内にすべおの接続を実行した堎合、次の30秒のりィンドりで同じチェックが実行されたすか

私はあなたがリク゚ストしたログをmongodbチケットで取埗しようずしたす。

すべお。 socketTimeoutりィンドりでプヌル内のすべおの接続を実行するこずに成功した堎合、node.jsは゜ケットをタむムアりトせず、プヌルを匷制的に再接続したせん。

倚数の接続は、実行速床の遅い操䜜が倚数䞊行しお行われおいる堎合にのみ圹立ちたす。それ以倖の堎合は、MongoDBが゜ケットごずにスレッドを䜿甚するため、プヌルが小さい方が適しおいたす。぀たり、数千の接続ではサヌバヌに割り圓おられたメモリが倚く必芁になりたす。より倚くのCPUコンテキストスむッチを匕き起こしたす。

mongodb-coreの次のメゞャヌリビゞョンでは、プヌルが成長するように倉曎されるほか、䜎速列車の問題を最小限に抑えるためのその他の基本的な倉曎がいく぀か行われたす。 ただし、それは数か月埌になり、おそらくMongoDB3.4の䜜業ず結び぀くでしょう。

倧量の切断/再接続が断続的にプラむマリサヌバヌが利甚できないずいう問題を匕き起こす可胜性があるず思いたすか

セットにサヌバヌがない可胜性がある短い期間があるため、はい

@christkvこれが再び発生するたで、他のチケットのログを送信するのを埅っおいたした。 私たちのクラスタヌは実際には過去数週間安定しおおり、この゚ラヌは発生しおいたせん。

@ChrisZiebaおかしいですそれはい぀も起こっおいるようです笑+1私は今のずころjiraでチケットを開いたたたにしお、私たちが䜕を理解できるか芋おみたしょう。

@christkvこんにちはクリスチャン、トラフィックが少ない堎合の回避策に぀いお䜕か

それが他の誰かに圹立぀堎合は、゜ケットタむムアりトを削陀し、keepAliveを200に増やし、プヌルサむズを3に枛らしたした。切断/再接続がはるかに少ないようですが、それでも時々発生したす。

誰かに圹立぀堎合は、socketTimeout、connectionTimeout、keepAliveなど、ほがすべおのマングヌス蚭定を削陀し、接続が安定し始めたした。 poolSizeは200です。
掚奚されるアプロヌチかどうかはわかりたせんが、珟圚は機胜しおいたす。 それが保持されおいるこずを確認するために、私たちはただそれを監芖しおいたす。

マングヌスv4.4.2
ノヌド4
Mongo 3.0

遅い操䜜が倧量にありたすか そうしないず、20゜ケットのプヌルず500゜ケットのプヌルの違いに気付かないず思いたす。

申し蚳ありたせん... 200です。コメントを修正したした。

そしお、ええ、あなたは正しいです。 倧きな違いは感じたせんが、プヌルのサむズは小さいよりも倧きいです。

接続が開いたたたで閉じない堎合の本圓の問題。 これは、マングヌスのタむムアりトずキヌプアラむブの蚭定をすべお削陀するたで発生しおいたした。 なぜこれらはmongoose / mongo-driverによっお凊理され、OSに凊理させないのでしょうか。

さお2.1.7以降には、これを回避するように再蚭蚈されたプヌルがありたす。 socketTimeout 0を蚭定するず、OSに委任されたすが、接続がハングするのに10分ほどかかる堎合がありたす。

OK。 面癜い。 キヌプアラむブずsocketTimeoutの蚭定を削陀したので、デフォルト蚭定は䜕ですか

それは、マングヌスが特定の蚭定をデフォルトずしお蚭定したかどうかはわかりたせん。 ドラむバでMongoClient.connectメ゜ッドを䜿甚する堎合、接続タむムアりトず゜ケットタむムアりトの䞡方で30秒です。

connect䜿甚したすが、30秒を手動で蚭定するず、接続が蓄積し始めたす。

500接続の堎合、プヌルを開いたたたにするには、socketTimeout期間内に少なくずも500 opsが必芁です。そうしないず、プヌルが閉じお再接続が匷制されたす。 ただし、プヌルは拡倧/瞮小モデルであるため、これは2.1.7で倉曎されたす。

私はmongodb3.2.6ずmongoose4.3.4で同じ問題を抱えおいたす。 これに぀いお䜕か助けはありたすか

@ 15astroは、 socketTimeoutずconnectionTimeoutの蚭定を削陀しお、問題が解決するかどうかを確認しおください。

@refaelos Ok..willl詊しおみおください..keepAlive = 6000で詊しおみたしたが、圹に立ちたせんでした。 socketTimeoutずconnectionTimeoutを削陀するずどのように圹立぀か知りたいだけですか

ええ、私たちはさたざたな倀でそれを詊したした、そしお私たちがこれらの蚭定を完党に削陀したずきだけ、物事はうたくいき始めたした。

@refaelos これらの蚭定を削陀しおもうたくいきたせんでした。 私が芋逃しおいる他の䜕か

@ 15astro男はいない。 ごめんなさい。 今日の蚭定は次のようになりたす。

mongo   : {
    uri    : process.env.MNG_URL || 'mongodb://localhost/myDB',
    options: {
      user   : process.env.MNG_USER,
      pass   : process.env.MNG_PASS,
      replset: {
        poolSize: 200
      }
    }

  }

私の堎合、それは/ etc / hostsでのIPから名前ぞのバむンディングの欠劂に関連しおいたした。

IPの代わりに名前を䜿甚しおレプリカセットを蚭定し、MongoDBノヌドの/ etc / hostsに次のようなものがある堎合

10.10.10.10 mongodb-2gb-fra1-02 10.10.10.11 mongodb-2gb-fra1-01 10.10.10.12 mongodb-2gb-fra1-03

次に、それをすべおのアプリサヌバヌの/ etc / hostsに配眮する必芁もありたす。

node-mongoは、URIに入力した内容に埓っお接続するず思いたしたが、そうではありたせん。

node-mongoはMongoURIからIPたたは名前で接続し、リク゚ストに応答した最初のMongoDBノヌドから他のレプリカメンバヌのホスト名を取埗しおいるようです。 たずえば、 mongodb-2gb-fra1-03を取埗し、解決のためにOSに枡したす。 OSがmongodb-2gb-fra1-03に぀いお䜕も知らない堎合、「䜿甚可胜なプラむマリサヌバヌがありたせん」ずいう゚ラヌがスロヌされたす。

お圹に立おば幞いです。

@adriankはい、それは正しいです。それは、レプリカ

@christkvただし、 MongoSpectorのようなツヌルにずっおは悪倢です。 そのため、1぀のホストから耇数のレプリカに安党に接続する際に問題が発生したす。 DigitalOceanは、ほずんど誰も倉曎しない名前をドロップレットに自動生成したす。その結果、倚くのクラむアントがプラむマリずしおmongodb-2gb-fra1-01を䜿甚したす。 :)私たちは䜕かを理解できるこずを願っおいたす。

ここhttps://jira.mongodb.org/browse/SERVER-1889でサヌバヌチケットを远跡しおい

たた、DigitalOceanにチケットを提出しお、圌らが犯しおいる間違いず、それがナヌザヌにどのように圱響しおいるかを指摘する必芁がありたす。

ちなみに、新しい名前がipsであるレプリカセットメンバヌを削陀しお再床远加するこずができたす

同様の問題があり、接続しおから玄12〜24時間埌に、「プラむマリサヌバヌが利甚できたせん」ずいう゚ラヌが衚瀺されたす。

通垞、再起動するず問題が解決したす。

接続
{ "url": "mongodb://user:password@cluser-shard-00-00, cluser-shard-00-01, cluster-shard-00-02/settings?ssl=true&replicaSet=primarycluster-shard-0&authSource=admin&retryWrites=true", "options": { "db": { "w": 1, "wtimeout": 3000, "fsync": true }, "authSource": "admin", "server": { "poolSize": 3, "socketOptions": { "autoReconnect": true, "keepAlive": 60000, "connectTimeoutMS": 7000, "socketTimeoutMS": 15000 } } }, "password": "password", "username": "username" }

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡