MongoError: первичная копия не найдена в replicaset - PullRequest
0 голосов
/ 17 мая 2018

У меня есть 2 сервера приложений, которые подключаются к ReplicaSet (Primary, Secondary и Arbitrer).

Проблема, с которой я сталкиваюсь,

 [ 'MongoError: no primary found in replicaset',
  '    at ../server/node_modules/mongodb-core/lib/topologies/replset.js:524:28',
  '    at null.<anonymous> (../server/node_modules/mongodb-core/lib/topologies/replset.js:303:24)',
  '    at g (events.js:260:16)',
  '    at emitOne (events.js:77:13)',
  '    at emit (events.js:169:7)',
  '    at null.<anonymous> (../server/node_modules/mongodb-core/lib/topologies/server.js:326:21)',
  '    at emitOne (events.js:77:13)',
  '    at emit (events.js:169:7)',
  '    at null.<anonymous> (../server/node_modules/mongodb-core/lib/connection/pool.js:270:12)',
  '    at g (events.js:260:16)',
  '    at emitTwo (events.js:87:13)',
  '    at emit (events.js:172:7)',
  '    at Socket.<anonymous> (../server/node_modules/mongodb-core/lib/connection/connection.js:175:49)',
  '    at Socket.g (events.js:260:16)',
  '    at emitOne (events.js:77:13)',
  '    at Socket.emit (events.js:169:7)',
  '    at connectErrorNT (net.js:996:8)',
  '    at nextTickCallbackWith2Args (node.js:442:9)',
  '    at process._tickCallback (node.js:356:17)' ]

Настройка ReplicaSet включенаapplication:

 "mongodb" : { 
      "replicaset": {
       "db"       : "test",
       "user"     : "admin",
       "password" : "*********",
       "name":"rs1",  
       "replicas": [{"host":"App1Box.dmz.mytest.com.au","port":27017}, {"host":"App2Box.dmz.mytest.com.au","port":27018}]  
      } 

rs.status () output

rs1:PRIMARY> rs.status()
{
        "set" : "rs1",
        "date" : ISODate("2018-05-17T03:50:01Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 2,
                        "name" : "App3Box:27018",
                        "health" : 1,
                        "state" : 7,
                        "stateStr" : "ARBITER",
                        "uptime" : 7180,
                        "lastHeartbeat" : ISODate("2018-05-17T03:50:00Z"),
                        "lastHeartbeatRecv" : ISODate("2018-05-17T03:50:00Z"),
                        "pingMs" : 0
                },
                {
                        "_id" : 3,
                        "name" : "App2Box:27018",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 7528,
                        "optime" : Timestamp(1526521846, 1),
                        "optimeDate" : ISODate("2018-05-17T01:50:46Z"),
                        "electionTime" : Timestamp(1526521798, 1),
                        "electionDate" : ISODate("2018-05-17T01:49:58Z"),
                        "self" : true
                },
                {
                        "_id" : 4,
                        "name" : "App1Box:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 7139,
                        "optime" : Timestamp(1526521846, 1),
                        "optimeDate" : ISODate("2018-05-17T01:50:46Z"),
                        "lastHeartbeat" : ISODate("2018-05-17T03:50:01Z"),
                        "lastHeartbeatRecv" : ISODate("2018-05-17T03:50:01Z"),
                        "pingMs" : 0,
                        "syncingTo" : "App2Box:27018"
                }
        ],
        "ok" : 1
}

Однако я вижу это только с одного из серверов приложений, которыйподключается к MongoDB, скажем, App1Box.Я не вижу этой проблемы на App2Box.

Я пытался удалить участников из replicaSets и повторно добавил, проблема все еще существует.

Mongo версия: 2.6.8 версия узла: 4.4.3 npm версия: 3.8.9

Я вижу все элементы в replicaSet с консоли mongo при выполнении rs.status () на первичном и вторичном.

Спасибо заваша помощь.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

1) Проверьте, чтобы в строке подключения содержались все имена серверов БД, приведенные ниже. https://docs.mongodb.com/manual/reference/connection-string/#standard-connection-string-format

2) Выполнить отработку отказа Для этого войдите в основной узел и выполните команду ниже

rs.stepDown()
0 голосов
/ 17 мая 2018

Обнаружено, что проблема заключается в том, что не используются полные DNS-имена при добавлении членов в replicaSet. Благодаря @ Нил Ланн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...