测量 oplog 窗口和复制延迟
MongoDB副本集命令
// Oplog size and the time span it covers (oplog window):
rs.printReplicationInfo()
// Lag of each secondary relative to the primary:
rs.printSecondaryReplicationInfo()
// Lag in seconds and sync source, for monitoring/scripts:
const s = rs.status(); const p = s.members.find(m => m.stateStr === "PRIMARY");
s.members.filter(m => m.stateStr === "SECONDARY").map(m => ({ host: m.name, lagSec: (p.optimeDate - m.optimeDate) / 1000, syncSource: m.syncSourceHost }))
// Window (hours):
db.getReplicationInfo().timeDiffHours作用
显示 oplog 能容纳多少小时的写入(oplog 窗口),以及每个 secondary 落后 primary 多少秒及其同步源。
适用场景
出现复制延迟告警时、计划内维护前计算成员可下线多久,以及批量写入作业之后。
注意
若成员下线时间超过 oplog 窗口,就会变成 'too stale',需要初始同步。批量更新/删除作业可能在数小时内使窗口缩小;应以高峰负载时的窗口值为准。延迟计算基于 optimeDate 差值;若 primary 没有写入,延迟看起来不高,但窗口也不会缩小。