Первичная реплика MongoDb становится вторичной в случае сбоя вторичной

У меня есть 2 реплики монго. Один первичный, а второй вторичный. Если я остановлю вторичную реплику, первичная станет вторичной, и я потеряю права на запись.

Вот мои конфиги:

replica:PRIMARY> rs.status()
{
        "set" : "replica",
        "date" : ISODate("2016-02-26T11:27:50.140Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 1,
                        "name" : "192.168.5.44:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 80,
                        "optime" : Timestamp(1456486069, 1),
                        "optimeDate" : ISODate("2016-02-26T11:27:49Z"),
                        "electionTime" : Timestamp(1456485992, 1),
                        "electionDate" : ISODate("2016-02-26T11:26:32Z"),
                        "configVersion" : 82935,
                        "self" : true
                },
                {
                        "_id" : 2,
                        "name" : "192.168.5.34:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 79,
                        "optime" : Timestamp(1456486067, 2),
                        "optimeDate" : ISODate("2016-02-26T11:27:47Z"),
                        "lastHeartbeat" : ISODate("2016-02-26T11:27:48.874Z"),
                        "lastHeartbeatRecv" : ISODate("2016-02-26T11:27:48.930Z"),
                        "pingMs" : 1,
                        "syncingTo" : "192.168.5.44:27017",
                        "configVersion" : 82935
                }
        ],
        "ok" : 1
}

replica:SECONDARY> rs.status()
{
        "set" : "replica",
        "date" : ISODate("2016-02-26T11:21:38.574Z"),
        "myState" : 2,
        "syncingTo" : "192.168.5.44:27017",
        "members" : [
                {
                        "_id" : 1,
                        "name" : "192.168.5.44:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 1306,
                        "optime" : Timestamp(1456485695, 3),
                        "optimeDate" : ISODate("2016-02-26T11:21:35Z"),
                        "lastHeartbeat" : ISODate("2016-02-26T11:21:36.602Z"),
                        "lastHeartbeatRecv" : ISODate("2016-02-26T11:21:37.412Z"),
                        "pingMs" : 0,
                        "electionTime" : Timestamp(1456484393, 1),
                        "electionDate" : ISODate("2016-02-26T10:59:53Z"),
                        "configVersion" : 82935
                },
                {
                        "_id" : 2,
                        "name" : "192.168.5.34:27017",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 1306,
                        "optime" : Timestamp(1456485697, 1),
                        "optimeDate" : ISODate("2016-02-26T11:21:37Z"),
                        "syncingTo" : "192.168.5.44:27017",
                        "configVersion" : 82935,
                        "self" : true
                }
        ],
        "ok" : 1
}
replica:SECONDARY> cfg = rs.conf()
{
        "_id" : "replica",
        "version" : 82935,
        "members" : [
                {
                        "_id" : 1,
                        "host" : "192.168.5.44:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 2,
                        "tags" : {

                        },
                        "slaveDelay" : 0,
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.5.34:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : 0,
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatTimeoutSecs" : 10,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                }
        }
}

Даже если я отключу первичную реплику, вторичная не станет первичной.

Если вам нужны какие-либо другие детали, сообщите мне. Спасибо за помощь!


person Jure Potocnik    schedule 26.02.2016    source источник


Ответы (1)


MongoDB требуется большинство участников для проведения выборов. В наборе репликации из 2 элементов оба члена должны быть доступны для достижения большинства. Если один не работает, другой не может быть избран на первичные выборы.

person gzc    schedule 26.02.2016
comment
Могу ли я иметь 2 реплики и одного арбитра? Ок получил ответ. 2 реплики и один арбитр - нормально :) - person Jure Potocnik; 26.02.2016
comment
@JurePotocnik Вы можете. Это рекомендуемый минимальный набор реплик в официальной документации. - person gzc; 26.02.2016