Skip to content

MongoDB 副本集监控指标

副本集健康状态指标

rs.status() 核心指标

  • ok:副本集状态是否正常(1=正常,0=异常)
  • set:副本集名称
  • date:当前时间戳
  • myState:当前节点状态
    • 0:启动中
    • 1:主节点
    • 2:从节点
    • 3:恢复中
    • 5:仲裁节点
  • members:副本集成员列表及状态

成员状态指标

  • name:节点名称和端口
  • health:节点健康状态(1=正常,0=异常)
  • state:节点状态码
  • stateStr:节点状态描述
  • uptime:节点运行时间(秒)
  • optime:节点最后一次操作时间戳
  • optimeDate:节点最后一次操作日期
  • syncingTo:从节点同步的源节点

复制延迟指标

复制延迟核心指标

  • replicationLag:从节点与主节点的时间差(秒)
  • oplogTimeDiff:oplog时间差,反映数据同步延迟
  • heartbeatIntervalMillis:心跳间隔(默认2秒)
  • heartbeatTimeoutSecs:心跳超时时间(默认10秒)

监控复制延迟的方法

  • 使用rs.printSlaveReplicationInfo()查看复制延迟
  • 监控replSetGetStatus命令输出
  • 使用MongoDB Atlas或Ops Manager的复制延迟图表
  • 配置Prometheus + Grafana监控mongodb_replica_set_member_optime_date指标

选举相关指标

选举指标

  • electionCount:副本集选举次数
  • electionTimeoutMillis:选举超时时间(默认10秒)
  • electionCandidateMetrics:选举候选者指标
  • electionParticipantMetrics:选举参与者指标

选举事件监控

  • 监控MongoDB日志中的选举事件
  • 使用db.adminCommand({ getLog: "rs" })查看副本集日志
  • 配置选举事件告警

Oplog相关指标

Oplog大小和利用率

  • oplogSizeMB:Oplog大小(MB)
  • oplogWindowHours:Oplog可回溯的时间窗口(小时)
  • oplog利用率:已使用的Oplog百分比

Oplog监控方法

  • 使用db.getReplicationInfo()查看Oplog信息
  • 监控local.oplog.rs集合大小
  • 配置Oplog利用率告警

连接和流量指标

连接指标

  • connections.current:当前连接数
  • connections.available:可用连接数
  • connections.totalCreated:总创建连接数

网络流量指标

  • network.bytesIn:入站流量(字节)
  • network.bytesOut:出站流量(字节)
  • network.numRequests:请求数量

监控工具和策略

监控工具

  • mongostat:实时监控副本集状态
  • mongotop:监控集合级别的读写操作
  • MongoDB Atlas:云服务内置监控
  • Ops Manager:企业级监控解决方案
  • Prometheus + Grafana:开源监控组合
  • Datadog:第三方监控服务

监控策略

  • 实时监控:1秒间隔(mongostat)
  • 长期监控:60秒间隔
  • 关键指标:5-10秒间隔
  • 日志监控:24小时实时分析

告警设置

关键告警阈值

指标警告阈值严重阈值
复制延迟10秒30秒
Oplog利用率70%90%
节点健康状态节点不可达主节点不可达
连接数80%最大连接数95%最大连接数
选举次数1次/天3次/天

告警渠道

  • 邮件告警
  • 短信告警
  • 企业微信/钉钉告警
  • PagerDuty等专业告警工具

性能优化建议

降低复制延迟

  1. 优化网络连接,使用低延迟网络
  2. 增加Oplog大小,延长Oplog窗口
  3. 确保从节点硬件性能与主节点匹配
  4. 减少主节点的写操作压力
  5. 配置适当的索引,加速从节点应用操作

提高副本集可用性

  1. 使用奇数个节点(3、5、7个)
  2. 分布节点到不同可用区或数据中心
  3. 配置适当的选举超时时间
  4. 定期进行故障恢复演练
  5. 监控Oplog大小和利用率

优化连接管理

  1. 配置适当的maxConns参数
  2. 使用连接池管理客户端连接
  3. 监控连接泄漏
  4. 限制单个客户端的连接数

版本差异

MongoDB 3.6 vs 4.0

  • 4.0版本增强了副本集监控指标
  • 4.0版本引入了更详细的选举指标
  • 4.0版本优化了Oplog管理

MongoDB 4.0 vs 4.2

  • 4.2版本引入了replSetResizeOplog命令
  • 4.2版本增强了复制延迟监控
  • 4.2版本改进了选举算法

MongoDB 4.2 vs 5.0

  • 5.0版本引入了实时性能分析
  • 5.0版本增强了副本集健康检查
  • 5.0版本优化了复制协议

MongoDB 5.0 vs 6.0

  • 6.0版本增强了Oplog可见性
  • 6.0版本改进了复制延迟计算
  • 6.0版本引入了更多副本集监控指标

常见问题(FAQ)

Q1: 复制延迟高怎么办?

A1: 首先检查网络连接,然后查看Oplog大小是否足够,从节点硬件性能是否匹配主节点,是否有慢查询或大事务导致复制延迟。

Q2: 如何查看副本集成员的详细状态?

A2: 使用rs.status()命令查看副本集状态,或使用db.adminCommand({ replSetGetStatus: 1 })获取更详细的信息。

Q3: 如何监控Oplog大小和利用率?

A3: 使用db.getReplicationInfo()命令查看Oplog信息,或监控local.oplog.rs集合大小和oplogWindowHours指标。

Q4: 副本集选举频繁是什么原因?

A4: 可能是网络不稳定、主节点负载过高、选举超时时间设置过短或节点配置不当导致的。

Q5: 如何配置副本集监控告警?

A5: 可以使用MongoDB Atlas、Ops Manager或Prometheus + Grafana配置告警,设置适当的阈值和告警渠道。

Q6: 从节点同步状态显示"RECOVERING"是什么意思?

A6: 从节点正在恢复中,可能是因为重启、网络中断或数据不一致导致的。等待恢复完成或检查日志获取更多信息。

Q7: 如何提高副本集的可用性?

A7: 使用奇数个节点,分布节点到不同可用区,配置适当的选举超时时间,定期进行故障恢复演练,监控Oplog大小和利用率。

Q8: 如何调整Oplog大小?

A8: 在MongoDB 4.2及以上版本,可以使用replSetResizeOplog命令在线调整Oplog大小。在早期版本,需要重启节点并修改配置文件。