replSetGetStatus

在本页面

Definition

  • replSetGetStatus
    • replSetGetStatus命令从处理该命令的服务器的角度返回副本集的状态。 replSetGetStatus必须针对admin database运行。该命令具有以下原型形式:
db.adminCommand( { replSetGetStatus: 1 } )

从 MongoDB 3.4 开始,在secondary成员上运行时,可以选择包含initialSync: 1以返回initial sync状态信息:

db.adminCommand( { replSetGetStatus: 1, initialSync: 1 } )

此命令提供的数据来自副本集的其他成员发送到服务器的心跳中包含的数据。由于心跳的频率,这些数据可能会过时几秒钟。

mongo shell 提供rs.status()帮助器;但是,您不能使用帮助程序指定initialSync: 1选项。

mongod实例必须启用复制,并且必须是副本集的成员,才能使replSetGetStatus成功返回。

Example

Primary
Secondary

The following example runs the replSetGetStatus command on the admin database of the replica set primary:

db.adminCommand( { replSetGetStatus : 1 } )

The command returns the following output for an example replica set primary:

{
   "set" : "replset",
   "date" : ISODate("2018-12-06T16:57:52.480Z"),
   "myState" : 1,
   "term" : NumberLong(1),
   "syncingTo" : "",
   "syncSourceHost" : "",
   "syncSourceId" : -1,
   "heartbeatIntervalMillis" : NumberLong(2000),
   "optimes" : {
      "lastCommittedOpTime" : {
         "ts" : Timestamp(1544115471, 2),
         "t" : NumberLong(1)
      },
      "readConcernMajorityOpTime" : {
         "ts" : Timestamp(1544115471, 2),
         "t" : NumberLong(1)
      },
      "appliedOpTime" : {
         "ts" : Timestamp(1544115471, 2),
         "t" : NumberLong(1)
      },
      "durableOpTime" : {
         "ts" : Timestamp(1544115471, 2),
         "t" : NumberLong(1)
      }
   },
   "members" : [
      {
         "_id" : 0,
         "name" : "m1.example.net:27017",
         "health" : 1,
         "state" : 1,
         "stateStr" : "PRIMARY",
         "uptime" : 123,
         "optime" : {
            "ts" : Timestamp(1544115471, 2),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2018-12-06T16:57:51Z"),
         "syncingTo" : "",
         "syncSourceHost" : "",
         "syncSourceId" : -1,
         "infoMessage" : "could not find member to sync from",
         "electionTime" : Timestamp(1544115363, 1),
         "electionDate" : ISODate("2018-12-06T16:56:03Z"),
         "configVersion" : 1,
         "self" : true,
         "lastHeartbeatMessage" : ""
      },
      {
         "_id" : 1,
         "name" : "m2.example.net:27017",
         "health" : 1,
         "state" : 2,
         "stateStr" : "SECONDARY",
         "uptime" : 120,
         "optime" : {
            "ts" : Timestamp(1544115471, 2),
            "t" : NumberLong(1)
         },
         "optimeDurable" : {
            "ts" : Timestamp(1544115471, 2),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2018-12-06T16:57:51Z"),
         "optimeDurableDate" : ISODate("2018-12-06T16:57:51Z"),
         "lastHeartbeat" : ISODate("2018-12-06T16:57:51.963Z"),
         "lastHeartbeatRecv" : ISODate("2018-12-06T16:57:52.082Z"),
         "pingMs" : NumberLong(0),
         "lastHeartbeatMessage" : "",
         "syncingTo" : "m1.example.net:27017",
         "syncSourceHost" : "m1.example.net:27017",
         "syncSourceId" : 0,
         "infoMessage" : "",
         "configVersion" : 1
      },
      {
         "_id" : 2,
         "name" : "m3.example.net:27017",
         "health" : 1,
         "state" : 2,
         "stateStr" : "SECONDARY",
         "uptime" : 120,
         "optime" : {
            "ts" : Timestamp(1544115471, 2),
            "t" : NumberLong(1)
         },
         "optimeDurable" : {
            "ts" : Timestamp(1544115471, 2),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2018-12-06T16:57:51Z"),
         "optimeDurableDate" : ISODate("2018-12-06T16:57:51Z"),
         "lastHeartbeat" : ISODate("2018-12-06T16:57:51.963Z"),
         "lastHeartbeatRecv" : ISODate("2018-12-06T16:57:52.082Z"),
         "pingMs" : NumberLong(0),
         "lastHeartbeatMessage" : "",
         "syncingTo" : "m1.example.net:27017",
         "syncSourceHost" : "m1.example.net:27017",
         "syncSourceId" : 0,
         "infoMessage" : "",
         "configVersion" : 1
      }
   ],
   "ok" : 1,
   "operationTime" : Timestamp(1544115471, 2),
   "$clusterTime" : {
      "clusterTime" : Timestamp(1544115471, 2),
      "signature" : {
         "hash" : BinData(0,"aE8X8Wcbyp0Begv7aPnhlkDa1/0="),
         "keyId" : NumberLong("6631924993926103041")
      }
   }
}

The following example runs the replSetGetStatus command on the admin database of the replica set primary. In this example, the optional initialSync: 1 is included in the command (you can omit if you do not want to return the initial sync status):

db.adminCommand( { replSetGetStatus : 1, initialSync: 1 } )

The command returns the following output for an example replica set secondary:

{
   "set" : "replset",
   "date" : ISODate("2018-12-06T17:16:20.037Z"),
   "myState" : 2,
   "term" : NumberLong(1),
   "syncingTo" : "m2.example.net:27017",
   "syncSourceHost" : "m2.example.net:27017",
   "syncSourceId" : 1,
   "heartbeatIntervalMillis" : NumberLong(2000),
   "optimes" : {
      "lastCommittedOpTime" : {
         "ts" : Timestamp(1544116575, 1),
         "t" : NumberLong(1)
      },
      "readConcernMajorityOpTime" : {
         "ts" : Timestamp(1544116575, 1),
         "t" : NumberLong(1)
      },
      "appliedOpTime" : {
         "ts" : Timestamp(1544116575, 1),
         "t" : NumberLong(1)
      },
      "durableOpTime" : {
         "ts" : Timestamp(1544116575, 1),
         "t" : NumberLong(1)
      }
   },
   "initialSyncStatus" : {
      "failedInitialSyncAttempts" : 0,
      "maxFailedInitialSyncAttempts" : 10,
      "initialSyncStart" : ISODate("2018-12-06T17:15:57.546Z"),
      "initialSyncEnd" : ISODate("2018-12-06T17:15:58.221Z"),
      "initialSyncElapsedMillis" : 675,
      "initialSyncAttempts" : [
         {
            "durationMillis" : 439,
            "status" : "OK",
            "syncSource" : "m2.example.net:27017"
         }
      ],
      "fetchedMissingDocs" : 0,
      "appliedOps" : 0,
      "initialSyncOplogStart" : Timestamp(1544116550, 2),
      "initialSyncOplogEnd" : Timestamp(1544116550, 2),
      "databases" : {
         "databasesCloned" : 3,
         "admin" : {
            "collections" : 4,
            "clonedCollections" : 4,
            "start" : ISODate("2018-12-06T17:15:57.783Z"),
            "end" : ISODate("2018-12-06T17:15:58.031Z"),
            "elapsedMillis" : 248,
            "admin.system.roles" : {
               "documentsToCopy" : 1,
               "documentsCopied" : 1,
               "indexes" : 2,
               "fetchedBatches" : 1,
               "start" : ISODate("2018-12-06T17:15:57.784Z"),
               "end" : ISODate("2018-12-06T17:15:57.862Z"),
               "elapsedMillis" : 78
            },
            ...
         },
         ...
         "test" : {
            "collections" : 1,
            "clonedCollections" : 1,
            "start" : ISODate("2018-12-06T17:15:58.155Z"),
            "end" : ISODate("2018-12-06T17:15:58.208Z"),
            "elapsedMillis" : 53,
            "test.foo" : {
               "documentsToCopy" : 3,
               "documentsCopied" : 3,
               "indexes" : 1,
               "fetchedBatches" : 1,
               "start" : ISODate("2018-12-06T17:15:58.157Z"),
               "end" : ISODate("2018-12-06T17:15:58.208Z"),
               "elapsedMillis" : 51
            }
         }
      }
   },
   "members" : [
      {
         "_id" : 0,
         "name" : "m1.example.net:27017",
         "health" : 1,
         "state" : 1,
         "stateStr" : "PRIMARY",
         "uptime" : 22,
         "optime" : {
            "ts" : Timestamp(1544116575, 1),
            "t" : NumberLong(1)
         },
         "optimeDurable" : {
            "ts" : Timestamp(1544116575, 1),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2018-12-06T17:16:15Z"),
         "optimeDurableDate" : ISODate("2018-12-06T17:16:15Z"),
         "lastHeartbeat" : ISODate("2018-12-06T17:16:18.307Z"),
         "lastHeartbeatRecv" : ISODate("2018-12-06T17:16:19.420Z"),
         "pingMs" : NumberLong(0),
         "lastHeartbeatMessage" : "",
         "syncingTo" : "",
         "syncSourceHost" : "",
         "syncSourceId" : -1,
         "infoMessage" : "",
         "electionTime" : Timestamp(1544115363, 1),
         "electionDate" : ISODate("2018-12-06T16:56:03Z"),
         "configVersion" : 1
      },
      {
         "_id" : 1,
         "name" : "m2.example.net:27017",
         "health" : 1,
         "state" : 2,
         "stateStr" : "SECONDARY",
         "uptime" : 22,
         "optime" : {
            "ts" : Timestamp(1544116575, 1),
            "t" : NumberLong(1)
         },
         "optimeDurable" : {
            "ts" : Timestamp(1544116575, 1),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2018-12-06T17:16:15Z"),
         "optimeDurableDate" : ISODate("2018-12-06T17:16:15Z"),
         "lastHeartbeat" : ISODate("2018-12-06T17:16:18.307Z"),
         "lastHeartbeatRecv" : ISODate("2018-12-06T17:16:19.421Z"),
         "pingMs" : NumberLong(0),
         "lastHeartbeatMessage" : "",
         "syncingTo" : "m1.example.net:27017",
         "syncSourceHost" : "m1.example.net:27017",
         "syncSourceId" : 0,
         "infoMessage" : "",
         "configVersion" : 1
      },
      {
         "_id" : 2,
         "name" : "m3.example.net:27017",
         "health" : 1,
         "state" : 2,
         "stateStr" : "SECONDARY",
         "uptime" : 24,
         "optime" : {
            "ts" : Timestamp(1544116575, 1),
            "t" : NumberLong(1)
         },
         "optimeDate" : ISODate("2018-12-06T17:16:15Z"),
         "syncingTo" : "m2.example.net:27017",
         "syncSourceHost" : "m2.example.net:27017",
         "syncSourceId" : 1,
         "infoMessage" : "",
         "configVersion" : 1,
         "self" : true,
         "lastHeartbeatMessage" : ""
      }
   ],
   "ok" : 1
}

Output

replSetGetStatus 命令返回包含以下字段的文档:

  • replSetGetStatus. set

  • replSetGetStatus. date

    • 根据处理 replSetGetStatus 命令的服务器,以ISODate格式格式化的日期和时间反映当前时间。将此值与replSetGetStatus.members[n].lastHeartbeat的值进行比较,以查找此服务器与副本集的其他成员之间的操作延迟。
  • replSetGetStatus. myState

  • replSetGetStatus. term

    • 3.2 版中的新功能。

副本集成员的选举计数。分布式共识算法使用term来确保正确性。

如果使用protocolVersion: 0而不是protocolVersion: 1,则返回-1

  • replSetGetStatus. syncingTo
    • 自版本 3.6.6 起已弃用:3.4.16

从 MongoDB 3.6.6(和 3.4.16)开始,MongoDB 弃用syncingTo。请参见replSetGetStatus.syncSourceHost

syncingTo字段保存此实例从其同步的成员的主机名。如果此实例是主实例,则返回一个空字符串""

  • replSetGetStatus. syncSourceHost
    • 版本 3.6.6 中的新功能:3.4.16

syncSourceHost字段保存此实例从其同步的成员的主机名。

如果此实例是主实例,则syncSourceHost是空字符串,而syncSourceId -1

  • replSetGetStatus. syncSourceId
    • 版本 3.6.6 中的新功能:3.4.16

syncSourceId字段保存此实例从其同步的成员的replSetGetStatus.members[n]._id

如果此实例是主实例,则syncSourceHost是空字符串,而syncSourceId -1

  • replSetGetStatus. heartbeatIntervalMillis
    • 3.2 版中的新功能。

心跳的频率(以毫秒为单位)。

  • replSetGetStatus. optimes
    • 3.4 版的新功能。

optimes字段包含一个包含optimes的文档,该文档用于检查复制进度。

  • replSetGetStatus.optimes. lastCommittedOpTime
    • 从该成员的角度出发,有关已写入大多数副本集成员的最新操作的信息。

该值是包含以下内容的文档:

  • ts,即操作的Timestamp

  • t,即最初在主数据库上生成操作的term

如果使用protocolVersion: 0,则t等于-1

该值是包含以下内容的文档:

  • ts,即操作的Timestamp

  • t,即最初在主数据库上生成操作的term

如果使用protocolVersion: 0,则t等于-1

  • replSetGetStatus.optimes. appliedOpTime
    • 从该成员的角度来看,有关已应用于副本集的此成员的最新操作的信息。

对于protocolVersion: 1,该值是包含以下内容的文档:

  • ts,即操作的Timestamp

  • t,即最初在主数据库上生成操作的term

对于protocolVersion: 0,该值为操作的Timestamp

  • replSetGetStatus.optimes. durableOpTime
    • 从该成员的角度来看,有关已写入副本集该成员的日志的最新操作的信息。

对于protocolVersion: 1,该值是包含以下内容的文档:

  • ts,即操作的Timestamp

  • t,即最初在主数据库上生成操作的term

对于protocolVersion: 0,该值为操作的Timestamp

  • replSetGetStatus. initialSyncStatus
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

文档提供有关此辅助节点initial sync的进度和状态的信息。

Note

与正在进行的初始同步的进度相关的某些字段仅在初始同步进行时显示,而在初始同步完成后不显示。

  • replSetGetStatus.initialSyncStatus. failedInitialSyncAttempts
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

initial sync失败并且必须在此辅助节点上重新启动的次数。

  • replSetGetStatus.initialSyncStatus. maxFailedInitialSyncAttempts
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

成员关闭之前,initial sync可以在此辅助服务器上重新启动的最大次数。

  • replSetGetStatus.initialSyncStatus. initialSyncStart
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

辅助节点initial sync的开始时间戳。

  • replSetGetStatus.initialSyncStatus. initialSyncEnd
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

辅助节点initial sync的结束时间戳记。

  • replSetGetStatus.initialSyncStatus. initialSyncElapsedMillis
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

initialSyncStartinitialSyncEnd之间的毫秒数。

  • replSetGetStatus.initialSyncStatus. initialSyncAttempts
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

文档数组,其中每个文档对应一次initial sync次尝试。另请参见failedInitialSyncAttempts

每个文档都包含以下有关初始同步尝试的信息:

{
   "durationMillis" : <duration in milliseconds>,
   "status" : <exit status>,
   "syncSource" : <source node from which this secondary performs initial sync>
}
  • replSetGetStatus.initialSyncStatus. fetchedMissingDocs
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

从同步源中提取的丢失(即未克隆)文档的数量,以便将initial sync启动后发生的更新应用于这些文档。

作为初始同步过程的一部分,辅助数据库使用操作日志更新其数据集以反映副本集的当前状态。

  • replSetGetStatus.initialSyncStatus. appliedOps
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

initial sync启动后发生并在克隆数据库后应用的操作数。

作为初始同步过程的一部分,辅助数据库使用操作日志更新其数据集以反映副本集的当前状态。

  • replSetGetStatus.initialSyncStatus. initialSyncOplogStart
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

initial sync的操作日志应用程序阶段的开始时间戳记,辅助节点将应用在初始同步开始后发生的更改。

作为初始同步过程的一部分,辅助数据库使用操作日志更新其数据集以反映副本集的当前状态。

  • replSetGetStatus.initialSyncStatus. initialSyncOplogEnd
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

initial sync的操作日志应用程序阶段的结束时间戳记,辅助服务器将应用在初始同步开始后发生的更改。

作为初始同步过程的一部分,辅助数据库使用操作日志更新其数据集以反映副本集的当前状态。

  • replSetGetStatus.initialSyncStatus. databases
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

有关在initial sync期间克隆的数据库的详细信息。

  • replSetGetStatus.initialSyncStatus.databases. databasesCloned
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

initial sync期间克隆的数据库数。

  • replSetGetStatus.initialSyncStatus.databases. <dbname>
    {#replSetGetStatus.initialSyncStatus.databases.<dbname>}
    • 3.4 版中的新功能:仅在辅助节点上使用 initialInitial:1 选项运行命令时可用

对于每个数据库,一个文档将返回有关该数据库克隆进度的信息。

{
   "collections" : <number of collections to clone in the database>,
   "clonedCollections" : <number of collections cloned to date>,
   "start" : <start date and time for the database clone>,
   "end" : <end date and time for the database clone>,
   "elapsedMillis" : <duration of the database clone>,
   "<db>.<collection>" : {
      "documentsToCopy" : <number of documents to copy>,
      "documentsCopied" : <number of documents copied to date>,
      "indexes" :  <number of indexes>,
      "fetchedBatches" :  <number of batches of documents fetched to date>,
      "start" :  <start date and time for the collection clone>,
      "end" : <end date and time for the collection clone>,
      "elapsedMillis" : <duration of the collection clone>,
   }
}
  • replSetGetStatus. members

    • members字段包含一个数组,其中包含副本集中每个成员的文档。
  • replSetGetStatus.members[n]. _id

    • _id字段包含成员的标识符。
  • replSetGetStatus.members[n]. name

    • name字段保存服务器的名称。
  • replSetGetStatus.members[n]. self

    • self字段仅包含在成员数组中当前mongod实例的文档中。其值为true
  • replSetGetStatus.members[n]. health

    • health值仅对副本集的其他成员(即不返回rs.status的成员)存在。该字段表示成员是向上(即1)还是向下(即0)。
  • replSetGetStatus.members[n]. state

  • replSetGetStatus.members[n]. stateStr

    • 描述state的字符串。
  • replSetGetStatus.members[n]. uptime

    • uptime字段包含一个值,该值反映此成员已联机的秒数。

对于返回rs.status()数据的成员,此值不出现。

  • replSetGetStatus.members[n]. optime
    • 该成员已应用的操作日志中有关最后操作的信息。

在版本 3.2 中更改。

如果使用protocolVersion: 1,则optime返回包含以下内容的文档:

  • ts,最后一个操作的Timestampoplog应用于副本集的此成员。

  • t,即最初在主数据库上生成最后一次应用操作的term

如果使用protocolVersion: 0,则optime返回oplog中应用于副本集的此成员的最后一个操作的Timestamp

  • replSetGetStatus.members[n]. optimeDurable
    • 3.4 版的新功能。

该成员已对其日记帐应用的操作日志中有关最后操作的信息。

如果使用protocolVersion: 1,则该值为包含以下内容的文档:

  • ts,即操作的Timestamp

  • t,即最初在主数据库上生成此操作的term

如果使用protocolVersion: 0,则值为操作的Timestamp

  • replSetGetStatus.members[n]. optimeDate

    • ISODate格式的日期字符串,反映此成员应用的oplog中的最后一个条目。如果这与lastHeartbeat明显不同,则该成员正在经历“复制滞后” ,或者自上次更新以来没有任何新操作。在集合的所有成员之间比较members.optimeDate
  • replSetGetStatus.members[n]. optimeDurableDate

    • 3.4 版的新功能。

ISODate格式的日期字符串,反映了该成员对其日记应用的oplog中的最后一个条目。

  • replSetGetStatus.members[n]. syncingTo
    • 自版本 3.6.6 起已弃用:3.4.16

从 MongoDB 3.6.6(和 3.4.16)开始,MongoDB 弃用syncingTo。请参见replSetGetStatus.members[n].syncSourceHost

syncingTo字段保存此实例从其同步的成员的主机名。如果成员是主要成员,则返回空字符串""

  • replSetGetStatus.members[n]. syncSourceHost
    • 版本 3.6.6 中的新功能:3.4.16

syncSourceHost字段保存此实例从其同步的成员的主机名。

如果replSetGetStatus.members[n]是主字符串,则syncSourceHost是空字符串,而syncSourceId -1是。

  • replSetGetStatus.members[n]. syncSourceId
    • 版本 3.6.6 中的新功能:3.4.16

syncSourceId字段保存syncSourceHostreplSetGetStatus.members[n]._id值。

如果replSetGetStatus.members[n]是主字符串,则syncSourceHost是空字符串,而syncSourceId -1是。

  • replSetGetStatus.members[n]. electionTime

  • replSetGetStatus.members[n]. electionDate

    • 对于当前的主要数据库,该格式为ISODate格式的日期字符串,可以反映选举日期。有关选举的更多信息,请参见副本集高可用性
  • replSetGetStatus.members[n]. self

    • 指示哪个副本集成员处理了 replSetGetStatus 命令。
  • replSetGetStatus.members[n]. lastHeartbeat

    • ISODate格式的日期和时间,反映了处理 replSetGetStatus 命令的服务器上次收到心跳响应后发送给该成员的时间(members[n])。将此值与datelastHeartBeatRecv字段的值进行比较,以跟踪这些副本集成员之间的延迟。

该值仅对replSetGetStatus.members[n].self指定的服务器以外的副本集成员可用。

  • replSetGetStatus.members[n]. lastHeartbeatRecv
    • ISODate格式的日期和时间,反映了处理 replSetGetStatus 命令的服务器上次从此成员(members[n])接收心跳请求的时间。将此值与datelastHeartBeat字段的值进行比较,以跟踪这些副本集成员之间的延迟。

该值仅对replSetGetStatus.members[n].self指定的服务器以外的副本集成员可用。

  • replSetGetStatus.members[n]. lastHeartbeatMessage

    • 当最后一个心跳包括额外的消息时,lastHeartbeatMessage包含该消息的字符串表示形式。
  • replSetGetStatus.members[n]. pingMs

    • pingMs表示往返数据包在远程成员和本地实例之间传播所需的毫秒数。

对于返回rs.status()数据的成员,此值不出现。

  • replSetGetStatus.members[n]. syncingTo

    • syncingTo字段仅出现在secondary和正在恢复的成员上的rs.status()的输出上,并保留与此实例进行同步的成员的主机名。
  • replSetGetStatus.members[n]. configVersion

    • 3.0 版中的新功能。

configVersion的值为副本集配置版本

另请参见Response,以获取有关ok状态字段,operationTime字段和$clusterTime字段的详细信息。