Назад | Перейти на главную страницу

Mongodb: вторичное не становится первичным

У меня есть набор реплик с 2 серверами с данными и одним арбитром. rs.status () показывает, что все три сервера подключены.

Но когда я останавливаю свой основной, вторичный сервер остается вторичным и не становится первичным.

Что может быть проблемой?

rs.status () перед остановкой основного:

r6:SECONDARY> rs.status()
{
    "set" : "r6",
    "date" : ISODate("2018-05-30T08:57:23.195Z"),
    "myState" : 2,
    "term" : NumberLong(5),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
            "lastCommittedOpTime" : {
                    "ts" : Timestamp(1527669880, 1),
                    "t" : NumberLong(4)
            },
            "appliedOpTime" : {
                    "ts" : Timestamp(1527669880, 1),
                    "t" : NumberLong(4)
            },
            "durableOpTime" : {
                    "ts" : Timestamp(1527669880, 1),
                    "t" : NumberLong(4)
            }
    },
    "members" : [
            {
                    "_id" : 0,
                    "name" : "node14.company.biz:27118",
                    "health" : 1,
                    "state" : 1,
                    "stateStr" : "PRIMARY",
                    "uptime" : 10,
                    "optime" : {
                            "ts" : Timestamp(1527670641, 1),
                            "t" : NumberLong(5)
                    },
                    "optimeDurable" : {
                            "ts" : Timestamp(1527670641, 1),
                            "t" : NumberLong(5)
                    },
                    "optimeDate" : ISODate("2018-05-30T08:57:21Z"),
                    "optimeDurableDate" : ISODate("2018-05-30T08:57:21Z"),
                    "lastHeartbeat" : ISODate("2018-05-30T08:57:22.613Z"),
                    "lastHeartbeatRecv" : ISODate("2018-05-30T08:57:22.230Z"),
                    "pingMs" : NumberLong(0),
                    "electionTime" : Timestamp(1527670640, 1),
                    "electionDate" : ISODate("2018-05-30T08:57:20Z"),
                    "configVersion" : 3
            },
            {
                    "_id" : 1,
                    "name" : "node15:27139",
                    "health" : 1,
                    "state" : 2,
                    "stateStr" : "SECONDARY",
                    "uptime" : 840,
                    "optime" : {
                            "ts" : Timestamp(1527669880, 1),
                            "t" : NumberLong(4)
                    },
                    "optimeDate" : ISODate("2018-05-30T08:44:40Z"),
                    "configVersion" : 3,
                    "self" : true
            },
            {
                    "_id" : 2,
                    "name" : "node16:27159",
                    "health" : 1,
                    "state" : 7,
                    "stateStr" : "ARBITER",
                    "uptime" : 837,
                    "lastHeartbeat" : ISODate("2018-05-30T08:57:22.240Z"),
                    "lastHeartbeatRecv" : ISODate("2018-05-30T08:57:19.752Z"),
                    "pingMs" : NumberLong(0),
                    "configVersion" : 3
            }
    ],
    "ok" : 1
}

rs.status () после остановки первичного:

r6:SECONDARY> rs.status()
{
    "set" : "r6",
    "date" : ISODate("2018-05-30T08:58:58.612Z"),
    "myState" : 2,
    "term" : NumberLong(5),
    "heartbeatIntervalMillis" : NumberLong(2000),
    "optimes" : {
            "lastCommittedOpTime" : {
                    "ts" : Timestamp(1527670731, 1),
                    "t" : NumberLong(5)
            },
            "appliedOpTime" : {
                    "ts" : Timestamp(1527670731, 1),
                    "t" : NumberLong(5)
            },
            "durableOpTime" : {
                    "ts" : Timestamp(1527670731, 1),
                    "t" : NumberLong(5)
            }
    },
    "members" : [
            {
                    "_id" : 0,
                    "name" : "node14.company.biz:27118",
                    "health" : 0,
                    "state" : 8,
                    "stateStr" : "(not reachable/healthy)",
                    "uptime" : 0,
                    "optime" : {
                            "ts" : Timestamp(0, 0),
                            "t" : NumberLong(-1)
                    },
                    "optimeDurable" : {
                            "ts" : Timestamp(0, 0),
                            "t" : NumberLong(-1)
                    },
                    "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                    "optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
                    "lastHeartbeat" : ISODate("2018-05-30T08:58:55.409Z"),
                    "lastHeartbeatRecv" : ISODate("2018-05-30T08:58:54.257Z"),
                    "pingMs" : NumberLong(0),
                    "lastHeartbeatMessage" : "Connection refused",
                    "configVersion" : -1
            },
            {
                    "_id" : 1,
                    "name" : "node15:27139",
                    "health" : 1,
                    "state" : 2,
                    "stateStr" : "SECONDARY",
                    "uptime" : 935,
                    "optime" : {
                            "ts" : Timestamp(1527670731, 1),
                            "t" : NumberLong(5)
                    },
                    "optimeDate" : ISODate("2018-05-30T08:58:51Z"),
                    "infoMessage" : "could not find member to sync from",
                    "configVersion" : 3,
                    "self" : true
            },
            {
                    "_id" : 2,
                    "name" : "node16:27159",
                    "health" : 1,
                    "state" : 7,
                    "stateStr" : "ARBITER",
                    "uptime" : 932,
                    "lastHeartbeat" : ISODate("2018-05-30T08:58:55.407Z"),
                    "lastHeartbeatRecv" : ISODate("2018-05-30T08:58:54.760Z"),
                    "pingMs" : NumberLong(0),
                    "configVersion" : 3
            }
    ],
    "ok" : 1
}

Решено!

Проблема заключалась в том, что каждый хост знает себя с помощью DNS-суффикса, например «node08.company.biz», в то время как я добавил серверы и арбитры в набор реплик без этого суффикса (например, «node08»).

Я перенастроил каждый набор реплик, используя имена без суффикса, и теперь он работает