sql >> データベース >  >> NoSQL >> MongoDB

セカンダリが同期されているかどうかを確認する方法

    :必ず回答 を確認してください arcseldon によって提供されます ユーザーフレンドリーな同等物のために。

    rs.status()の出力を使用できます 。セカンダリが同期され、slaveDelayで作成されなかった場合 オプション、次にoptime およびoptimeDate セカンダリのは、プライマリのそれらと等しいか、(現在の操作がある場合)それに近い必要があります。その場合、stateStr SECONDARYと同じである必要があります 。したがって、セカンダリが同期されている場合は、次のような出力が表示されます(わかりやすくするために、1つのメンバーが出力から削除されています):

     {
        "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()の出力があります セカンダリの1つが同期されていない場合は、同じレプリカセットに対して。まず、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. MongoDBでTwitterのようなタイムラインを作成する

    2. ブログに推奨されるデータベースバックエンド

    3. $groupステージの後に指定せずにすべてのフィールドを返す方法

    4. redisのluaで現在の日付と時刻を取得する