MongoDB 볡μ λ³Έ μΈνΈμ λν κ°λ¨ν μ°κ²°. Mongoose 4.4.19μμλ μ μλνμ§λ§ 4.6.2μμλ μλνμ§ μμ΅λλ€.
mongoURI = " mongodb://IP :27017,IP:27017/" + dbName + "?replicaSet=my_replica_set";
4.6.2λ₯Ό μ¬μ©νμ¬ λ€μμ μλνμ΅λλ€.
μ°κ²° λ¬Έμμ΄μ΄ νλμ λ°μ΄ν°λ² μ΄μ€λ§ μ¬μ©νλ κ²½μ° μ λλ‘ μλν©λλ€. μ΄ μ€λ₯κ° λ°μνλ μ΄μ κ° μ λ§ κΆκΈν©λλ€. μ΄κ²¬μλ μ¬λ?
μ 체 μ€λ₯:
/Users/adeel/dev/navi/euler/node_modules/mongodb/lib/replset.js:360
process.nextTick(function() { μ€λ₯ λ°μ; })
^^
MongoError: 볡μ μΈνΈμμ κΈ°λ³Έμ μ°Ύμ μ μμ΅λλ€.
/Users/adeel/dev/navi/euler/node_modules/mongodb-core/lib/topologies/replset.js:631:32μμ
μ .
gμμ (events.js:286:16)
emitOneμμ (events.js:96:13)
λ°©μΆ μ(events.js:188:7)
μ .
emitOneμμ (events.js:96:13)
λ°©μΆ μ(events.js:188:7)
μ .
gμμ (events.js:286:16)
EmmitTwoμμ (events.js:106:13)
λ°©μΆ μ(events.js:191:7)
μμΌμμ.
Socket.gμμ (events.js:286:16)
emitOneμμ (events.js:96:13)
Socket.emitμμ (events.js:188:7)
+1
mongo μκ³Ό μ°κ²°ν μ μμ΅λκΉ?
λλ mongo μκ³Ό μ°κ²°ν μ μμ΅λλ€. DBκ° μ μλν©λλ€. μ°λ¦¬λ νλ‘λμ μ μμΌλ©° λ§μ λ§μ΄ν¬λ‘ μλΉμ€κ° 볡μ λ³Έ μΈνΈ λ¬Έμμ΄μ μ¬μ©νμ¬ DBμ μ°κ²°λ©λλ€.
κ·Έλ¬λ μ νλ‘μ νΈμ κ²½μ° λ ν리카 μΈνΈ λ¬Έμμ΄μ μ¬μ©νμ¬ μ°κ²°νλ κ²μ΄ μλνμ§ μλ κ² κ°μ΅λλ€. κ·Έλ¦¬κ³ λ§μ€ν° λ Έλμ IP μ£Όμλ§ μ¬μ©ν΄μΌ ν©λλ€. λλ μ²μμ μ΄κ²μ΄ λ²μ λ¬Έμ (4.6.2 λ 4.4.19)λΌκ³ μκ°νμ΅λλ€.
κ·Έλ¬λ μ΅κ·Όμλ μ νλ‘μ νΈμμλ 4.6.2μ 볡μ λ³Έ λ¬Έμμ΄μ μ¬μ©νμ¬ μ°κ²°ν μ μμμ΅λλ€. μμ ν΄κ²°μ± μΌλ‘ λ§μ€ν° λ Έλμ IP μ£Όμ(IP μ£Όμκ° νλλ§ μλ μ°κ²° λ¬Έμμ΄)λ₯Ό μ¬μ©νκΈ°λ‘ νμ΅λλ€.
λΉμ·ν λ¬Έμ κ° μμ΅λλ€. λ λ§μ μ€λͺ
μ μΆκ°νκ±°λ μ’μ μ½λ μμ λ₯Ό μ 곡ν μ μμ΅λλ€.
κ·Έλ¬λ λ΄ μμ¬μ μ΄κ²μ΄ μ’
μμ± μ€ νλμ λΉνΈνμ±κ³Ό κ΄λ ¨μ΄ μλ€λ κ²μ
λλ€.
μ΄ λ¬Έμ λ₯Ό μ²μ κ΄μ°°ν κ²μ λ€λ₯Έ ν¨ν€μ§λ₯Ό μ
λ°μ΄νΈνμ λμμ΅λλ€(λΉμ 4.5.8μ μλ λͺ½κ΅¬μ€λ μλ).
@zoellner μ΄ λ¬Έμ κ° μμλκΈ° μ§μ μ μ λ°μ΄νΈν ν¨ν€μ§μ ν보 λͺ©λ‘μ κ²μν μ μλ€λ©΄ λ΄ λͺ©λ‘κ³Ό λμ‘°νμ¬ νμΈν μ μμΌλ©° λΉνΈνμ±μ΄ μλ λΆλΆμ μ νν μ°ΎμλΌ μ μμ΅λλ€.
μ΄ λ¬Έμ κ° μ νλ‘μ νΈμμλ§ λ°μνλ€λ μ μ κ³ λ €ν λ Mongooseκ° λ€λ₯Έ npm ν¨ν€μ§μ μ΅μ λ²μ κ³Ό νΈνλμ§ μκΈ° λλ¬ΈμΌ κ°λ₯μ±μ΄ ν½λλ€.
@adeelzaman λ¬Έμ λ₯Ό μΌμΌν€κΈ° μμν 컀λ°μ λν΄ λ΄ νλ‘μ νΈμ npm-shrinkwrap.jsonμ diffλ₯Ό λ§λ€μμ΅λλ€. μ’ κΈΈμ΄μ μ¬κΈ°μ μ¬λ¦½λλ€.
https://gist.github.com/zoellner/eddd3d40291e150919bb025f452f9054
@adeelzaman λ¬Έμ μ μμΈμ΄ λλ κ²μΌλ‘ νμΈλ κ²μΌλ‘ λ°©κΈ μμ μμ§λ₯Ό μ λ°μ΄νΈνμ΅λλ€.
@zoellner κ·Έ μμ§μμ μ΄λ κ²μ΄ μμΈμΈμ§ μ μ μμ΅λλ€. μλ €μ£Όμ€ μ μμ΅λκΉ?
Mongoose 4.5.8μμλ λ¬Έμ κ° λ°μνμ§ μλλ€λ κ²μ μμμ΅λλ€. μΌμμ μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ¦¬ν¬μ§ν 리λ₯Ό Mongoose 4.5.8μ κ³ μ νμ΅λλ€.
λν λ¬Έμ λ₯Ό 격리νλ €κ³ ν λ νλμ λ Έλ λͺ¨λ(mongoose)λ§μΌλ‘ μμ ν μλ‘μ΄ νλ‘μ νΈλ₯Ό λ§λ€κ³ 4.6.0μ μ¬μ©νμ¬ λ³΅μ μΈνΈμ μ°κ²°νλ €κ³ μλνμ§λ§ λμΌν μ€λ₯κ° λ°μνμμ μΈκΈν΄μΌ ν©λλ€.
κ·Έλ λ€λ©΄ λΉνΈνμ± μ€λ₯κ° μλλΌ 4.6.0μ μ€λ₯μΌκΉμ? μ€λ₯μ μμΈμ λ°λΌ λ μ΄μ μ νν μ§μ ν μ μμ΅λλ€. μκ°μ΄ λλ©΄ μ’ λ λ€μ¬λ€ λ³Ό μκ°μ λλ€.
λ°©κΈ 4.6.2 λ° 4.6.4μμ λμΌν λ¬Έμ λΌκ³ νμ νλ κ²μ λ§λ¬μ΅λλ€. μμ λμΌν κ΅¬μ± uri μ€μ μμ λ΄ λ ν리카μ μ°κ²°μ λν΄ μ΄ μΆλ ₯μ μ»μ΅λλ€.
Error: Uncaught, unspecified "error" event. ([object Object])
at NativeConnection.emit (events.js:163:17)
at /home/projects/xxx/xxx/node_modules/mongoose/lib/connection.js:466:17
at NativeConnection.Connection.error (/home/projects/xxx/xxx/node_modules/mongoose/lib/connection.js:489:12)
at /home/projects/xxx/xxx/node_modules/mongoose/lib/connection.js:520:15
at /home/projects/xxx/xxx/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:216:21
at /home/projects/xxx/xxx/node_modules/mongodb/lib/db.js:229:14
at .<anonymous> (/home/projects/xxx/xxx/node_modules/mongodb/lib/replset.js:357:9)
at g (events.js:286:16)
at emitOne (events.js:96:13)
at emit (events.js:188:7)
at Timeout.<anonymous> (/home/projects/xxx/xxx/node_modules/mongodb-core/lib/topologies/replset.js:507:14)
at tryOnTimeout (timers.js:232:11)
at Timer.listOnTimeout (timers.js:202:5)
ν μ΄μνλ€. mongooseλ μ체μ μΌλ‘ 볡μ λ³Έ μΈνΈλ‘ μ무 μμ λ νμ§ μκΈ° λλ¬Έμ μ΄κ²μ κΈ°λ³Έ mongodb λλΌμ΄λ²μ λ¬Έμ μΈ κ²μ΄ κ±°μ νμ€ν©λλ€. mongodb λλΌμ΄λ² 2.2.11μμ μμ λ 볡μ μΈνΈμ λͺ κ°μ§ λ¬Έμ κ° μμμ΅λλ€. mongoose 4.6.5λ‘ μ κ·Έλ μ΄λνκ³ λ¬Έμ κ° ν΄κ²°λλμ§ νμΈν©λλ€.
+1
@mo4islona λ 4.6.5μμ κ³μ λ°μν©λκΉ?
+1 λμΌν λ¬Έμ (4.6.5μμλ).
μ΄ λ²μ 4.6.0 μ΄νμ μ΅μ μμ
λ²μ 4.5.9μμ "볡μ μΈνΈμμ κΈ°λ³Έμ μ°Ύμ μ μμ" μ€λ₯κ° λνλ©λλ€.
@ vkarpov15 μ 4.6.5κ° μλνμ§ μμ΅λλ€. 4.5.9λ μλνμ§ μμμ§λ§ 4.4.19λ μλν©λλ€.
λ€μκ³Ό κ°μ uriλ₯Ό μ¬μ©νλ λμΌν λ¬Έμ
mongodb://user:password<strong i="6">@server1</strong>,server2,server3/database?replicaSet=repname
4.5.9μμ μλνμ§λ§ μ΅μ λ²μ μμ μ€λ₯κ° λ°μν©λλ€.
μ€λ λλ mongoose 4.5.9λ‘ μ°λΆν¬ 14μ μ€μΉνλλ° κ°μ μ€λ₯κ° λ°μνμ΅λλ€
/node_modules/mongodb/lib/mongo_client.js:225
throw err
^
MongoError: no primary found in replicaset
at /node_modules/mongodb-core/lib/topologies/replset.js:628:32
at Server.<anonymous> (test/node_modules/mongodb-core/lib/topologies/replset.js:420:24)
λμΌν μ½λκ° Mac OSXμμ λ¬Έμ μμ΄ μλνμ΅λλ€.
λ΄ uriλ dottodotκ³Ό λμΌν©λλ€.
κΈ°μ΄ ν. λμΌν μμ€ν μμ ν΄λΉ URIλ₯Ό μ¬μ©νμ¬ mongodb μμ μ¬μ©νμ¬ μ°κ²°ν μ μλμ§ νμΈν μ μμ΅λκΉ?
@vkarpov15 mongodb μ Έμ μ¬μ©νμ¬ μ°κ²°ν μ μμΌλ©° νμ€ URI λ°©μμ μ¬μ©νμ¬ μ°κ²°ν μ μμ΅λλ€.
@stampsrule νμ€ URI λ°©μμ 무μμ λκΉ?
@ vkarpov15
mongodb://user:password<strong i="7">@server</strong>:port/database
μ, κ·ΈλΌ μ€ν¨ν μ°κ²° μ½λλ 무μμ λκΉ?
λΉμ·ν λ¬Έμ κ° μμ΅λλ€. λͺ½κ΅¬μ€ >= 4.6.0μμ μ°κ²°ν μ μμ΅λλ€. 4.5.10
λλ리면 μλν©λλ€. λ΄ μ°κ²° λ¬Έμμ΄μ λ€μκ³Ό κ°μ΅λλ€.
mongodb://username:password<strong i="7">@ip1</strong>:port1,ip2:port2/database?authSource=blah&replicaSet=rs0&ssl=true
λ€μ μ°κ²° μ΅μ μ μ¬μ©νκ³ μμ΅λλ€.
{
replSet: {
sslValidate: false,
sslCert: fs.readFileSync(`...`),
sslKey: fs.readFileSync(`...`),
sslCA: fs.readFileSync(`...`)
}
}
λ€μκ³Ό κ°μ΄ μ°κ²°μ λν μ€λ₯ μ²λ¦¬κΈ°λ₯Ό μ μνλ©΄ λ€μκ³Ό κ°μ΅λλ€.
mongoose.connection.on('error', (err) => {
console.log(err instanceof Error, err)
})
ν₯λ―Έλ‘κ²λ err instanceof Error
λ κ±°μ§μ΄κ³ err
λ‘κΉ
μ μΆλ ₯μ λ€μκ³Ό κ°μ΅λλ€.
ReplSet {
domain: null,
_events:
{ reconnect: [Function],
timeout: { [Function: g] listener: [Function] },
error: { [Function: g] listener: [Function] },
connect: { [Function: g] listener: [Function: connectHandler] } },
_eventsCount: 4,
_maxListeners: undefined,
id: 1,
s:
{ options:
{ disconnectHandler: [Object],
cursorFactory: [Object],
reconnect: false,
emitError: true,
size: 5,
rejectUnauthorized: false,
cert: <Buffer ... >,
key: <Buffer ... >,
ca: <Buffer ... >,
socketOptions: {},
setName: 'rs0',
ssl: true,
clientInfo: [Object] },
bson: BSON {},
Cursor:
{ [Function: Cursor]
super_: [Object],
define: [Object],
INIT: 0,
OPEN: 1,
CLOSED: 2,
GET_MORE: 3 },
logger: Logger { className: 'ReplSet' },
seedlist: [ [Object], [Object] ],
replicaSetState:
ReplSetState {
domain: null,
_events: [Object],
_eventsCount: 3,
_maxListeners: undefined,
topologyType: 'ReplicaSetNoPrimary',
setName: 'rs0',
set: {},
id: 1,
logger: [Object],
index: 0,
acceptableLatency: 15,
heartbeatFrequencyMS: 10000,
primary: null,
secondaries: [],
arbiters: [],
passives: [],
ghosts: [],
unknownServers: [],
maxElectionId: null,
maxSetVersion: 0,
replicasetDescription: [Object] },
connectingServers: [],
haInterval: 10000,
minHeartbeatFrequencyMS: 500,
disconnectHandler: Store { s: [Object], length: [Getter] },
index: 0,
connectOptions: { forceServerObjectId: false, w: 1, promiseLibrary: [Object] },
debug: false,
clientInfo:
{ driver: [Object],
os: [Object],
platform: 'Node.js v6.7.0, LE, mongodb-core: 2.0.13' } },
authProviders:
{ mongocr: MongoCR { bson: BSON {}, authStore: [] },
x509: X509 { bson: BSON {}, authStore: [] },
plain: Plain { bson: BSON {}, authStore: [] },
gssapi: GSSAPI { bson: BSON {}, authStore: [] },
sspi: SSPI { bson: BSON {}, authStore: [] },
'scram-sha-1': ScramSHA1 { bson: BSON {}, authStore: [], id: 0 } },
initialConnectState: { connect: false, fullsetup: false, all: false },
state: 'destroyed',
haTimeoutId:
Timeout {
'0': null,
_called: true,
_idleTimeout: -1,
_idlePrev: null,
_idleNext: null,
_idleStart: 1969,
_onTimeout: null,
_repeat: null },
authenticating: false,
ismaster: null }
κΈ°ν μΈλΆμ 보:
4.6.8
νμ§λ§ λ¬Έμ λ 4.6.2
μ μ μ©λλ κ² κ°μ΅λλ€.mongoose.connection.readyState
λ μ°κ²°μ μλνλ λμ 2
μ΄κ³ μ°κ²°μ΄ μ€ν¨νλ©΄ 0
[email protected]λ₯Ό μ¬μ©νλ©΄ λ§μ§λ§ λ²μ μ΄ μλνμ§ μμ΅λλ€. λμΌν λ¬Έμ (repset)κ° μμμ΅λλ€.
@adeelzaman μ λ΄λΆ λ° μΈλΆμ κ°μ΄ κ° λ³΅μ λ³Έ μΈνΈ ꡬμ±μμ μ‘μΈμ€νκΈ° μν΄ λ μ΄μμ μ£Όμλ₯Ό κ°μ§ μ μλ νκ²½μμ νΈμ€ν λλ 볡μ λ³Έ μΈνΈμ λλ€.
@dustywusty μλμ. 볡μ μΈνΈ ꡬμ±μλΉ νλμ IP μ£Όμ.
4.6.0 μ΄μμμ μ΄ λ¬Έμ κ° λ°μνμ΅λλ€. 4.5.10μ΄ λ§μ§λ§μΌλ‘ μλνλ λ²μ μ λλ€.
μ΄ λ¬Έμ κ° https://github.com/Automattic/mongoose/issues/4834 μ μ μ¬νμ§ κ²ν
μ΅μ λ²μ μ μ¬μ© μ€μ΄κ³ μ€λ₯ λ°μ μ self.s.replicaSetState
λ₯Ό κΈ°λ‘νκ³ λ€μμ λ°κ²¬νμ΅λλ€.
topologyType: 'ReplicaSetNoPrimary',
setName: 'rs0',
set:
{ 'mongo1:27017':
{ type: 'Unknown',
electionId: null,
setName: null,
setVersion: null },
'mongo2:27017':
{ type: 'PossiblePrimary',
setVersion: null,
electionId: null,
setName: null },
'mongo3:27017':
{ type: 'Unknown',
electionId: null,
setName: null,
setVersion: null },
'database4ca:27017':
{ type: 'RSSecondary',
electionId: undefined,
setName: 'rs0',
setVersion: 5 },
'mongoarb:27017':
{ type: 'Unknown',
electionId: null,
setName: null,
setVersion: null } },
null κ°μ΄ μ€λ₯μ μμΈμ λκΉ?
mongo1.exampleμ λ£μμ λ 100% λ¬Έμ μμ΅λλ€. com:27017 IPκ° μλνλλΌλ μ°κ²°λμ§ μμ΅λλ€. URL λ¬Έμ λ₯Ό ν΄κ²°νκ³ mongodb:// URIλ₯Ό URLλ‘ λ°κΎΈλ©΄ λͺ¨λ μλνμ΅λλ€.
@wparsons-360insights μ λκΈμ λ³΄κ³ μλν΄ λ³΄μμ΅λλ€. 볡μ λ³Έ μΈνΈμ λν΄ μ νν λμΌν db μ°κ²°μ΄ 4.5.10μμλ μλνμ§λ§ 4.7.1 μμλ μλ
μλ νμΈμ,
λλ κ°μ λ¬Έμ μ μ§λ©΄νκ³ μμ΅λλ€.
λͺ½κ΅¬μ€": "^4.7.6"
ꡬμ±:
config.mongoose = {
URI: " mongodb://Appinv-db :27017,Appinv-db1:27017,Appinv-db2:27017,Appinv-db3:27017/nexgtv_16?replicaSet=rs0",
//μ°λ¦¬: " mongodb://localhost/nexgtv_16 ",
μ΅μ
: {
db: { native_parser: true },
replset: {
//μλ μ¬μ°κ²°: κ±°μ§,
ν ν¬κΈ°: 10,
μμΌ μ΅μ
: {
ν΅μΌλΌμ΄λΈ: 1000,
μ°κ²°μκ° μ΄κ³ΌMS: 30000
},
reconnectInterval: 2000, //κΈ°λ³Έκ°μ 1000msμ
λλ€.
reconnectTries: 60 //κΈ°λ³Έκ°μ 30μ
λλ€.
},
μλ²: {
νν¬κΈ°: 5,
μμΌ μ΅μ
: {
ν΅μΌλΌμ΄λΈ: 1000,
μ°κ²°μκ° μ΄κ³ΌMS: 30000
},
reconnectInterval: 2000, //κΈ°λ³Έκ°μ 1000msμ
λλ€.
reconnectTries: 60 //κΈ°λ³Έκ°μ 30μ
λλ€.
}
}
}
μ°κ²°:
mongoose.connect(config.mongoose.uri, config.mongoose.options);
μ€λ₯:
MongoError: Appinv-db3:27017μ λν μ°κ²° 3μ΄ λ«νμ΅λλ€.
Function.MongoError.createμμ (/etc/scripts/push-notifications/node_modules/mongodb-core/lib/error.js:29:11)
μμΌμμ.
Socket.gμμ (events.js:291:16)
emitOneμμ (events.js:96:13)
Socket.emitμμ (events.js:188:7)
TCP._handle.closeμμ [_oncloseλ‘] (net.js:498:12)
μ°κ²° μ€λ₯: { MongoError: 볡μ μΈνΈμμ κΈ°λ³Έμ μ°Ύμ μ μμ΅λλ€.
/etc/scripts/push-notifications/node_modules/mongodb-core/lib/topologies/replset.js:659:32
μλ²μμ.
Server.gμμ (events.js:291:16)
emitOneμμ (events.js:96:13)
Server.emitμμ (events.js:188:7)
Object.cbμμ (/etc/scripts/push-notifications/node_modules/mongodb-core/lib/topologies/server.js:259:55)
μ°κ²°μμ.
Connection.gμμ (events.js:291:16)
EmmitTwoμμ (events.js:106:13)
Connection.emitμμ (events.js:191:7)
μμΌμμ.
Socket.gμμ (events.js:291:16)
emitOneμμ (events.js:96:13)
Socket.emitμμ (events.js:188:7)
TCP._handle.closeμμ [_oncloseλ‘] (net.js:498:12)
μ΄λ¦: 'λͺ½κ³ μ€λ₯',
λ©μμ§: '볡μ μΈνΈμμ κΈ°λ³Έμ μ°Ύμ μ μμ΅λλ€.' }
μ΄λ€ ν΄κ²°μ± μ μ μνμμμ€
4.5.10
λ²μ μ μ¬μ©νμ¬ μμ λ uriμ 볡μ λ³Έμ΄ μλ herokuμ mLabμ μ μ¬ν λ¬Έμ κ° μμ
μ°λ¦¬λ μ΄ λ¬Έμ μ μ§λ©΄νκ³ μμ§λ§ MongoDB 3.0 -> 3.4μμ μ΅κ·Ό μ κ·Έλ μ΄λνλ©΄ μ΅μ λ²μ μ mongooseλ₯Ό μμ μ μΌλ‘ μ€νν μ μλ κ² κ°μ΅λλ€.
(4.7.8 λλ 3.4 λλ λμ μ‘°ν© λλ¬ΈμΈμ§ νμ€νμ§ μμ)
λλ κ°μ λ¬Έμ κ° μμλ€.
replset νΈμ€νΈ νμΌμ μλ κ²μ²λΌ 볡μ μΈνΈ ꡬμ±μ νΈμ€νΈ μ΄λ¦μ μΉ μλ² νΈμ€νΈ νμΌμ μΆκ°νλ©΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
rs.conf();
{
"_id" : "cwreplset0",
"version" : 348189,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "cwmongo1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "cwmongoArbiter:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "cwmongo2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
...
cwmongo1 /etc/hosts:
127.0.0.1 cwmongo1
XXX cwmongo2
XXX cwmongoArbiter
cwmongo2 /etc/hosts:
127.0.0.1 cwmongo2
XXX cwmongo1
XXX cwmongoArbiter
cwmongoArbiter /etc/hosts:
127.0.0.1 cwmongoArbiter
XXX cwmongo2
XXX cwmongo1
webservers /etc/hosts:
XXX cwmongo1
XXX cwmongo2
μ΅μ λ²μ 4.8.1
μ
λ°μ΄νΈν ν mLab MONGODB_URI
replicaSet
paramμΌλ‘ λλκ²λ λ¬Έμ κ° μμ λμμ΅λλ€.
@dazwiafl μ μκ²¬μ΄ μ£Όμ΄
μ΄μ λκΈμ μ΄ν΄λ³΄λ©΄ νΈμ€νΈ μ΄λ¦μ μΈκΈν λͺ¨λ μ¬λμκ² ν΄λΉλλ κ² κ°μ΅λλ€.
μ΄ κ²½μ° #4834λ μ€μ λ‘ @flipflopappμμ μ μν κ²κ³Ό λμΌν λ¬Έμ μ
λλ€.
νΈμ§: #3634λ κ΄λ ¨λ μ μμ΅λλ€.
μ°κ²° λ¬Έμμ΄μμ μ 체(μΈλΆ) dns μ΄λ¦μ μ¬μ©νλ κ²½μ°μλ§ mongoose 4.8.1μ΄ mongodb 3.4.2μ ν¨κ» μλνλμ§ νμΈν©λλ€.
μ΄μ μ λ΄λΆ dns μ΄λ¦(VPC λ΄μ νλΌμ΄λΉ EC2 IP μ£Όμλ‘ νμΈλ¨)μ μ¬μ©νμ΅λλ€. rs.conf()μ νΈμ€νΈ μ΄λ¦μ΄ μΈλΆ DNS μ΄λ¦μΌλ‘ μ€μ λ κ²½μ°μλ μλνμ§ μμ΅λλ€.
λͺ¨λ ꡬμ±μ ν
μ€νΈνμ§λ μμμ§λ§ μ΄ μμ μμ λ΄ μ§κ΄μ mongoose/mongodb λ²μ μ΄ μ€μ λ‘ μ€μνμ§ μλ€κ³ λ§ν©λλ€.
μ΄ λ¬Έμ λ μ 체 DNS μ΄λ¦μ μ¬μ©ν λ ν΄κ²°ν΄μΌ ν©λλ€.
@zoellner κ°μΈ λ€νΈμν¬λ₯Ό ν΅ν΄
"μΈλΆ μ‘μΈμ€"(νμν μλ²λ‘ μ νλ¨)λ₯Ό νμ©νκΈ° μν΄ μΌλΆ μΈνλΌλ₯Ό λ³κ²½νμ΅λλ€. μ΄μμ μΈ μ루μ μ μλμ§λ§ λ λμ λ°©λ²μ΄ μμ λκΉμ§ μ μ λμ μλν©λλ€. μ΄ μΌλ°μ μΈ μλ리μ€λ₯Ό λ μ μ²λ¦¬νκΈ° μν΄ mongodbμ μ¬λλ€κ³Ό ν¨κ» μ κΈ°νλ κ²μ΄ μ λ§ λ¬Έμ λΌκ³ μκ°ν©λλ€.
@dottodot ν΄λΌμ΄μΈνΈ μΈ‘μμ sslAllowInvalidCertificates λ° sslAllowInvalidHostnamesλ₯Ό μ€μ νκ³ FQDNμ λν΄ localhost λλ 127.0.0.1μ μ¬μ©νλλ‘ μ체 μλͺ λ μΈμ¦μλ₯Ό μ€μ ν μ μμ΄μΌ ν©λλ€. μ΄κ²μ 볡μ μΈνΈμ νΈμ€νΈ νλλ‘ IPλ₯Ό μ¬μ©νμ¬ μ μκ² ν¨κ³Όμ μ΄λ©° μ¬μ ν μΈμ¦μμ μ€μ λ νΈμ€νΈμ νΈμ€νΈ μ΄λ¦ λλ FQDNκ³Ό μΌμΉνμ§ μλ νΈμ€νΈ μ΄λ¦μ ν΅ν΄ νΈμ€νΈμ μ‘μΈμ€νκ³ μμ΅λλ€. κ·Έλ¬λ ν΄λ¬μ€ν°μ μ‘μΈμ€νκΈ° μν΄ mongo uriμμ IPλ₯Ό μ¬μ©νμ¬ ν μ€νΈνμ§ μμμ΅λλ€. κ·Έκ²μ΄ λΉμ μκ² λμμ΄λλ€λ©΄, λλ μ΄κ²μ ν μ€νΈ ν μ μμ΅λλ€ ...
mongoose v4.8.4μμ μ΄ λ¬Έμ μ λν μμ μ¬νμ΄ μμ΅λκΉ?
4.5.10 λ° 4.4.12λ‘ λ¬Έμ κ° ν΄κ²°λμ§ μμ΅λλ€. 볡μ λ³Έ μΈνΈ μ΄λ¦μ΄ rs0μΈ Google μ»΄ν¨ν 볡μ λ³Έ μΈνΈλ₯Ό μ€νν©λλ€.
v4.6.5λ₯Ό μ¬μ©νμ¬ v4.8.5λ‘ μ κ·Έλ μ΄λνλ κ²κ³Ό λμΌν λ¬Έμ κ° μμλλ° κ΅¬μ±μ λ³κ²½νμ§ μκ³ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
λ°©κΈ 4.8.5λ₯Ό μλνμ΅λλ€ μ΄μ΄ μμ΅λλ€ :(
λ ν리카 μΈνΈμ μ΄λ»κ² μ°κ²°ν©λκΉ?
μ°λ¦¬λ λ€μμ μ¬μ©νκ³ μμ΅λλ€:
mongodb://root:[email protected]:27017,mongo1.dev.domain.com:27017,mongo2.dev.domain.com:27017/main?replicaSet=rs0&authSource=admin
λλ κΈ°λ³Έ μ£Όμλ₯Ό μ λ¬νλ λ°λ§ νμνκ³ 2κ°μ λ³΄μ‘°κ° νμνμ§ μλ€λ κ²μ μ΄λκ°μμ μ½μμ΅λλ€. μ¬μ€μΈκ°μ? κ°μ¬ ν΄μ.
μ΄ μλ. Arbiter mongoμ μ°κ²°ν νμκ° μμΌλ©° 볡μ λ³Έ 2κ°λ§ μμΌλ©΄ λ©λλ€.
mongoose.connect("mongodb://mongo1.dev.domain.com,mongo2.dev.domain.com/main?replicaSet=rs0&authSource=admin", {
μ¬μ©μ: 'MONGO_USERNAME',
ν¨μ€: 'MONGO_PASSWORD'
});
μ΄κ²μ΄ μλνμ§ μμΌλ©΄ μΌλΆ 볡μ κ΅¬μ± λ¬Έμ κ° μλ κ²μ λλ€. μλ₯Ό λ€μ΄ μ°κ²°νλ €λ mongo ν¬νΈκ° λ«ν μμ μ μμ΅λλ€.
Kubernetes StatefulSetμμ mongo RSμ μ°κ²°νλ λμ μ΄ μ€λ₯ λ©μμ§κ° νμλμμ΅λλ€. μ°κ²° λ¬Έμμ΄μ DNS μ΄λ¦μ SS μ΄λ¦μΌλ‘ νμ νμ§ μμ "κΈ°λ³Έ μ€λ₯ μμ"μ΄ νμλ©λλ€.
λ°λΌμ mongoλΌλ SSμ κ²½μ° "mongo-0"μ "mongo-0.mongo"μ¬μΌ ν©λλ€. μ€λ₯κ° μ¬λΌμ‘μ΅λλ€.
@edgarmarkosov μ°λ¦¬λ μ€μ¬μλ₯Ό μ¬μ©νμ§ μμ΅λλ€. μ°λ¦¬λ 3κ°μ μ 체 μΈμ€ν΄μ€λ₯Ό μ¬μ©νκ³ μμ΅λλ€. Mongo λ¬Έμμμλ 3κ°μ μ 체 μΈμ€ν΄μ€κ° μ€μ¬μκ° μλ 2κ°λ³΄λ€ λ«λ€κ³ κΆμ₯νμ΅λλ€. νμ€ Google Cloud bitnami 볡μ λ³Έ λ°°ν¬λ₯Ό μ¬μ©νκ³ μμ΅λλ€. ν΄λ¦ λͺ λ²μ΄λ©΄ λ°λ‘ μ€νλ©λλ€.
μμ λ°©λ²μ μ¬μ©νμ¬ μ°κ²°μ μλνμ§λ§ μλνμ§ μμμ΅λλ€. λλ κ·Έκ²μ΄ μΌμ’ μ μ΄μν λ¬Έμ λΌκ³ νμ ν©λλ€. λλ κΈ°λ³Έμ΄ λ€λ₯Έ 2κ°μ 보쑰μ μ£Όμλ₯Ό λ³΄λΌ κ²μ΄λΌκ³ μ΄λκ°μμ μ½μμ΅λλ€. κ·Έλ κ² λκΈ°λ₯Ό λ°λλλ€. κ·Έλ¬λ©΄ μ°κ²° λ¬Έμμ΄μμ κΈ°λ³Έ μ£Όμλ₯Ό μ¬μ©ν μ μμ΅λλ€.
@wayoffuture "μ΄λκ°μμ κΈ°λ³Έμ΄ λ€λ₯Έ 2κ°μ 보쑰 μ£Όμλ₯Ό λ³΄λΌ κ²μ΄λΌκ³ μ½μμ΅λλ€."
μμ€κ° μμ΅λκΉ? Bcos μ΄κ²μ λλ₯Ό μν΄ μλνμ§ μμμΌλ©° μ¬κΈ°μ μ μλ ν΄κ²° λ°©λ²λ μμ΅λλ€. λλ opμ κ°μ μν©μ κ°νμλ€. :/
λλλ‘ λλ λ°λ‘ Mongo APIλ₯Ό μ¬μ©νλ κ²μ΄ λ λμμ§ κΆκΈν©λλ€. μ°λ¦¬κ° λ μ½κ² μμ ν μ μλ κ²μ μνκΈ° λλ¬Έμ μ΄μ κ°μ λ¬Έμ μ μ½λ§€μ΄λ κ²μ΄ μ λ§ λ μ μ΅νκ°μ? λλ‘λ λΆνμν μΆμν κ³μΈ΅μ²λΌ λκ»΄μ§λλ€.
@wayoffutureκ° λμνμ΅λλ€. μ°λ¦¬λ κ·Έκ²μ κ³ννκ³ μμ§λ§ μμ§ νμ§ μμμ΅λλ€.
4.9.0μμ μ΄ λ¬Έμ λ₯Ό νμΈν μ μμ΅λλ€.
볡μ 컨νΈλ‘€λ¬μμ 3κ°μ λ Έλλ‘ Kubernetesμμ mongoλ₯Ό μ€νν©λλ€. mongooooseλ₯Ό μ¬μ©νλ λ΄ λ Έλ μλ²κ° λ€λ₯Έ λ€μμ€νμ΄μ€μ λ΄ mongo ν΄λ¬μ€ν°μ μ°κ²°νκ³ μμ΅λλ€.
λ΄ nodeserverμ mongo ν΄λ¬μ€ν°κ° λμΌν λ€μμ€νμ΄μ€μ μμΌλ©΄(dns νμΈμ΄ νμνμ§ μμ) μλν©λλ€.
μ΅μ λλΌμ΄λ² μ κ·Έλ μ΄λ(νμ¬ mongoose 4.9.2 μ¬μ©)μ λν λ³΄λ€ κ΅¬μ²΄μ μΈ μ€λ₯ λ©μμ§ λλΆμ λ¬Έμ λ₯Ό νμ ν μ μμμ΅λλ€. λ¬Έμ λ mongooseκ° λ΄ mongoose μ°κ²° λ¬Έμμ΄μ μ§μ λ νΈμ€νΈλ₯Ό μ¬μ©νλ λμ mongo 볡μ μΈνΈ ꡬμ±μ μ§μ λ κ° νΈμ€νΈμ μ°κ²°νλ €κ³ νλ€λ κ²μ λλ€. κ·Έλ¦¬κ³ λ΄ λ Έλ μλ²μ mongo ν΄λ¬μ€ν°κ° λ³λμ λ€μμ€νμ΄μ€μμ μ€νλκ³ μκΈ° λλ¬Έμ λ΄ λ Έλ μλ²κ° μ΄λ¬ν νΈμ€νΈμ λν DNSλ₯Ό νμΈν μ μμ΅λλ€.
λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ¬΄μμ νλμ§ μ€λͺ ν΄ μ£Όμκ² μ΅λκΉ? λ΄ Mongo ν΄λ¬μ€ν°λ λ³λμ λ€μμ€νμ΄μ€μμ μ€νλ©λλ€. κ°μ¬ ν΄μ.
@wayoffuture μ΅μ μ λ°©λ²μΌλ‘ νλμ§ λͺ¨λ₯΄κ² μ§λ§ λ
Έλ μλ²κ° μ€ν μ€μΈ νΈμ€νΈμμ /etc/hosts
νμΌμ λ°©κΈ νΈμ§νμ΅λλ€.
μλ₯Ό λ€μ΄ 볡μ λ³Έ μΈνΈ ꡬμ±μ μ§μ λ νΈμ€νΈκ° db1.example.com
λ° db2.example.com
λΌκ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. κ·Έλ¬λ μ΄λ€ μ΄μ λ‘(λ°©νλ²½ ꡬμ±κ³Ό κ°μ) λ
Έλ μλ²κ° μ€ν μ€μΈ νΈμ€νΈλ μ΄ λ νΈμ€νΈ μ΄λ¦μ νμΈν μ μμ΅λλ€. λ°λΌμ λͺ½κ΅¬μ€ μ°κ²° κ΅¬μ± λ¬Έμμ΄μμ λ€λ₯Έ νΈμ€νΈ μ΄λ¦ λλ IP μ£Όμλ₯Ό μ¬μ©νκ³ μμ΅λλ€(μ 10.0.0.1
λ° 10.0.0.2
). μ΄ κ²½μ° /etc/hosts
νμΌ(λ
Έλ μλ²κ° μ€ν μ€μΈ κ²κ³Ό λμΌν νΈμ€νΈμμ)μ νΈμ§νμ¬ λ€μ νμ ν¬ν¨ν μ μμ΅λλ€.
10.0.0.1 db1.example.com
10.0.0.2 db2.example.com
μ μ΄λ κ·Έκ²μ΄ μ λ¬Έμ μμ΅λλ€. μ΄κ²μ΄ κ·νμ μν©μλ μ μ©λλμ§ νμ€νμ§ μμ΅λλ€. λ€λ₯Έ λ²μ μ mongo λλΌμ΄λ²κ° μ΄μ κ°μ λ¬Έμ λ₯Ό μΌμΌν¬ μ μλ€λ κ²μ΄ μ΄μν©λλ€. μ΄μ¨λ λμμ΄ λκΈ°λ₯Ό λ°λλλ€.
λμΌν μ€λ₯ νμΈ:
Mongoose κΈ°λ³Έ μ°κ²° μ€λ₯: MongoError: 볡μ μ§ν©μμ κΈ°λ³Έμ μ°Ύμ μ μμ΅λλ€.
λͺ½κ΅¬μ€ μ¬μ© 4.9.3. κ·Έλ¦¬κ³ λ컀 μμ±. dockerμ κ΄λ ¨μ΄ μλμ§ νμ€νμ§ μμ§λ§ 4.5.10μΌλ‘ λλ리면 λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
4.5.10μΌλ‘ λλ리λ κ² μΈμ λ€λ₯Έ ν΄κ²°μ± μ΄ μμ΄ 7κ°μ μ μ μ κΈ°λ μ΄ λ¬Έμ μ λν΄ λκ΅°κ° μ§μ§νκ² κ²ν ν΄ μ£Όμ€ μ μμ΅λκΉ?
@asabhaney λ§μ΅λλ€... μ΄μ κ° ν΄λ¬μ€ν° λ Έλμ λ΄λΆ IP μ£Όμμ μ°κ²°νλ €κ³ ν©λλ€. κ³ μ IPλ‘ λλ©μΈ μ΄λ¦μ μ§μ νλ©΄ ν΄λΉ κ³ μ IPλ₯Ό μ¬μ©ν΄μΌ νκ³ λ€λ₯Έ μλΈλ·μ λ΄λΆ IPλ₯Ό μ¬μ©νλ €κ³ ν΄μλ μ λκΈ° λλ¬Έμ μ΄κ²μ μ¬μ ν ββλ²κ·Έμ²λΌ 보μ λλ€. /etc/hosts μμ μ΄ ν΄κ²°μ± μ΄μ§λ§ λ ν° λ¬Έμ μ λν μμ μμ μ²λΌ 보μ΄μ£ ? κ°μ¬ ν΄μ.
μ΄κ²μ΄ κΈ°λ³Έ mongodb λλΌμ΄λ²μ κ·Όλ³Έμ μΈ λ¬Έμ μΈμ§ κΆκΈν©λλ€. Herokuλ₯Ό ν΅ν΄ 볡μ μΈνΈμ μ°κ²°νλ λ° λ¬Έμ κ° μμ΅λλ€. νλΌμ΄λ¨Έλ¦¬λ₯Ό μ°Ύμ§ λͺ»ν΄ ν격μ κ°νλ κ²λΏμ λλ€.
λλ λ³΄μ§ μμμ§λ§ μλ €μ§ μλνλ λ²μ κ³Ό μλνμ§ μλ κ²μΌλ‘ μλ €μ§ λ²μ μ mongoose μ¬μ΄μμ μ¬μ©λλ κΈ°λ³Έ mongodb λλΌμ΄λ²κ° λ³κ²½λμ§ μλ ν μ€λ₯κ° μλ κΈ°λ³Έ λλΌμ΄λ²μΌ μ μμ΅λλ€.
+1 v4.5.10μΌλ‘ λλ리λ κ²μ΄ μλν©λλ€.
v7.7.3
v7.10.0
LTS/λΆμ
5.6.2
5.7.0
5.8.5
3.2
2.6
μΌκ΄λ
μ΄ λ²κ·Έλ₯Ό νμ νκΈ° μν΄ μμν΄μΌ ν λ¨μκ° μμ΅λκΉ?
μ΄ λ¬Έμ λ https://github.com/Automattic/mongoose/issues/4517 κ³Ό κ΄λ ¨μ΄
4.9.10 λ²μ μ λλΌμ΄λ²λ₯Ό μ¬μ©νμ¬ Azure CosmosDBμ λν΄ μ΄ μ€λ₯κ° μ‘΄μ¬ν¨μ νμΈνμ΅λλ€. μ°κ²° λ¬Έμμ΄ λμ &readPreference=secondary
λ₯Ό μ§μ νμ§ μλ ν CosmosDBκ° μλ 4.5.10 λλΌμ΄λ²μλ μ‘΄μ¬ν©λλ€. κ·Έλ¬λ©΄ μ λλ‘ μλν©λλ€.
@dtzar 곡μ ν κ²½κ³ , CosmosDB/DocumentDB μ§μμ νμ¬ λͺ½κ΅¬μ€μ λͺ©νκ° μλλλ€. ν΄λΉ dbμ ν¨κ» mongooseλ₯Ό μ¬μ©νκΈ°λ‘ μ νν κ²½μ°μλ νΌμμ λλ€.
λ¬Έμ λ μ¬μ ν Mongoose 4.10.2μ μ‘΄μ¬ν©λλ€.
mongo κΈ°λ³Έ λλΌμ΄λ²λ₯Ό μ¬μ©νμ¬ μ°κ²°νλλ° λ¬Έμ κ° κ³μ λ°μνμ΅λλ€. λͺ½κ΅¬μ€κ° μλλΌ ν΄λ¬μ€ν°μ μλ κ° μ»΄ν¨ν°μ κ΅¬μ± νμΌ μ€μ IP μ£Όμμ λλ€. IP μ£Όμλ₯Ό λ΄λΆ IPκ° μλ κ³΅μ© μΈλΆ IP μ£Όμλ‘ λ³κ²½ν΄μΌ ν©λλ€. Mongo Atlas 곡μ μλΉμ€λ₯Ό μ¬μ©νμ λ IPμ κ΄ν ν μμ μ΄ νμνμ§ μμ μνλ‘ μ΄λ―Έ μ€μ λμ΄ μμμ΅λλ€.
@wayofthefuture CosmosDB λ₯Ό λ§μνμλ 건κ°μ? λν λμ &replicaset=globaldbλ₯Ό μμ νλ©΄ CosmosDBμ μ°κ²°νλ κ²μ΄ Mongoose 4.5.10μ ν΅ν΄ μλνλ€λ κ²μ κΉ¨λ¬μμ΅λλ€.
λ¬Έμ λ μ¬μ ν Mongoose 4.10.2μ μ‘΄μ¬ν©λλ€.
λͺ¨λ μ
λ°μ΄νΈ?
λ€μ νμμΌλ‘ μ°κ²° λ¬Έμμ΄μ μ§μ νλ ν MongoDB APIλ₯Ό μ¬μ©νμ¬ CosmosDBμ μ°κ²°νλ κ²μ λ³Ό μ μλ ν μ΄ λ¬Έμ λ μ΅μ Mongoose λ²μ μμ λ μ΄μ μ‘΄μ¬νμ§ μμ΅λλ€.
mongodb://myservername:[email protected]:10255/mydbname?ssl=true&replicaSet=globaldb
κ·Έκ²μ μ¬μ€ λΆλ¬νλ κ²μ΄ μ€μν©λλ€ mydbname
μ μ ν¬νΈμμ κΈ°λ³Έμ μΌλ‘ μ 곡νμ§ μκ³ μ½μ
ν΄μΌν©λλ€ κ·Έλ μ§ μμΌλ©΄ μ°κ²°μ΄ μμ μΈκΈ ν λ¬Έμ μ ν¨κ» μ€ν¨ ν κ²μ
λλ€. mydbnameμ μ 곡νλ κ°μ μ€μνμ§ μμ§λ§ λ°λμ μμ΄μΌ ν©λλ€.
/etc/hosts
μμ mongodb μλ²μ νΈμ€νΈ μ΄λ¦μ μμ νμμμ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€.
1.2.3.4 mdb01 mdb01.example.com
1.2.3.5 mdb02 mdb02.example.com
1.2.3.6 mdb03 mdb03.example.com
μ΄ λμμ λ°λλλ€!
Herokuμμ V. 4.11.5
. - μ²μμλ κ°μ λ¬Έμ κ° μμμ§λ§ μ°κ²° λ¬Έμμ΄μ replicaSet
λ₯Ό μΆκ°νμ¬ ν΄κ²°νμ΅λλ€.
mongodb://user:[email protected],mongolayer.com/database?replicaSet=database
replicaSet
λ‘ μ λ¬λ κ°μ λ°μ΄ν°λ² μ΄μ€ μ΄λ¦κ³Ό λμΌν©λλ€. λ€λ₯Έ μ΄λ¦μ μ¬μ©ν΄ λ³Έ μ μ΄ μμ΅λλ€.
μ΄κ² λμμ΄ λκΈΈ λ°λλ€.
ν΄κ²°μ± :
options.replset = {
socketOptions: {
connectTimeoutMS: 60000,
keepAlive: 120
}
};
/etc/hosts μ€μ μ΄ μ μκ² ν¨κ³Όμ μ λλ€.
μΉ νμμ λμΉ¨λ° λ° ν΄λ¬μ€ν° μ°κ²°μ μ΄κ³ λμΉ¨λ°μ μ°κ²°μ μ ννλ©΄ λμΉ¨λ° μ±μ΄ μλμΌλ‘ μ°κ²°μ κ°μ§ν μ μλ€κ³ μκ°ν©λλ€. :)
λ Έλ 8μμ λμΌν μ€λ₯κ° λ°μν©λλ€. λ Έλ 6μ μ λλ‘ μλν©λλ€. μ΄λ€ μμ΄λμ΄?
μ€λ₯: μλ² μνλ₯Ό νμΈν μ μμ΅λλ€.
canCheckoutReaderμμ (PATH_TO/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/server.js:779:12)
Server.checkoutReaderμμ (PATH_TO/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/server.js:793:16)
Cursor.nextObjectμμ (PATH_TO/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:748:48)
Collection.findOneμμ (PATH_TO/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/collection/query.js:162:10)
PATH_TO/node_modules/connect-mongo/lib/connect-mongo.js:223:18
MongoStore._get_collectionμμ (PATH_TO/node_modules/connect-mongo/lib/connect-mongo.js:156:21)
MongoStore.getμμ (PATH_TO/node_modules/connect-mongo/lib/connect-mongo.js:222:10)
μΈμ
μμ(PATH_TO/node_modules/express-session/index.js:367:11)
Layer.handleμμ [handle_requestλ‘] (PATH_TO/node_modules/express/lib/router/layer.js:82:5)
trim_prefixμμ(PATH_TO/node_modules/express/lib/router/index.js:269:13)
PATH_TO/node_modules/express/lib/router/index.js:236:9μμ
Function.proto.process_paramsμμ (PATH_TO/node_modules/express/lib/router/index.js:311:12)
PATH_TO/node_modules/express/lib/router/index.js:227:12μμ
Function.match_layerμμ (PATH_TO/node_modules/express/lib/router/index.js:294:3)
λ€μμ (PATH_TO/node_modules/express/lib/router/index.js:188:10)
cookieParserμμ (PATH_TO/node_modules/cookie-parser/index.js:48:5)
λ
Έλ λ²μ
v6.13.0 -> μλ
v8.10.0 -> ν΄λΉ μ€λ₯κ° λ°μν©λλ€. λͺ½κ΅¬μ€λ Node8μ μ§μν©λκΉ?
npm λͺ©λ‘ | κ·Έλ λͺ½κ΅¬μ€
βββ¬ λͺ½κ΅¬μ€ @5.0.11
β βββ λͺ½κ΅¬μ€- λ κ±°μ[email protected]
npm λͺ©λ‘ | κ·Έλ λͺ½κ³ DB
β βββ [email protected] κ΄λ ¨ μλ
βββ¬ [email protected] μ ν¨νμ§
β βββ [email protected] μΈλΆ
β βββ¬ [email protected]
β β βββ¬ [email protected]
Mongooseλ ν¬νΈ 26000μμ Mongosμ μ°κ²°ν©λλ€. Robomongoλ‘ Mongodbμ μ°κ²°ν μ μμ΅λλ€.
@sravzpublic μ€ν μΆμ μ μμΈν μ΄ν΄λ³΄μμμ€. μ€λ₯κ° connect-mongoμ μκ³ mongooseμ μ무 κ΄λ ¨μ΄ μμμ 보μ¬μ€λλ€. FWIW, mongooseλ λ Έλ 8μ μ§μν©λλ€.
μ°λ¦¬λ μ΄κ²μ NodeJS 6.xμ Mongoose 5.2.12( μ¬κΈ° μ
"mongoose": "^5.4.19"μμ μ΄ λ¬Έμ κ° λ°μνκ³ μ¬κΈ°μμ κ°λ°©ν stackoverflowμ λν μλ₯Ό μ 곡νμ΅λλ€. https://stackoverflow.com/questions/55637808/mongoerror-no-mongos-proxy-available-when -볡μ λ³Έ μΈνΈμ μ°κ²°. μ΄κ²μ΄ λ무 μ€λ«λμ κ·Έλ¦¬κ³ λ²μ μ κ·Έλ μ΄λλ₯Ό ν΅ν΄μλ 곡κ°λ λ¬Έμ μΈ κ² κ°μ μ°λ €λ©λλ€. ν ....
μΆμ : λꡬλ μ§ μ΄κ²μ μμλ΄λ©΄ μ 체 μμ μμ λ₯Ό μ 곡ν μ μμ΅λκΉ? μ΄ μ€λ λμλ μ΄λ€ λ²μ μ μ¬μ©νκ³ μλμ§μ‘°μ°¨ λͺ¨λ₯΄λ μ루μ μ λν κΆμ₯ μ¬νμ΄ μμ΅λλ€...
λ Έλ 8μμ μ΄ λ¬Έμ μ μ§λ©΄νμ΅λλ€. λ Έλ 10μΌλ‘ μ κ·Έλ μ΄λνκ³ μ΄λ¬ν ν¨ν€μ§λ₯Ό κ°κ³ mongodb μ°κ²° λ Όλ¦¬λ₯Ό μλλ‘ μ¬κ΅¬μ±νμ΅λλ€. κ·Έκ²μ ν¨κ³Όκ° μμλ€.
κ³ μμ΄ ν¨ν€μ§.json | κ·Έλ λͺ½κ³
"μ°κ²° λͺ½κ³ ": "^2.0.1",
"mongodb": ">=3.0.4",
"λͺ½κ΅¬μ€": ">=5.0.11",
λ
Έλ -v
v10.4.1
db.version()
3.4.15
config.db = mongodb://user:pass<strong i="14">@host</strong>:26000/dbname?ssl=true
// Get Mongoose to use the global promise library
mongoose.Promise = global.Promise;
var db = mongoose.connect(config.db, {
auto_reconnect: true,
socketTimeoutMS: 0,
connectTimeoutMS: 0
},
function (err) {
if (err) {
console.error(chalk.red('Could not connect to MongoDB!' + err));
console.log(chalk.red(err));
}
});
// When successfully connected
mongoose.connection.on('connected', function () {
};
// If the connection throws an error
mongoose.connection.on('error', function (err) {
console.log('Mongoose default connection error: ' + err);
});
// When the connection is disconnected
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
process.on('SIGINT', function () {
mongoose.connection.close(function () {
console.log('Mongoose default connection disconnected through app termination');
process.exit(0);
});
});
λλ λ¬Έμ κ° νΈμ€νΈμ μλ€κ³ μκ°ν©λλ€. (cluster0-shard-00-00-vmyny.mongodb.net) κΈ°λ³Έ κ²μ μ¬μ©νμμμ€.
λλ μ΄κ²μ λ«μ κ²μ λλ€. λ¬Έμ λ mongooseκ° μλλΌ connect-mongoμ μλ κ² κ°μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
@wayofthefuture CosmosDB λ₯Ό λ§μνμλ 건κ°μ? λν λμ &replicaset=globaldbλ₯Ό μμ νλ©΄ CosmosDBμ μ°κ²°νλ κ²μ΄ Mongoose 4.5.10μ ν΅ν΄ μλνλ€λ κ²μ κΉ¨λ¬μμ΅λλ€.