主备切换需基于多维指标持续交叉验证并设置带“呼吸感”的动态阈值。具体包括:联合判定主从延迟≥5秒且持续10秒以上、复制队列增长或资源瓶颈;采用滚动基线(如7天同段均值+2.5σ)及stl分解优化阈值;分层判定——节点层定位问题、副本集层决策切换、实例层兜底强制切换。

主备切换不是等故障“完全发生”才启动的动作,而是基于监控数据持续判断系统是否已偏离正常基线。频繁抖动触发误切换,根源往往不在切换逻辑本身,而在故障判定阈值设置不合理——太敏感,把瞬时波动当故障;太迟钝,又错过最佳切换窗口。关键在于让阈值有“呼吸感”,能区分噪声与真实风险。
用多维指标交叉验证,不单看一个数字
只依赖“主库延迟 > 5s”就触发切换,极易被网络抖动、临时IO高峰干扰。必须叠加至少两个关联指标,构成联合判定条件:
- 主从延迟持续超过阈值(如5秒)且复制队列长度(replSetGetStatus.members.n.optimeDurable)同步增长
- 延迟升高同时从库CPU使用率 > 85% 或磁盘IO等待时间 > 100ms,说明是资源瓶颈而非网络问题
- Oplog保存时长低于2小时并持续3个采集周期,比延迟更早暴露追赶能力不足
加防抖延时,给系统留出自我恢复空间
瞬时异常不等于故障。所有判定条件都应绑定“持续时间”约束,避免毫秒级抖动直接驱动切换:
- 延迟超5秒需连续维持10秒以上才进入告警待命状态
- 进入待命后,再观察30秒内是否出现第二项指标异常,双条件满足才真正触发切换流程
- 若在延时期间任一指标回归正常,自动重置计时器,不累积历史抖动
按业务节奏动态调阈值,避开峰谷干扰
固定阈值在大促、夜间批处理等场景下必然误报。推荐用滚动基线替代静态数字:
- 取过去7天同时间段(如每天20:00–22:00)的延迟均值与标准差,设告警阈值为 mean + 2.5σ
- 金融类业务在交易峰值期,可临时放宽延迟容忍度(如从5秒→8秒),但同步收紧Oplog时长下限(如从2小时→1.5小时)
- 监控平台支持STL时间序列分解的,优先启用,自动剥离周期性与趋势项,专注识别残差异常
分层判定,不同层级用不同严苛度
实例、副本集、节点三层健康状态不能一刀切。主备切换决策应基于副本集整体一致性,而非单节点瞬时表现:
- 节点层:仅用于定位,如某从库CPU爆表,标记为“待隔离”,不直接触发切换
- 副本集层:作为切换决策主依据,要求多数派节点同时满足延迟+队列+Oplog三条件
- 实例层:主库自身不可达(Ping不通+端口探测失败+进程无响应)持续60秒,作为兜底强制切换条件










