定义
Failover(故障切换)指当主系统、主网络或主节点发生故障时,自动或半自动切换至备用资源,以保障服务连续性与可用性。在 ICMP 中,Failover 涵盖 Carrier Fallback 运营商切换、Region Failover 区域容灾等,是保障 7×24 服务可用性的核心能力。
切换层级
Failover 可在多个层级实现:连接层——Carrier Fallback,主网不可用时切换至备用运营商;平台层——Region Failover,主区域故障时切换至备用区域;组件层——数据库主从、API 多实例、负载均衡健康检查。各层级可组合使用,形成多层冗余。切换可自动触发(基于健康检查、超时)或人工触发。
切换策略
Failover 策略需明确:触发条件(故障检测方式、阈值);切换顺序与优先级;RTO(恢复时间目标)、RPO(恢复点目标);是否自动回切、回切条件。跨境场景下,Region Failover 需考虑 Data Residency,确保备用区域满足合规要求;Carrier Fallback 需考虑 Geo-Based Pricing,避免切换至高资费网络。
在 ICMP 中的实践
达希物联 ICMP 采用 Multi-Region、Geo-Distributed 架构,支持 Region Failover;连接层支持 Carrier Fallback、Multi-Operator 冗余。平台通过健康检查、心跳、监控告警实现故障发现,通过 DNS、负载均衡、策略下发实现切换,保障客户业务连续性。
切换时移动的是哪一层资源
故障切换是一个统称,动作发生在哪一层,结果完全不同。连接层切换的是设备附着的运营商;平台层切换的是服务所在区域;组件层切换的是数据库主副本、接口实例或队列。上层失败不一定要触发下层切换。区域接口不可用时,让现场的卡改换运营商,设备侧网络可能恢复,客户系统仍调用不到管理平台。只把数据库切到备库,设备附着的网络不会变化。
每一层都要有自己的备用对象和切换记录。连接层的备用是另一家可用运营商,平台层的备用是另一个已经部署同一服务的区域,组件层的备用是已经同步到约定位置的副本。没有备用对象的“自动切换”只会反复检测失败。切换之后,调用方要能发现新的入口,例如地址解析或负载分配指向新实例。发现不了,切换只在内部完成,外部仍把流量打到旧地址。
自动切换依赖的检测条件
自动切换依赖连续失败,而不是单次超时。健康检查要覆盖真正的业务路径:接口只检查进程还在,数据库已经不可写,检查会一直成功。阈值应包含次数或持续时间,并和业务超时分开,避免一次慢查询就迁走主库。检查点本身所在的网络若中断,不能把“检查方看不见”直接当成“服务已死”。最好从两个位置探测,再决定切换。
还要规定是否回切、回切前备用必须健康多久。连接层回切要遵守运营商回退的冷却时间,避免边界来回振荡。区域切换要确认备用区域的数据位置符合数据属地,不符合就只能停在只读或人工处置,不能自动把写入切过去。恢复时间目标和可以丢失的数据范围应事先写明,否则切换成功了,账务数据却停在不可接受的旧点上。人工切换要有权限和记录,防止误触把生产流量送进演练环境。
备用路径违反资费或属地约束
备用路径技术上通,不表示业务上可以用。备用运营商若按未签约的高价计费,自动切换会在故障期间产生一笔无法向客户解释的费用。备用区域若在约定属地之外,切换会把个人数据和详单写到错误的地方,故障结束后也难以把副本收回。组件层切到一份滞后太久的数据库,新的启用和暂停会覆盖旧数据,或者旧数据把新操作盖掉。
两边同时认为自己是主,会形成分裂写入。防止的办法是切换时有明确的主权交接,旧主在失去主权后拒绝写入。只改流量方向、不封锁旧主,恢复网络的那一刻两笔更新会冲突。健康检查过严,短暂抖动就切换,服务比不切换更不稳定。演练若使用生产入口且没有隔离,会把真实客户带到备用区域。切换记录要包含检测依据、旧资源、新资源和是否允许回切。事后核对这三层里到底动了哪一层,不要用一次区域切换的成功来解释设备仍附着在原运营商上的事实。
切换演练要事先声明动的是哪一层,以及什么信号算成功。连接层的成功是设备重新附着到备用运营商并能建立会话;区域层的成功是客户请求到达备用区域且写入仍落在允许的数据位置;组件层的成功是旧主不再接受写入、新主的数据点符合预期。三层用同一个“演练通过”打勾,会掩盖只测了进程存活的情况。演练结束后核对有没有残留的流量指向备用对象,有则切回并确认旧主已经恢复主权。没有复盘记录的演练,下次故障时没人知道该信哪一个检查项。