主题
故障与自动切换
在代理场景中,上游服务器可能出现故障或不可用。
Pingora 提供 自动故障检测与切换机制,确保服务稳定性。
故障检测
Pingora 会监控上游连接状态:
- 请求失败或超时
- TCP/TLS 连接断开
- HTTP 错误响应(如 5xx)
出现上述情况时,Peer 会将该上游标记为不可用。
自动切换(Failover)
当上游不可用时:
- Pingora 会自动选择其他可用上游进行请求转发
- 可配置重试次数和回退策略
- 失败连接会被短暂隔离,避免频繁尝试
配置示例
yaml
proxy:
upstreams:
- name: backend
servers:
- "127.0.0.1:8000"
- "127.0.0.1:8001"
max_connections: 50
retry_policy:
retries: 3
backoff: 100ms
retries
:失败重试次数backoff
:重试间隔,防止瞬间过载
高可用策略
- 多上游备份:至少配置两个或以上上游
- 动态权重:根据响应速度动态调整负载分配
- 健康检查:定期检测上游状态,自动恢复已标记不可用的服务器
编程示例
rust
fn handle_request(req: &Request, ctx: &mut Context) -> Result<Response, Error> {
let peer = Peer::select("backend")?;
match peer.send_request(req) {
Ok(resp) => Ok(resp),
Err(err) => {
error!("请求上游失败: {:?}", err);
// 尝试切换到备用上游
let backup_peer = Peer::select_backup("backend")?;
backup_peer.send_request(req)
}
}
}
通过合理配置故障检测和自动切换,Pingora 能够在上游服务器出现故障时继续提供服务,提高代理系统的可用性和稳定性。