Mongoose: [v4.11.13] MongoError: ๋ณต์ œ ์ง‘ํ•ฉ์—์„œ ๊ธฐ๋ณธ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

์— ๋งŒ๋“  2017๋…„ 09์›” 30์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Automattic/mongoose

*์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์ตœ์‹  ๋ฒ„์ „์˜ mongoose๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

์ตœ์‹  ๋ฒ„์ „์˜ ๋ชฝ๊ตฌ์Šค(v4.11.13).

๊ธฐ๋Šฅ ์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ ๋ฅผ ๋ณด๊ณ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ฒŒ๋ ˆ

ํ˜„์žฌ ํ–‰๋™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

{ MongoError: no primary found in replicaset
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:560:28
wehpu-engine_1    |     at connectNewServers (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:317:25)
wehpu-engine_1    |     at topologyMonitor (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:552:12)
wehpu-engine_1    |     at Server.<anonymous> (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:772:7)
wehpu-engine_1    |     at Server.g (events.js:292:16)
wehpu-engine_1    |     at emitOne (events.js:96:13)
wehpu-engine_1    |     at Server.emit (events.js:188:7)
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/server.js:300:14
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/connection/pool.js:469:18
wehpu-engine_1    |     at _combinedTickCallback (internal/process/next_tick.js:73:7)
wehpu-engine_1    |     at process._tickCallback (internal/process/next_tick.js:104:9)
wehpu-engine_1    |   name: 'MongoError',
wehpu-engine_1    |   message: 'no primary found in replicaset' }
wehpu-engine_1    | Unhandled rejection MongoError: no primary found in replicaset
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:560:28
wehpu-engine_1    |     at connectNewServers (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:317:25)
wehpu-engine_1    |     at topologyMonitor (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:552:12)
wehpu-engine_1    |     at Server.<anonymous> (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:772:7)
wehpu-engine_1    |     at Server.g (events.js:292:16)
wehpu-engine_1    |     at emitOne (events.js:96:13)
wehpu-engine_1    |     at Server.emit (events.js:188:7)
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/server.js:300:14
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/connection/pool.js:469:18
wehpu-engine_1    |     at _combinedTickCallback (internal/process/next_tick.js:73:7)
wehpu-engine_1    |     at process._tickCallback (internal/process/next_tick.js:104:9)

ํ˜„์žฌ ๋™์ž‘์ด ๋ฒ„๊ทธ์ธ ๊ฒฝ์šฐ ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

์—ฐ๊ฒฐํ•˜๋‹ค:

mongoose.connect('mongodb://mongodb-master:27017,mongodb-slave1:27017,mongodb-slave2:27017/wehpu?replicaSet=wehpu', { useMongoClient: true });

docker-compose ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค!
PRIMARY ๋ฐ SECONDARY ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
wehpu:PRIMARY>
...
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
wehpu:SECONDARY>

MongoDB(PRIMARY)์— ์—ฐ๊ฒฐํ•˜๊ณ  rs.conf() ๋ฅผ ์ธ์‡„ํ•˜๋ฉด ๋‹ค์Œ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

wehpu:PRIMARY> rs.config()
{
    "_id" : "wehpu",
    "version" : 1,
    "protocolVersion" : NumberLong(1),
    "members" : [
        {
            "_id" : 0,
            "host" : "mongodb-master:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 1,
            "host" : "mongodb-slave1:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        },
        {
            "_id" : 2,
            "host" : "mongodb-slave2:27017",
            "arbiterOnly" : false,
            "buildIndexes" : true,
            "hidden" : false,
            "priority" : 1,
            "tags" : {

            },
            "slaveDelay" : NumberLong(0),
            "votes" : 1
        }
    ],
    "settings" : {
        "chainingAllowed" : true,
        "heartbeatIntervalMillis" : 2000,
        "heartbeatTimeoutSecs" : 10,
        "electionTimeoutMillis" : 10000,
        "catchUpTimeoutMillis" : 60000,
        "getLastErrorModes" : {

        },
        "getLastErrorDefaults" : {
            "w" : 1,
            "wtimeout" : 0
        },
        "replicaSetId" : ObjectId("59cee31221dd0f0e4f1f566b")
    }
}

IPADDR ํ•ด์ƒ๋„ ์ž‘๋™:

root<strong i="6">@c0cdbbcaca42</strong>:/usr/src/app# ping mongodb-master
PING mongodb-master (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.099 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.114 ms
......
root<strong i="7">@c0cdbbcaca42</strong>:/usr/src/app# ping mongodb-slave1
PING mongodb-slave1 (172.18.0.4): 56 data bytes
64 bytes from 172.18.0.4: icmp_seq=0 ttl=64 time=0.167 ms
64 bytes from 172.18.0.4: icmp_seq=1 ttl=64 time=0.127 ms

๋‚ด ์ฝ˜์†”์˜ ์ž์„ธํ•œ ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Successfully built 80057069e381
Successfully tagged wehpuengine_wehpu-engine:latest
Creating mongodb-master ... 
Creating mongodb-slave2 ... 
Creating mongodb-slave1 ... 
Creating mongodb-master
Creating mongodb-slave2
Creating mongodb-slave1 ... done
Creating wehpuengine_wehpu-engine_1 ... 
Creating wehpuengine_wehpu-engine_1 ... done
Attaching to mongodb-master, mongodb-slave2, mongodb-slave1, wehpuengine_wehpu-engine_1
mongodb-master    | + MONGO_LOG=/var/log/mongodb/mongod.log
mongodb-master    | + MONGO=/usr/bin/mongo
mongodb-master    | + MONGOD=/usr/bin/mongod
mongodb-master    | + /usr/bin/mongod --fork --replSet wehpu --noprealloc --smallfiles --logpath /var/log/mongodb/mongod.log
mongodb-master    | note: noprealloc may hurt performance in many applications
mongodb-master    | about to fork child process, waiting until server is ready for connections.
mongodb-master    | forked process: 8
mongodb-slave2    | + MONGO_LOG=/var/log/mongodb/mongod.log
mongodb-slave2    | + MONGO=/usr/bin/mongo
mongodb-slave2    | + MONGOD=/usr/bin/mongod
mongodb-slave2    | + /usr/bin/mongod --fork --replSet wehpu --noprealloc --smallfiles --logpath /var/log/mongodb/mongod.log
mongodb-master    | child process started successfully, parent exiting
mongodb-master    | + '[' mongodb-master == mongodb-master ']'
mongodb-master    | + /usr/bin/mongo --eval 'rs.initiate({
mongodb-master    |     _id: "wehpu",
mongodb-master    |     version: 1,
mongodb-master    |     members: [
mongodb-master    |         {
mongodb-master    |             _id: 0,
mongodb-master    |             host: "mongodb-master:27017",
mongodb-master    |             arbiterOnly: false,
mongodb-master    |             buildIndexes: true,
mongodb-master    |             hidden: false,
mongodb-master    |             priority: 1,
mongodb-master    |             tags: {},
mongodb-master    |             slaveDelay: 0,
mongodb-master    |             votes: 1
mongodb-master    |         },
mongodb-master    |         {
mongodb-master    |             _id: 1,
mongodb-master    |             host: "mongodb-slave1:27017",
mongodb-master    |             arbiterOnly: false,
mongodb-master    |             buildIndexes: true,
mongodb-master    |             hidden: false,
mongodb-master    |             priority: 1,
mongodb-master    |             tags: {},
mongodb-master    |             slaveDelay: 0,
mongodb-master    |             votes: 1
mongodb-master    |         },
mongodb-master    |         {
mongodb-master    |             _id: 2,
mongodb-master    |             host: "mongodb-slave2:27017",
mongodb-master    |             arbiterOnly: false,
mongodb-master    |             buildIndexes: true,
mongodb-master    |             hidden: false,
mongodb-master    |             priority: 1,
mongodb-master    |             tags: {},
mongodb-master    |             slaveDelay: 0,
mongodb-master    |             votes: 1
mongodb-master    |         }
mongodb-master    |     ]
mongodb-master    | })'
mongodb-slave2    | note: noprealloc may hurt performance in many applications
mongodb-slave2    | about to fork child process, waiting until server is ready for connections.
mongodb-slave2    | forked process: 9
mongodb-slave2    | child process started successfully, parent exiting
mongodb-slave2    | + '[' '' == mongodb-master ']'
mongodb-slave2    | + tailf /dev/null
mongodb-master    | MongoDB shell version v3.4.9
mongodb-master    | connecting to: mongodb://127.0.0.1:27017
mongodb-master    | MongoDB server version: 3.4.9
mongodb-master    | {
mongodb-master    |     "info" : "try querying local.system.replset to see current configuration",
mongodb-master    |     "ok" : 0,
mongodb-master    |     "errmsg" : "already initialized",
mongodb-master    |     "code" : 23,
mongodb-master    |     "codeName" : "AlreadyInitialized"
mongodb-master    | }
mongodb-slave1    | + MONGO_LOG=/var/log/mongodb/mongod.log
mongodb-master    | + tailf /dev/null
mongodb-slave1    | + MONGO=/usr/bin/mongo
wehpu-engine_1    | npm info it worked if it ends with ok
mongodb-slave1    | + MONGOD=/usr/bin/mongod
wehpu-engine_1    | npm info using [email protected]
mongodb-slave1    | + /usr/bin/mongod --fork --replSet wehpu --noprealloc --smallfiles --logpath /var/log/mongodb/mongod.log
wehpu-engine_1    | npm info using [email protected]
mongodb-slave1    | note: noprealloc may hurt performance in many applications
mongodb-slave1    | about to fork child process, waiting until server is ready for connections.
mongodb-slave1    | forked process: 8
mongodb-slave1    | child process started successfully, parent exiting
mongodb-slave1    | + '[' '' == mongodb-master ']'
mongodb-slave1    | + tailf /dev/null
wehpu-engine_1    | npm info lifecycle [email protected]~prestart: [email protected]
wehpu-engine_1    | npm info lifecycle [email protected]~start: [email protected]
wehpu-engine_1    | 
wehpu-engine_1    | > [email protected] start /usr/src/app
wehpu-engine_1    | > node ./bin/www
wehpu-engine_1    | 
wehpu-engine_1    | Mongodb connection error:  { MongoError: no primary found in replicaset
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:560:28
wehpu-engine_1    |     at connectNewServers (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:317:25)
wehpu-engine_1    |     at topologyMonitor (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:552:12)
wehpu-engine_1    |     at Server.<anonymous> (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:772:7)
wehpu-engine_1    |     at Server.g (events.js:292:16)
wehpu-engine_1    |     at emitOne (events.js:96:13)
wehpu-engine_1    |     at Server.emit (events.js:188:7)
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/server.js:300:14
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/connection/pool.js:469:18
wehpu-engine_1    |     at _combinedTickCallback (internal/process/next_tick.js:73:7)
wehpu-engine_1    |     at process._tickCallback (internal/process/next_tick.js:104:9)
wehpu-engine_1    |   name: 'MongoError',
wehpu-engine_1    |   message: 'no primary found in replicaset' }
wehpu-engine_1    | Unhandled rejection MongoError: no primary found in replicaset
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:560:28
wehpu-engine_1    |     at connectNewServers (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:317:25)
wehpu-engine_1    |     at topologyMonitor (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:552:12)
wehpu-engine_1    |     at Server.<anonymous> (/usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/replset.js:772:7)
wehpu-engine_1    |     at Server.g (events.js:292:16)
wehpu-engine_1    |     at emitOne (events.js:96:13)
wehpu-engine_1    |     at Server.emit (events.js:188:7)
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/topologies/server.js:300:14
wehpu-engine_1    |     at /usr/src/app/node_modules/[email protected]@mongodb-core/lib/connection/pool.js:469:18
wehpu-engine_1    |     at _combinedTickCallback (internal/process/next_tick.js:73:7)
wehpu-engine_1    |     at process._tickCallback (internal/process/next_tick.js:104:9)

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ณต์ œ ์„ธํŠธ์— ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค...

node.js, mongoose ๋ฐ MongoDB ๋ฒ„์ „์„ ์–ธ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค.

node.js : node:boron v6.10.3
๋ชฝ๊ณ DB : mongo:latest v3.4
๋ชฝ๊ตฌ์Šค : v4.11.13

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•  ๋•Œ ๋ณต์ œ ์„ธํŠธ๊ฐ€ ๊ธฐ๋ณธ์ด ๋ˆ„๊ตฌ์ธ์ง€ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— 5์ดˆ ๋™์•ˆ ์ ˆ์ „ ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด์„ธ์š”. ๋˜ํ•œ connectWithNoPrimary ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ๋ณธ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์—ฐ๊ฒฐ์ด ์„ฑ๊ณตํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mongoose.connect('mongodb://mongodb-master:27017,mongodb-slave1:27017,mongodb-slave2:27017/wehpu?replicaSet=wehpu', { useMongoClient: true, connectWithNoPrimary: true });

๋ชจ๋“  3 ๋Œ“๊ธ€

์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•  ๋•Œ ๋ณต์ œ ์„ธํŠธ๊ฐ€ ๊ธฐ๋ณธ์ด ๋ˆ„๊ตฌ์ธ์ง€ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— 5์ดˆ ๋™์•ˆ ์ ˆ์ „ ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด์„ธ์š”. ๋˜ํ•œ connectWithNoPrimary ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ธฐ๋ณธ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์—ฐ๊ฒฐ์ด ์„ฑ๊ณตํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mongoose.connect('mongodb://mongodb-master:27017,mongodb-slave1:27017,mongodb-slave2:27017/wehpu?replicaSet=wehpu', { useMongoClient: true, connectWithNoPrimary: true });

์—„์ฒญ๋‚œ! ๋‹น์‹ ์ด ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ •๋ง ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์˜ค๋ฅ˜๋„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰