sql >> Database >  >> NoSQL >> MongoDB

Hoe te controleren of secundair is nu gesynchroniseerd of niet

Opmerking :Zorg ervoor dat u het antwoord controleert geleverd door arcseldon voor een gebruiksvriendelijk equivalent.

U kunt de uitvoer van rs.status() . gebruiken . Als secundair is gesynchroniseerd en niet is gemaakt met slaveDelay optie dan optime en optimeDate van secundair moet gelijk zijn aan of dicht bij die van primair zijn (als er huidige bewerkingen zijn). In dat geval stateStr moet gelijk zijn aan SECONDARY . Dus als secundair is gesynchroniseerd, zou je een uitvoer moeten zien die vergelijkbaar is met deze (een lid is voor de duidelijkheid uit de uitvoer verwijderd):

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

Hier heb je uitvoer van rs.status() voor dezelfde replicaset als een van de secundaire niet is gesynchroniseerd. Allereerst zie je dat optime en optimeDate voor hostname:27003 verschilt van primair, stateStr is ingesteld op RECOVERING en er is een 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
}

Als secundair is gemaakt met slaveDelay dan optime en optimeDate kan anders zijn, maar stateStr en lastHeartbeatMessage geeft aan of er enige vertraging is.



  1. Gebruik variabele met regex om gegevens te vinden in mongodb (Meteor-app)

  2. Hoe PyMongo gebruiken met Flask Blueprints?

  3. Azure Redis-cache - time-outs bij GET-aanroepen

  4. mongo-logrotatie werkt niet op Windows