sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan kontrolleres sekundær er synkroniseret nu eller ej

Bemærk :Sørg for at tjekke svaret leveret af arcseldon for en brugervenlig ækvivalent.

Du kan bruge output af rs.status() . Hvis sekundær er synkroniseret og ikke blev oprettet med slaveDelay mulighed og derefter optime og optimeDate sekundær skal være lig med eller tæt på (hvis der er aktuelle operationer) med primære. I så fald stateStr skal være lig med SECONDARY . Så hvis sekundær er synkroniseret, bør du se output, der ligner dette (et medlem er blevet fjernet fra output for klarhedens skyld):

 {
    "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
}

Her har du output af rs.status() for det samme replikasæt, hvis en af ​​sekundærerne ikke er synkroniseret. Først og fremmest vil du se den optime og optimeDate for hostname:27003 adskiller sig fra primær, stateStr er sat til RECOVERING og der er passende 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
}

Hvis sekundær er blevet oprettet med slaveDelay derefter optime og optimeDate kan være anderledes, men stateStr og lastHeartbeatMessage vil indikere, om der er noget forsinkelse.



  1. Opret en samling i MongoDB

  2. Få forfædre i MongoDb ved hjælp af træstruktur

  3. Hvordan overvåger man Redis som en kømotor ved hjælp af cli, der ligner beanstalkd?

  4. Brug $gte og <e mongo-operatoren, hvis dato er i strengformat i mongodb