Mongoose: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ณธ ์„œ๋ฒ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 12์›” 01์ผ  ยท  76์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Automattic/mongoose

๋””๋ฒ„๊น…ํ•˜๊ธฐ๊ฐ€ ๋‹ค์†Œ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ๊ตฌ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

Error no primary server available

Nodejs ๋ฒ„์ „ 4.2.1 ๋ฐ mongoDB ๋ฒ„์ „ 3.0.7 with mongoose 4.2.8 .

์ด๊ฒƒ์€ ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ๋งˆ์นจ๋‚ด ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ๊นŒ์ง€ ๋งŽ์€ ์—ฐ๊ฒฐ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜ ๋™์•ˆ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ํ•ญ์ƒ ์ •์ƒ ์ž…๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” ์‹œ๊ฐ„๋‹น ์ˆ˜๋ฐฑ ๋ฒˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์‹œ์ž‘๋˜๋Š”์‹œ๊ธฐ์— ๋Œ€ํ•œ ์ผ๊ด€์„ฑ์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ณ  ๊ธฐ๋ณธ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด 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, ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜์— ๊ธฐ๋ณธ ์„ธํŠธ "stateStr" : "PRIMARY", ์žˆ์Šต๋‹ˆ๋‹ค.

DNS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ํ‰ํ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ์ค‘ ํ•˜๋‚˜์˜ ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ์ง€ ๋‹ค์‹œ ํ™•์ธํ•˜๊ณ  ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

DNS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋™์ผํ•œ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋น— EC2 IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์Šคํ† ๋ฆฌ์ง€์˜ ์ตœ๋Œ€ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ถ€ํŒ… ํ•œ ํ›„์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํ•˜๋ฉด ๊ธฐ๋ณธ ์„œ๋ฒ„๊ฐ€์—†๋Š” ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์„ธํŠธ๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ฐฉ์‹์— ๋”ฐ๋ผ EC2 IP ์ฃผ์†Œ๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‰˜์—์„œ 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
}

๋ณต์ œ ์„ธํŠธ์—์„œ ํŠน์ดํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค๋ฅธ ๊ด€๋ จ ์ฝ”๋“œ ์ƒ˜ํ”Œ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ชฝ๊ตฌ์Šค ์—ฐ๊ฒฐ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ณ ๋ คํ•  ๊ฐ€์น˜๊ฐ€์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ž ์žฌ์  ์ธ ๋ฌธ์ œ๋Š” ์ตœ์‹ ์˜ ์ƒˆ๋กœ์šด ์œ ๋ฌผ ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ƒˆ๋กœ์šด ์œ ๋ฌผ์—†์ด ์‹คํ–‰์„ ์‹œ๋„ํ•˜๊ณ  ์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ƒˆ๋กœ์šด ์œ ๋ฌผ์€ 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"
 }
}

์ €๋Š” ์ด๋ฒˆ ์ฃผ mongodb days ์ด๋ฒคํŠธ์— ์ฐธ์„ํ•˜์—ฌ ์ผ์ •์„ ์žก๊ณ  MongoDB์˜ ์„ ์ž„ ์—”์ง€๋‹ˆ์–ด ์ค‘ ํ•œ ๋ช…์—๊ฒŒ์ด ๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ถˆํ–‰ํžˆ๋„์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์— ๋ณต์ œ ์„ธํŠธ์™€ ์ตœ๋Œ€ ํ’€ ํฌ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Keep alive๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ธ์Šคํ„ด์Šค์—์„œ ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์—์„œ ๋‚ด๋ถ€ ec2 IP๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์•„์ง ์‹œ๋„ํ•˜์ง€ ์•Š์€ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ connectWithNoPrimary ์„ true ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ mongo-express ์˜คํ”„๋กœ ๋‹ฌ๋ฆฌ๊ธฐ๋ฅผ ์‹œ๋„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 500-700rpm +์—์„œ ํ”ผํฌ๋ฅผ ๊ฐ€์ง„ ์•ฝ 100RPM์˜ ์ง€์†์ ์ธ ๋ถ€ํ•˜๋ฅผ ๊ฒฝํ—˜ํ•˜๊ณ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€์ ์œผ๋กœ ๊ฝค ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ์—๋„ ํ”„๋กœ์„ธ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ์ด๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ:
Heroku-75 2x ๋‹ค์ด ๋…ธ์Šค-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
/app/node_modules/newrelic/lib/instrumentation/mongodb.js:185์— Object.wrapped
/app/node_modules/mongodb/lib/collection.js:2327์˜ Object.findAndModify
/app/node_modules/mongodb/lib/collection.js:2265์˜ Collection.Collection.findAndModify
Object.wrapped /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. (ํ•จ์ˆ˜ ๋‚ด ์ต๋ช…) [as 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
unknown. [anonymous] in /app/node_modules/kareem/index.js:156
unknown. [anonymous] in /app/node_modules/kareem/index.js:18
Object.wrapped /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) ์ƒˆ๋กœ์šด ์œ ๋ฌผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค (new ์œ ๋ฌผ์€ 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๋Š” ์—ฐ๊ฒฐ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ "์žฌ ์—ฐ๊ฒฐ"์ด๋ฒคํŠธ๋ฅผ ๊ณ„์†ํ•ด์„œ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

"์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฃผ ์„œ๋ฒ„ ์—†์Œ"์˜ค๋ฅ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฐ๊ฒฐ ์ˆ˜๊ฐ€ ์ด๋ฏธ ์ฆ๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ _after_๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋„์ด ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. MongoLab๊ณผ ํ•จ๊ป˜ Heroku์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” Node ์•ฑ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
์ง€๋‚œ์ฃผ์— ๊ฐ‘์ž๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ๊ณ  Error no primary server available ๋ฉ”์‹œ์ง€๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
Heroku์™€ MonogLab ๋ชจ๋‘ ๋กœ๊ทธ์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฒ”ํ”„-๋Œ€๊ทœ๋ชจ ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ์—์„œ node v4.2.3 mongoose v4.1.5 ์—์„œ์ด ํ˜„์ƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

  • ์ง€์†์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ์กฐ์น˜๋ฅผ ์ทจํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค (ํ”„๋กœ์„ธ์Šค ๋‹ค์‹œ ์‹œ์ž‘ / ๋…ธ๋“œ ์ œ๊ฑฐ).
  • ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•˜๋ฉฐ mongo replset ์ƒํƒœ์™€ ๊ด€๋ จ์ด์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

@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

์„ ๋ฌผํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ด๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค! :)

๊ณ ์ • ๋ฒ„์ „์€ ์ด๋ฏธ NPM https://www.npmjs.com/package/mongodb ์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

๋” ์ด์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. : tada :

mongodb 2.1.2์— ๋Œ€ํ•œ PR : https://github.com/Automattic/mongoose/pull/3712

mongoose๋ฅผ mongo core 2.1.2 ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” 4.3.4 ์—…๊ทธ๋ ˆ์ด๋“œ ํ•œ ํ›„์—๋„์ด ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. https://jira.mongodb.org/browse/NODE-622 ๊ฐ€ ์žฌ๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

+1 ์šฐ๋ฆฌ ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„์—์„œ๋„ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์ด์œ ์— ๋Œ€ํ•œ ์–ด๋–ค ํŒจํ„ด๋„ ๋ณด์ง€ ๋ชปํ•œ๋‹ค. mongoose 4.3.4 ๋ฐ mongodb 3.0.8๊ณผ ํ•จ๊ป˜ ๋…ธ๋“œ 4.2.4 ์‚ฌ์šฉ. mongodb์˜ MMS ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๋™์•ˆ ๊ฒฝ๊ณ ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. MongoError : ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋ณธ ์„œ๋ฒ„ ์—†์Œ

@ amit777 ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด๊ณผ ์˜ต์…˜์„ ๊ฒŒ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋งŽ์€ ์“ฐ๊ธฐ์™€ ๊ฐ™์ด ๋น„์ •์ƒ์ ์œผ๋กœ ๋ฌด๊ฑฐ์šด ์›Œํฌ๋กœ๋“œ ์ค‘์— ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒ ํ–ˆ์Šต๋‹ˆ๊นŒ?

Chris, ์“ฐ๊ธฐ ์ž‘์—… ์ค‘์— ํ™•์‹คํžˆ ๋ฐœ์ƒํ•˜์ง€๋งŒ ๋ถ€ํ•˜๊ฐ€ ํŠนํžˆ ๋ฌด๊ฒ๋‹ค ๊ณ  ๋งํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ 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์— ์—ฌ๋Ÿฌ ์—ฐ๊ฒฐ ์ข…๋ฃŒ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ / ์—ฐ๊ฒฐ ํ•ด์ œ๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋” ๋น ๋ฅด๊ณ  ๋น ๋ฅด๊ฒŒ ์ฆํญ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (์—ฌ์ „ํžˆ ํ™•์ธํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ ์ค‘์ž„).

์ด๊ฒƒ์„ ์ผ์œผํ‚ค๋Š” ์ „ํ˜•์ ์ธ ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Replicaset์— ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ™•์ธํ•  ์ˆ˜์—†๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉด ๋ณต์ œ ์„ธํŠธ๋ฅผ ๋ชจ๋“  ์—ฐ๊ฒฐ์˜ ํ‘œ์ค€ ์†Œ์Šค๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์žฌ ์—ฐ๊ฒฐ์€ ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šด์ „์ž๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด์™€ ๊ฐ™์€ ๋งŽ์€ ๋ฌธ์ œ์˜ ์›์ธ์ด๋˜๋Š” IP ์ฃผ์†Œ ์‚ฌ์šฉ์„ ํ”ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ํ•œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ (์งง์€ ์ด๋ฆ„ ์—†์Œ)์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

@christkv OS๊ฐ€ ํ˜ธ์ŠคํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ (์˜ˆ : ping ์ˆ˜ํ–‰)), ์ด๊ฒƒ์€ ๋“œ๋ผ์ด๋ฒ„๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๋ž˜์•ผํ•˜์ง€๋งŒ ํ•ญ์ƒ ํ…”๋„ท ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ๋กœ ํ…”๋„ท์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜ธ์ŠคํŠธ์—๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์„œ๋ฒ„์— / etc / hosts ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค).

์•ฑ์ด ์‹œ์ž‘๋˜๊ณ  ์—ฐ๊ฒฐ ํ’€์ด ์ƒ์„ฑ ๋œ ํ›„ ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๊ฐ€์—†๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์ด ๋Š๊ฒผ๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜์–ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด mongodb ๋กœ๊ทธ์—์„œ ๋ณผ ์ˆ˜์žˆ๋Š” ์ •์ƒ์ ์ธ ์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐ ๋‹ค์‹œ ์—ฐ๊ฒฐ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” ์ „์ฒด ๋กœ๊ทธ ์„ธํŠธ์—†์ด ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์„ ์ƒํ˜ธ ์—ฐ๊ด€์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (https://jira.mongodb.org/browse/NODE-622์— ๋Œ€ํ•œ ๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€ ์ฐธ์กฐ).

์†Œ์ผ“ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฐฝ์— ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ์‹คํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ž‘์—…์ด์—†๋Š” ๊ฒฝ์šฐ ํ’€์ด ๋‹ซํžˆ๊ณ  ๋‹ค์‹œ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 30 ์ดˆ ์ฐฝ๊ณผ 10 ๊ฐœ์˜ ์—ฐ๊ฒฐ์ด ์žˆ์ง€๋งŒ 5 ๊ฐœ์˜ ์ž‘์—… ๋งŒ์žˆ๋Š” ๊ฒฝ์šฐ 30 ์ดˆ๋งˆ๋‹ค ๋‹ค์‹œ ์—ฐ๊ฒฐ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ’€์— ๋Œ€ํ•œ ๋ชจ๋“  ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์šด๋™ํ•˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ ๋งŒ? 30 ์ดˆ ์ด๋‚ด์— ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ 30 ์ดˆ ๋™์•ˆ ๋™์ผํ•œ ๊ฒ€์‚ฌ๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๊นŒ?

mongodb ํ‹ฐ์ผ“์—์„œ ์š”์ฒญํ•œ ๋กœ๊ทธ๋ฅผ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค .. ๋„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‘. socketTimeout ์ฐฝ์—์„œ ํ’€์˜ ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ์‹คํ–‰ํ•˜๋ฉด node.js๋Š” ์†Œ์ผ“์„ ์‹œ๊ฐ„ ์ดˆ๊ณผํ•˜์ง€ ์•Š๊ณ  ํ’€ ์žฌ ์—ฐ๊ฒฐ์„ ๊ฐ•์ œ๋กœ ๋‹ซ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŒ ๋งŽ์€ ์—ฐ๊ฒฐ์€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—…์ด ๋งŽ์„ ๋•Œ๋งŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ CPU ์ปจํ…์ŠคํŠธ ์ „ํ™˜์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

mongodb-core์˜ ๋‹ค์Œ ์ฃผ์š” ๊ฐœ์ •ํŒ์€ ๋Š๋ฆฐ ์—ด์ฐจ ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ทผ๋ณธ์ ์ธ ๋ณ€ํ™”๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ’€์ด ์„ฑ์žฅํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋ช‡ ๋‹ฌ ํ›„์— MongoDB 3.4 ์ž‘์—…๊ณผ ํ•จ๊ป˜ ๋ฌถ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—„์ฒญ๋‚œ ์–‘์˜ ์—ฐ๊ฒฐ ํ•ด์ œ / ์žฌ ์—ฐ๊ฒฐ๋กœ ์ธํ•ด ๊ฐ„ํ—์ ์œผ๋กœ ์ฃผ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ์„ธํŠธ์— ์„œ๋ฒ„๊ฐ€ ์—†์„ ์ˆ˜์žˆ๋Š” ์งง์€ ๊ธฐ๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@christkv ๋‹ค๋ฅธ ํ‹ฐ์ผ“์— ๋กœ๊ทธ๋ฅผ ๋ณด๋‚ผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์‹ค์ œ๋กœ ์ง€๋‚œ ๋ช‡ ์ฃผ ๋™์•ˆ ์•ˆ์ •์ ์ด์—ˆ์œผ๋ฉฐ์ด ์˜ค๋ฅ˜๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

@ChrisZieba ์žฌ๋ฏธ์žˆ๊ฒŒ ํ•ญ์ƒ ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ ๊ฐ™๋„ค์š” ใ…‹ใ…‹ : +1 : ์ง€๊ธˆ์€ ํ‹ฐ์ผ“์„ jira์— ์—ด์–ด๋‘๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ด…๋‹ˆ๋‹ค.

@christkv ์•ˆ๋…•ํ•˜์„ธ์š” Christian, ํŠธ๋ž˜ํ”ฝ์ด ๋‚ฎ์€ ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ํ’€ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์ œํ•œ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด๋œ๋‹ค๋ฉด ์†Œ์ผ“ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  keepAlive๋ฅผ 200์œผ๋กœ ๋Š˜๋ฆฌ๊ณ  ํ’€ ํฌ๊ธฐ๋ฅผ 3์œผ๋กœ ์ค„์˜€์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ํ•ด์ œ / ์žฌ ์—ฐ๊ฒฐ์ด ํ›จ์”ฌ ์ ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฐ€๋” ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๋„์›€์ด๋œ๋‹ค๋ฉด socketTimeout ๋ฐ connectionTimeout ๋ฐ keepAlive๋ฅผ ํฌํ•จํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ๋ชฝ๊ตฌ์Šค ์„ค์ •์„ ์ œ๊ฑฐํ•˜๊ณ  ์—ฐ๊ฒฐ์ด ์•ˆ์ •๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ poolSize๋Š” 200์ž…๋‹ˆ๋‹ค.
๊ถŒ์žฅ๋˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ง€๊ธˆ์€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฝ๊ตฌ์Šค v4.4.2
๋…ธ๋“œ 4
๋ชฝ๊ณ  3.0

๋Š๋ฆฐ ์ž‘์—…์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 20 ์†Œ์ผ“ ํ’€๊ณผ 500 ํ’€ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ๋ˆˆ์น˜ ์ฑ„์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. 200์ž…๋‹ˆ๋‹ค. ๋Œ“๊ธ€์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋„ค ๋ง์ด ๋งž์•„์š”. ์šฐ๋ฆฌ๋Š” ํฐ ์ฐจ์ด๋ฅผ ๋Š๋ผ์ง€ ๋ชปํ•˜์ง€๋งŒ ํ’€ ํฌ๊ธฐ๊ฐ€ ๋” ์ž‘์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์ด ๊ณ„์† ์—ด๋ฆฌ๊ณ  ๋‹ซํžˆ์ง€ ์•Š์„ ๋•Œ์˜ ์‹ค์ œ ๋ฌธ์ œ. ์ด๊ฒƒ์€ ๋ชฝ๊ตฌ์Šค ํƒ€์ž„ ์•„์›ƒ๊ณผ keepAlive ์„ค์ •์„ ๋ชจ๋‘ ์ œ๊ฑฐ ํ•  ๋•Œ๊นŒ์ง€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์™œ ์ด๊ฒƒ๋“ค์ด mongoose / mongo-driver์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜๊ณ  OS๊ฐ€ ๊ทธ๊ฒƒ์„ํ•˜์ง€ ๋ชปํ•˜๊ฒŒํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

Well 2.1.7 ์ด์ƒ์—๋Š”์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์žฌ ์„ค๊ณ„๋œ ํ’€์ด ์žˆ์Šต๋‹ˆ๋‹ค. socketTimeout 0์„ ์„ค์ •ํ•˜๋ฉด OS์— ์œ„์ž„ํ•˜์ง€๋งŒ 10 ๋ถ„ ์ •๋„์˜ ์—ฐ๊ฒฐ์ด ๋Š๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์ธ. ํฅ๋ฏธ ๋กญ๊ตฐ์š”. ์ด์ œ keepAlive ๋ฐ socketTimeout ์„ค์ •์„ ์ œ๊ฑฐ ํ–ˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ ์„ค์ •์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ชฝ๊ตฌ์Šค๊ฐ€ ํŠน์ • ์„ค์ •์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„์—์„œ MongoClient.connect ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ๋ฐ ์†Œ์ผ“ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ชจ๋‘์— ๋Œ€ํ•ด 30 ์ดˆ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” connect ํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ 30 ์ดˆ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์—ฐ๊ฒฐ์ด ์Œ“์ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

500 ๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด socketTimeout ๊ธฐ๊ฐ„ ๋‚ด์— ์ตœ์†Œ 500 ๊ฐœ์˜ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ’€์ด ๋‹ซํžˆ๊ณ  ๋‹ค์‹œ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ’€์ด ์„ฑ์žฅ / ์ถ•์†Œ ๋ชจ๋ธ์ด๊ธฐ ๋•Œ๋ฌธ์— 2.1.7์—์„œ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

mongodb 3.2.6 ๋ฐ mongoose 4.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์— ๋„ฃ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋…ธ๋“œ-๋ชฝ๊ณ ๊ฐ€ ๋‚ด๊ฐ€ URI์— ๋„ฃ์€ ๊ฒƒ์— ๋”ฐ๋ผ ์—ฐ๊ฒฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

node-mongo๋Š” Mongo URI์—์„œ IP ๋˜๋Š” ์ด๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐ ํ•œ ๋‹ค์Œ ์š”์ฒญ์— ์‘๋‹ต ํ•œ ์ฒซ ๋ฒˆ์งธ MongoDB ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ณต์ œ๋ณธ ๊ตฌ์„ฑ์›์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด mongodb-2gb-fra1-03 ๋ฅผ ๊ฐ€์ ธ์™€ ํ•ด๊ฒฐ์„ ์œ„ํ•ด OS์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. OS๊ฐ€ mongodb-2gb-fra1-03 ์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ "Error no primary server available"์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@adriank ์˜ˆ ๋งž์Šต๋‹ˆ๋‹ค. ๋ณต์ œ ์„ธํŠธ ๊ตฌ์„ฑ์—์„œ ๋‹ค์‹œ ๊ฐ€์ ธ์˜จ ์—ฐ๊ฒฐ์˜ ์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ด๊ฒƒ์ด ๋ณต์ œ ์„ธํŠธ์— ๋Œ€ํ•œ ์ง„์‹ค์˜ ํ‘œ์ค€ ์†Œ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋˜ํ•œ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์žฅ์•  ์กฐ์น˜ํ•˜๊ณ  ์„ธํŠธ์—์„œ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ๋˜๋Š” ์„œ๋ฒ„๋ฅผ ๊ฐ์ง€ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณต์ œ ์„ธํŠธ ๊ตฌ์„ฑ์˜ ๋ชจ๋“  ์ฃผ์†Œ๋ฅผ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•˜๋Š” ์ด์œ ์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋“œ๋ผ์ด๋ฒ„๋Š” SDAM ์‚ฌ์–‘์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋” ๋Š์Šจํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@christkv ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ ๊ฐ™์€ ๋„๊ตฌ์— ๋Œ€ํ•œ ์•…๋ชฝ MongoSpector . ์ด๋กœ ์ธํ•ด ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ์—์„œ ๋‘˜ ์ด์ƒ์˜ ๋ณต์ œ๋ณธ์— ์•ˆ์ „ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. DigitalOcean์€ ๊ฑฐ์˜ ์•„๋ฌด๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๋ฌผ๋ฐฉ์šธ์— ์ด๋ฆ„์„ ์ž๋™ ์ƒ์„ฑํ•˜๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ๋งŽ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ PRIMARY๋กœ mongodb-2gb-fra1-01 ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. :) ์šฐ๋ฆฌ๊ฐ€ ๋ญ”๊ฐ€ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

https://jira.mongodb.org/browse/SERVER-1889 ์—์„œ ์„œ๋ฒ„ ํ‹ฐ์ผ“์„ ์ถ”์ ํ•˜๊ณ 

๋˜ํ•œ DigitalOcean์— ๊ทธ๋“ค์ด ์ €์ง€๋ฅธ ์‹ค์ˆ˜์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ง€์ ํ•˜๋Š” ํ‹ฐ์ผ“์„ ์ œ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ƒˆ ์ด๋ฆ„์ด ips ์ธ replicaset ๊ตฌ์„ฑ์›์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์•ฝ 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 ๋“ฑ๊ธ‰