ãããã°ãããªãé£ããåé¡ãããã誰ããç§ã®æ§æã«äœãåé¡ãããã®ã§ã¯ãªãããšæã£ãŠããŸããã
Error no primary server available
NodejsããŒãžã§ã³4.2.1
ããã³mongoDBããŒãžã§ã³3.0.7
ãšmongoose 4.2.8
ã
ããã¯ã©ã³ãã ã«çºçããããã§ãæçµçã«ããŒãããã»ã¹ãåèµ·åãããŸã§ãå€ãã®æ¥ç¶ãéãããŸãã ãã®ãšã©ãŒã®éãã¯ã©ã¹ã¿ãŒã¯åžžã«æ£åžžã§ãã ãã®ãšã©ãŒã¯1æéã«æ°çŸåçºçããŸãã ãšã©ãŒããã€å§ãŸããã«ã€ããŠã¯äžè²«æ§ããªãããã§ãã ããšãã°ãã¯ã©ã¹ã¿ãŒãæ£åžžã«åäœããŠããŠããã©ã€ããªãŒã«å€æŽãå ããããŠããªãå Žåã«çºçããŸãã
ããã¯ãdbçµ±èšãã©ã®ããã«èŠãããã§ãã ã芧ã®ãšãããæ¥ç¶æ°ã¯çå®ã«å¢å ããŠããŸãã ããŒãããã»ã¹ã匷å¶çµäºããŠæ°ããããã»ã¹ãéå§ãããšããã¹ãŠåé¡ãããŸããã
æ§æ
// 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
çŸæç¹ã§ã¯äœãé£ã³åºããŠããŸããã ã©ã®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
ã¢ãã¿ãªã³ã°ïŒ
ãã®ã¹ã¿ãã¯ãã¬ãŒã¹ã¯ã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
ãããŸãã ãã®åé¡ããã®ãŸãŸè§£æ±ºããã®ã¯é£ããïŒ
@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"
}