Docs 主页 → 开发应用程序 → MongoDB Manual
replSetGetStatus
定义
replSetGetStatus
replSetGetStatus
命令会从处理该命令的服务器的角度返回副本集的状态。replSetGetStatus
必须在管理员数据库上运行。mongod
实例必须是副本集成员,replSetGetStatus
才能成功返回。此命令提供的数据源自副本集其他成员发送到服务器的心跳中包含的数据。由于心跳的频率,这些数据可能会过时几秒钟。
提示
在
mongosh
中,该命令也可以通过rs.status()
辅助方法运行。助手方法对于
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas :用于在云中部署 MongoDB 的完全托管服务
注意
M 0 、M 2和 M 5集群不支持此命令。有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
db.adminCommand( { replSetGetStatus: 1 } )
- 从 MongoDB 4.2.1 开始
如果您在 初始同步
replSetGetStatus
(即rs.status()
STARTUP2
状态)期间对成员运行 或mongosh
replSetGetStatus.initialSyncStatus
辅助程序 ,该命令将返回 指标。成员完成初始同步并转换到另一种状态后,
replSetGetStatus.initialSyncStatus
指标将不再可用。
- 在早期版本(3.4.x-4.2.0)中
要返回初始同步状态信息,请在针对从节点成员或处于
STARTUP2
状态的成员的命令中加入initialSync: 1
:db.adminCommand( { replSetGetStatus: 1, initialSync: 1 } ) 在成员完成初始同步后,
replSetGetStatus.initialSyncStatus
指标仍然可用。也就是说,您可以在从节点成员上运行带有initialSync: 1
的replSetGetStatus
命令,以返回其初始同步信息。您不能在
initialSync: 1
mongosh
助手rs.status()
中指定 。
注意
如果尚未initialized
副本集, replSetGetStatus
命令将返回以下错误:
MongoServerError: no replset config has been received
运行replSetInitiate
命令并重试。
例子
输出
replSetGetStatus 命令会返回一个包含以下字段的文件:
replSetGetStatus.set
set
值是副本集的名称,在replSetName
设置中配置。这与rs.conf()
中的_id
值相同。
replSetGetStatus.date
ISODate格式的日期和时间,其中包含基于处理replSetGetStatus命令的服务器的当前时间。将其与
replSetGetStatus.members[n].lastHeartbeat
的值进行比较,以确定该服务器与副本集其他成员之间的操作延迟。
replSetGetStatus.myState
介于
0
和10
之间的整数,表示当前成员的副本状态。
replSetGetStatus.term
副本集的选举计数,这是该副本集节点所知道的。分布式共识算法使用
term
来确保正确性。
replSetGetStatus.syncSourceHost
syncSourceHost
字段保存此实例同步的成员的主机名。如果此实例为主节点,则
syncSourceHost
为空字符串,而syncSourceId
-1
为空字符串。
replSetGetStatus.syncSourceId
syncSourceId
字段会保存此实例与之同步的节点的replSetGetStatus.members[n]._id
。如果此实例为主节点,则
syncSourceHost
为空字符串,而syncSourceId
-1
为空字符串。
replSetGetStatus.writeMajorityCount
4.2.1 版本中的新增内容。
需要满足写关注
"majority"
的数据承载投票成员(即非仲裁节点)的数量。写操作只能应用于数据承载成员。有关
replSetGetStatus.writeMajorityCount
的计算,请参阅计算写关注的 Majority。
replSetGetStatus.votingMembersCount
使用
votes: 1
配置的成员数,包括仲裁节点。
replSetGetStatus.writableVotingMembersCount
使用
votes: 1
配置的数据承载成员的数量(不包括仲裁节点)。
replSetGetStatus.optimes
optimes
字段包含一个文档,其中包含用于检查复制进度的 ops/sec。从 MongoDB 4.2 开始,optimes
包含各种 ops/sec 对应的 ISODate 格式的日期字符串。每个 ops/sec 值均为一个包含以下内容的文档:
replSetGetStatus.optimes.lastCommittedWallTime
与
lastCommittedOpTime
对应的 ISODate 格式的日期字符串。如果并非所有成员都位于 MongoDB 4上,则
lastCommittedWallTime
可能无法准确表示lastCommittedOpTime
}。 2或更高版本,因为lastCommittedWallTime
需要与部署的其他成员通信。4.2 版本中的新增功能。
replSetGetStatus.optimes.readConcernMajorityOpTime
从该成员的角度来看,有关可以完成读关注
"majority"
查询的最新操作的信息;即可以满足lastCommittedOpTime
"majority"
查询的最新readConcernMajorityOpTime
lastCommittedOpTime
。 小于或等于 。
replSetGetStatus.optimes.readConcernMajorityWallTime
与
readConcernMajorityOpTime
对应的 ISODate 格式的日期字符串。如果并非所有成员都位于 MongoDB 4上,则
readConcernMajorityWallTime
可能无法准确表示readConcernMajorityOpTime
}。 2或更高版本,因为readConcernMajorityWallTime
需要与部署的其他成员通信。4.2 版本中的新增功能。
replSetGetStatus.optimes.lastAppliedWallTime
与
appliedOpTime
对应的 ISODate 格式的日期字符串。4.2 版本中的新增功能。
replSetGetStatus.optimes.lastDurableWallTime
与
durableOpTime
对应的 ISODate 格式的日期字符串。4.2 版本中的新增功能。
replSetGetStatus.lastStableCheckpointTimestamp
自版本 4.2 起已弃用。
适用于 WiredTiger 存储引擎。
当前或上一个持久化检查点的时间戳。尽管
lastStableCheckpointTimestamp
可能滞后于最新的持久化检查点,但返回的时间戳保证以稳定的检查点持久化到磁盘。null
值表示不存在稳定的检查点。
replSetGetStatus.electionCandidateMetrics
4.2.1 版本中的新增内容。
与当前主节点选举相关的指标。
electionCandidateMetrics
仅适用于主节点或候选节点。对于候选节点,在候选节点落选后,这些指标将不可用。replSetGetStatus.electionCandidateMetrics.electionTerm
在版本 4.2.2 中更改:在 v4.2.1 中,
electionTerm
被命名为electionTerm
。该成员在发起新选举时的选举计数(即
term
)。
replSetGetStatus.electionCandidateMetrics.lastCommittedOpTimeAtElection
4.2.1 版本中的新增内容。
该成员在称为新选举时看到的最近的
majority-committed optime
。
replSetGetStatus.electionCandidateMetrics.lastSeenOpTimeAtElection
4.2.1 版本中的新增内容。
该成员在召集新选举时的最近一次
applied optime
。
replSetGetStatus.electionCandidateMetrics.priorityAtElection
4.2.1 版本中的新增内容。
宣布选举时该成员的
priority
。
replSetGetStatus.electionCandidateMetrics.electionTimeoutMillis
4.2.1 版本中的新增内容。
选举时副本集已配置的
electionTimeoutMillis
设置。
replSetGetStatus.electionCandidateMetrics.priorPrimaryMemberId
4.2.1 版本中的新增内容。
上一个主节点的
members[n]._id
。如果没有以前的主节点,则该字段不存在。
replSetGetStatus.electionCandidateMetrics.targetCatchupOpTime
4.2.1 版本中的新增内容。
新当选的主节点的目标 ops/sec 用于其追赶过程。只有当新当选的主节点达到目标追赶 ops/sec 时,它才能开始接受写入。
replSetGetStatus.electionCandidateMetrics.newTermStartDate
4.2.1 版本中的新增内容。
成员作为主节点的时段开始的日期和时间(即
new term
条目写入 oplog 的日期和时间)。
replSetGetStatus.electionCandidateMetrics.wMajorityWriteAvailabilityDate
4.2.1 版本中的新增内容。
在副本集选举后,写关注
"majority"
可用的日期和时间(new term
oplog 条目被多数提交的日期和时间)。
replSetGetStatus.electionParticipantMetrics
与节点参与的最近一次选举相关的指标。
版本 4.2.2 中的新增功能。
replSetGetStatus.electionParticipantMetrics.votedForCandidate
布尔值,表示该节点是否投票支持召集选举的候选节点。
版本 4.2.2 中的新增功能。
replSetGetStatus.electionParticipantMetrics.electionTerm
成员所参与选举的任期。该任期可标识与参与者指标关联的选举。
版本 4.2.2 中的新增功能。
replSetGetStatus.electionParticipantMetrics.lastVoteDate
记录参与者投票时间的 ISODate 格式的日期字符串。
版本 4.2.2 中的新增功能。
replSetGetStatus.electionParticipantMetrics.electionCandidateMemberId
召集选举的候选节点的
members[n]._id
。版本 4.2.2 中的新增功能。
replSetGetStatus.electionParticipantMetrics.voteReason
如果该成员未投票给候选节点,那么投票的原因是什么。如果该成员投票给候选节点,则该值为空字符串。
版本 4.2.2 中的新增功能。
replSetGetStatus.electionParticipantMetrics.lastAppliedOpTimeAtElection
该成员在选举时最近一次应用的 ops/sec。
ops/sec 值是一个包含时间戳 (
ts
) 和任期 (t
) 的文档。
replSetGetStatus.electionParticipantMetrics.maxAppliedOpTimeInSet
如该成员所知,为此副本集的任何成员最近一次应用的 ops/sec。
ops/sec 值是一个包含时间戳 (
ts
) 和任期 (t
) 的文档。版本 4.2.2 中的新增功能。
replSetGetStatus.electionParticipantMetrics.priorityAtElection
选举时该成员的
priority
。版本 4.2.2 中的新增功能。
replSetGetStatus.electionParticipantMetrics.newTermStartDate
当选的主节点任期的开始日期和时间;这对应于主节点将
new term
条目写入其 oplog 的时间,而不是该条目被添加(即复制)到从节点的 oplog 的时间。该字段仅适用于从节点。对于主节点,请参阅
replSetGetStatus.electionCandidateMetrics.newTermStartDate
。版本 4.2.2 中的新增功能。
replSetGetStatus.initialSyncStatus
提供有关该成员初始同步进度和状态信息的文档。
重要
可用性
从 MongoDB 4开始。 2 。 1 、
replSetGetStatus.initialSyncStatus
指标仅在初始同步(即STARTUP2
状态)期间在成员上运行时可用。在早期版本 ( 3 . 6 .x- 4 . 2 . 0 ) 中,当命令在从节点或成员上使用
initialSync: 1
选项运行时,replSetGetStatus.initialSyncStatus
指标可用其STARTUP2
状态,即使在该成员完成初始同步后。但是,某些与正在进行的初始同步进度相关的字段仅在初始同步进行时显示,在初始同步完成后立即消失。replSetGetStatus.initialSyncStatus.failedInitialSyncAttempts
初始同步失败的次数,在此失败次数后成员必须重新启动。
replSetGetStatus.initialSyncStatus.maxFailedInitialSyncAttempts
在该成员关闭之前,可以在该成员上重新启动初始同步的最大次数。
replSetGetStatus.initialSyncStatus.initialSyncStart
该成员的初始同步的起始时间戳。
replSetGetStatus.initialSyncStatus.initialSyncEnd
此成员的 initial sync 的结束时间戳。
replSetGetStatus.initialSyncStatus.initialSyncAttempts
文档数组,其中每个文档均对应一次初始同步尝试。例如:
"initialSyncAttempts" : [ { "durationMillis" : 59539, "status" : "InvalidOptions: error fetching oplog during initial sync :: caused by :: Error while getting the next batch in the oplog fetcher :: caused by :: readConcern afterClusterTime value must not be greater than the current clusterTime. Requested clusterTime: { ts: Timestamp(0, 1) }; current clusterTime: { ts: Timestamp(0, 0) }", "syncSource" : "m1.example.net:27017", "rollBackId" : 1, "operationsRetried" : 120, "totalTimeUnreachableMillis" : 52601 } ], 每份文档都包含以下用于初始同步尝试的信息:
字段说明durationMillis初始同步尝试的持续时间(以毫秒为单位)。状态初始同步尝试的退出状态。syncSource初始同步尝试的同步源。rollBackId初始同步尝试开始时同步源的回滚标识符。
rollBackId
在使用基于文件复制的初始同步时不会出现。operationsRetried所有操作重试的总次数。totalTimeUnreachableMillis重试操作尝试所花费的总时间。
replSetGetStatus.initialSyncStatus.appliedOps
初始同步开始后发生并在复制数据库后应用的操作数。
作为初始同步过程的一部分,该成员会使用 oplog 更新其数据集以反映副本集的当前状态。
replSetGetStatus.initialSyncStatus.initialSyncOplogStart
初始同步的 oplog 应用程序阶段的开始时间戳,成员在此阶段会应用初始同步开始后发生的更改。
作为初始同步过程的一部分,该成员会使用 oplog 更新其数据集以反映副本集的当前状态。
replSetGetStatus.initialSyncStatus.initialSyncOplogEnd
初始同步的 oplog 应用程序阶段的结束时间戳,成员在此阶段会应用初始同步开始后发生的更改。
作为初始同步过程的一部分,该成员会使用 oplog 更新其数据集以反映副本集的当前状态。
replSetGetStatus.initialSyncStatus.syncSourceUnreachableSince
同步源变得无法访问的日期和时间。
只有在当前初始同步期间同步源不可用时才会出现。
replSetGetStatus.initialSyncStatus.currentOutageDurationMillis
同步源不可用的时长(以毫秒为单位)。
只有在当前初始同步期间同步源不可用时才会出现。
replSetGetStatus.initialSyncStatus.databases
初始同步期间所克隆数据库的相关详细信息。
replSetGetStatus.initialSyncStatus.databases.databasesCloned
初始同步时克隆的数据库数量。
replSetGetStatus.initialSyncStatus.databases.<dbname>
对于每个数据库,这是一份返回该数据库克隆进度信息的文档。
{ "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>, "receivedBatches" : <number of batches of documents received to date> // Added in 4.2 } }
replSetGetStatus.initialSyncStatus.method
5.2 版本中的新增功能。
用于初始同步的方法。
如果设立为
logical
,则同步是逻辑初始同步。如果设立为fileCopyBased
,则同步是基于文件副本的初始同步。
replSetGetStatus.initialSyncStatus.approxTotalDataSize
待同步的所有文件的大致大小(以字节为单位)。
此字段会在使用基于逻辑或文件副本的初始同步时出现。
replSetGetStatus.initialSyncStatus.totalInitialSyncElapsedMillis
正在进行的同步尝试所耗费的总时间。
此字段会在使用基于逻辑或文件副本的初始同步时出现。
replSetGetStatus.initialSyncStatus.remainingInitialSyncEstimatedMillis
正在进行的同步尝试的预期剩余时间。
此字段会在使用基于逻辑或文件副本的初始同步时出现。
replSetGetStatus.initialSyncStatus.initialBackupDataSize
要同步的初始文件集的总大小(以字节为单位)。
此字段仅在使用基于文件拷贝的初始同步时出现。
replSetGetStatus.initialSyncStatus.syncSourceLastApplied
在此备份游标开始之前,在同步源上应用的最后一次更新的 ops/sec。
此字段仅在使用基于文件拷贝的初始同步时出现。
replSetGetStatus.initialSyncStatus.numExtensions
同步已启动新备份游标的次数。
如果备份游标尚未启动,则不会显示此字段。
此字段仅在使用基于文件拷贝的初始同步时出现。
replSetGetStatus.initialSyncStatus.files
基于文件拷贝的初始同步过程中要同步的文件数组。
此字段仅在使用基于文件拷贝的初始同步时出现。
replSetGetStatus.initialSyncStatus.files[n].filePath
此文件相对于备份游标根目录的路径。
此字段仅在使用基于文件拷贝的初始同步时出现。
replSetGetStatus.initialSyncStatus.files[n].fileSize
备份游标所报告的文件大小。
此字段仅在使用基于文件拷贝的初始同步时出现。
replSetGetStatus.initialSyncStatus.files[n].extensionNumber
如果此文件是扩展名的一部分,则为该文件所属的扩展名的编号。
此字段仅在使用基于文件拷贝的初始同步时出现。
replSetGetStatus.members
members
字段保存一个数组,其中包含副本集中每个成员的文档。replSetGetStatus.members[n].ip
成员的已解析 IP 地址。如果
mongod
无法将replSetGetStatus.members[n].name
解析为 IP 地址,则返回值为 BSON null。否则,返回的值是解析的 IP 地址的字符串表示形式。4.2 版本中的新增功能。
replSetGetStatus.members[n].self
布尔值,表示该成员是否为当前
mongod
实例。self
字段仅包含在当前mongod
实例的文档中,因此其值始终为true
。
replSetGetStatus.members[n].state
介于
0
和10
之间的整数,表示成员的副本状态。
replSetGetStatus.members[n].uptime
对于运行
replSetGetStatus
命令的成员,uptime
是该成员在线的秒数。对于其他节点,
uptime
是该节点与运行replSetGetStatus
命令的节点持续通信的秒数。
replSetGetStatus.members[n].optimeDurable
关于该成员已应用到其日志的来自 oplog 的最后一次操作的信息。
optimeDurable
返回一个包含以下内容的文档:
replSetGetStatus.members[n].optimeDate
ISODate格式的日期字符串,包含该成员应用的oplog中的最后一个条目。如果这与
lastHeartbeat
有很大出入,则该成员要么遇到“复制延迟” ,要么在上次更新后没有任何新操作。比较该集合的所有成员之间的members.optimeDate
。
replSetGetStatus.members[n].lastAppliedWallTime
ISODate 格式的日期字符串,反映副本集的此成员在主节点上执行最后一次操作的挂钟时间。
replSetGetStatus.members[n].lastDurableWallTime
ISODate 格式的日期字符串,反映最后一次写入该成员日志的操作首次应用于主节点的挂钟时间。
replSetGetStatus.members[n].lastHeartbeat
ISODate格式的日期和时间,其中包含处理replSetGetStatus命令的服务器上次收到发送到此成员 (
members[n]
) 的心跳响应的时间。将此值与date
和lastHeartbeatRecv
字段的值进行比较,以跟踪这些副本集节点之间的延迟。
replSetGetStatus.members[n].lastHeartbeatRecv
ISODate格式的日期和时间,其中包含处理replSetGetStatus命令的服务器上次收到来自该成员的心跳请求的时间 (
members[n]
)。将此值与date
和lastHeartbeat
字段的值进行比较,以跟踪这些副本集节点之间的延迟。
replSetGetStatus.members[n].lastHeartbeatMessage
当最后一个心跳包含额外消息时,
lastHeartbeatMessage
包含该消息的字符串表示形式。
replSetGetStatus.members[n].pingMs
pingMs
表示往返数据包在远程成员和本地实例之间传输所需的毫秒 (ms) 数。该值不会出现在返回
rs.status()
数据的节点中。
replSetGetStatus.members[n].syncSourceHost
syncSourceHost
字段保存此实例同步的成员的主机名。如果
replSetGetStatus.members[n]
是主节点,则syncSourceHost
为空字符串,而syncSourceId
-1
为空字符串。
replSetGetStatus.members[n].syncSourceId
syncSourceId
字段保存syncSourceHost
的replSetGetStatus.members[n]._id
值如果
replSetGetStatus.members[n]
是主节点,则syncSourceHost
为空字符串,而syncSourceId
-1
为空字符串。
replSetGetStatus.members[n].configVersion
configVersion
值是replica set configuration version
。
replSetGetStatus.tooStale
一个布尔值,表示副本集节点已远远落后于主节点的oplog,并停留在
RECOVERING
状态。仅当其值为true
时,此字段才会包含在replSetGetStatus
输出中。
有关 ok
状态字段、operationTime
字段和 $clusterTime
字段的详情,另请参阅响应。