MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment vérifier que le secondaire est synchronisé maintenant ou non

Remarque :Assurez-vous de vérifier la réponse fourni par arcseldon pour un équivalent convivial.

Vous pouvez utiliser la sortie de rs.status() . Si secondaire est synchronisé et n'a pas été créé avec slaveDelay option puis optime et optimeDate du secondaire doivent être égaux ou proches (s'il y a des opérations en cours) à ceux du primaire. Dans ce cas stateStr doit être égal à SECONDARY . Donc, si le secondaire est synchronisé, vous devriez voir une sortie similaire à celle-ci (un membre a été supprimé de la sortie pour plus de clarté) :

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

Ici, vous avez la sortie de rs.status() pour le même jeu de réplicas si l'un des secondaires n'est pas synchronisé. Tout d'abord vous verrez que optime et optimeDate pour hostname:27003 diffère du primaire, stateStr est défini sur RECOVERING et il y a un lastHeartbeatMessage approprié .

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

Si secondaire a été créé avec slaveDelay puis optime et optimeDate peut être différent mais stateStr et lastHeartbeatMessage indiquera s'il y a un décalage.