MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да проверите дали вторичният е синхронизиран сега или не

Забележка :Не забравяйте да проверите отговора предоставено от arcseldon за удобен за потребителя еквивалент.

Можете да използвате изхода на rs.status() . Ако вторичният е синхронизиран и не е създаден с slaveDelay опция след това optime и optimeDate на вторичния трябва да бъде равен или близък (ако има текущи операции) на този на първичния. В този случай stateStr трябва да е равно на SECONDARY . Така че, ако вторичният е синхронизиран, трябва да видите изход, подобен на този (един член е премахнат от изхода за яснота):

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

Тук имате резултат от rs.status() за същия набор реплики, ако една от вторичните не е синхронизирана. Първо ще видите този optime и optimeDate за hostname:27003 се различава от основния, stateStr е настроен на RECOVERING и има подходящ 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
}

Ако вторичният е създаден с slaveDelay след това optime и optimeDate може да бъде различен, но stateStr и lastHeartbeatMessage ще покаже дали има известно забавяне.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $divide

  2. Django не може да се свърже с mongoDB atlas

  3. Парола за MongoDB с @ в нея

  4. Mongodb NoRM и POCO

  5. Как да използвам променлива като име на поле в mongodb-native findAndModify?