首页/数据/NoSQL 速查/rs.status 查看复制集状态
MongoDB99 条

rs.status 查看复制集状态

rs.status() 展示复制集成员与同步状态:重点看每个成员的 stateStr、health、optimeDate 与同步来源,是复制集体检第一步。

NoSQL 速查数据更新于 2026-10-13

rs.status 是什么

rs.status() 是复制集体检的第一条命令:列出每个成员的角色、健康状态、同步时间与心跳信息。重点看 members[].stateStr(PRIMARY / SECONDARY / ARBITER)、health(1 正常 0 异常)、optimeDate(最后一条已应用的操作时间)与 lastHeartbeat(与主节点的心跳)。复制集异常、主从延迟、成员掉线都先从这里看。

基本信息

命令rs.status() 与 db.hello()
角色字段members[].stateStr:PRIMARY / SECONDARY / ARBITER
健康字段members[].health,1 正常、0 不可达
同步进度optimeDate 与 lastHeartbeat
集合名rs.status().set 给出复制集名称
权限需要 clusterMonitor 或更高角色

典型使用场景

  • 确认当前主节点是谁,切换后第一时间核对
  • 排查从节点同步延迟:比较各成员的 optimeDate
  • 成员加入或恢复时观察 stateStr 从 STARTUP2 走到 SECONDARY
  • 维护前确认副本集成员数量满足多数派要求
  • 故障复盘:导出各成员状态与时间点作为证据
  • 校验 stepDown 后新的主节点是否已就绪

常用取数

常用取数
rs.status().set                                                    # 复制集名称
rs.status().members.map(m => ({ name: m.name, state: m.stateStr, health: m.health, optime: m.optimeDate }))
db.hello()                                                         # 简洁版:isWritablePrimary 等
rs.printReplicationInfo()                                          # 主节点 oplog 窗口
rs.printSecondaryReplicationInfo()                                 # 各从节点延迟统计

常见状态值

stateStr含义处置建议
PRIMARY当前主节点只应有一个,出现两个属异常
SECONDARY正常从节点观察同步延迟是否稳定
ARBITER仲裁节点不存数据,只参与选举
STARTUP2正在初始化同步刚加入或追赶数据,先观察
RECOVERING恢复中可能正在重建 oplog,勿立即介入
optimeDate 反映该成员最后应用的操作时间:从节点与主节点的差值就是复制延迟,用 rs.printSecondaryReplicationInfo() 看更直观。
发现成员不健康时先查网络连通与内部认证(keyfile/证书),不要直接重启整组实例,重启会触发选举并可能造成短暂不可写。
stateStr 出现 STARTUP2 或 RECOVERING 通常是正在追赶数据,属于过程状态;只有当它长时间不变化或反复回退才需要处理。

复制集巡检要点

  • 各成员 optimeDate 差值稳定在秒级说明同步健康
  • oplog 窗口要覆盖维护窗口,否则从节点可能追不上主节点
  • 成员数量保持奇数,选举才能稳定产生多数派
  • 复制集名称与配置在各成员上必须一致,否则成员无法加入
  • priority 决定选举优先级,避免把低频节点设成主节点首选
  • 网络分区时优先恢复连通,再判断是否需要人工干预

易错点

  • 看到成员 health 为 0 先排查网络与心跳,贸然重启整组会触发选举,扩大影响面
  • 只比较 stateStr 不看 optimeDate,无法发现「状态正常但复制延迟很大」的隐患
  • 复制集成员数为偶数时选举容易出现平票,规划时按奇数成员部署
  • 把仲裁节点当数据节点使用,仲裁节点不存数据也不参与读写,无法分担负载
  • 在从节点上做写操作会直接失败,读写分离前要确认应用对从节点的使用方式

数据来源与参考

  • MongoDB Manual: rs.status()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌