sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man kontrollerar att sekundär är synkroniserad nu eller inte

Obs :Se till att kontrollera svaret tillhandahålls av arcseldon för en användarvänlig motsvarighet.

Du kan använda utdata från rs.status() . Om sekundär är synkroniserad och inte skapades med slaveDelay alternativet och sedan optime och optimeDate sekundär bör vara lika med eller nära (om det finns aktuella operationer) de för primära. I så fall stateStr bör vara lika med SECONDARY . Så om sekundär är synkroniserad bör du se utdata som liknar denna (en medlem har tagits bort från utdata för tydlighetens skull):

 {
    "set" : "rs0",
    "date" : ISODate("2013-11-08T14:58:49Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "hostname:27001",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 155,
            "optime" : Timestamp(1383915748, 1),
            "optimeDate" : ISODate("2013-11-08T13:02:28Z"),
            "self" : true
        },

        {
            "_id" : 2,
            "name" : "hostname:27003",
            "health" : 0,
            "state" : 8,
            "stateStr" : "SECONDARY",
            "uptime" : 0,
            "optime" : Timestamp(1383915748, 1),
            "optimeDate" : ISODate("2013-11-08T13:02:28Z"),
            "lastHeartbeat" : ISODate("2013-11-08T14:58:48Z"),
            "lastHeartbeatRecv" : ISODate("2013-11-08T14:58:42Z"),
            "pingMs" : 0,
            "syncingTo" : "hostname:27001"
        }
    ],
    "ok" : 1
}

Här har du utdata av rs.status() för samma replikuppsättning om en av sekundärerna inte är synkroniserad. Först och främst kommer du att se optime och optimeDate för hostname:27003 skiljer sig från primär, stateStr är satt till RECOVERING och det finns lämplig lastHeartbeatMessage .

{
    "set" : "rs0",
    "date" : ISODate("2013-11-08T15:01:34Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "hostname:27001",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 320,
            "optime" : Timestamp(1383922858, 767),
            "optimeDate" : ISODate("2013-11-08T15:00:58Z"),
            "self" : true
        },

        {
            "_id" : 2,
            "name" : "hostname:27003",
            "health" : 1,
            "state" : 3,
            "stateStr" : "RECOVERING",
            "uptime" : 14,
            "optime" : Timestamp(1383915748, 1),
            "optimeDate" : ISODate("2013-11-08T13:02:28Z"),
            "lastHeartbeat" : ISODate("2013-11-08T15:01:34Z"),
            "lastHeartbeatRecv" : ISODate("2013-11-08T15:01:34Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "still syncing, not yet to minValid optime 527cfc90:19c4",
            "syncingTo" : "hostname:27001"
        }
    ],
    "ok" : 1
}

Om sekundär har skapats med slaveDelay sedan optime och optimeDate kan vara annorlunda men stateStr och lastHeartbeatMessage kommer att indikera om det finns en viss fördröjning.



  1. Node mongoose hitta fråga i loop fungerar inte

  2. MongoDB+Azure+Android:com.mongodb.WriteConcernException fel:inte huvudkod:10058

  3. Anpassade användaranslutningssträngar för MongoDB-instanser med autentisering

  4. mongodb grupp efter första tecken