温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何实现数据库Failover

发布时间:2026-09-01 09:28:15 来源:亿速云 阅读:101 作者:小樊 栏目:数据库

数据库 Failover(故障转移) 的核心目标是在主库(Primary)不可用时,自动或手动将流量切换到备用库(Standby),保证业务连续性。下面从 架构选型 → 实现方式 → 关键注意点 系统讲一下。


一、常见数据库 Failover 架构

1. 主从复制 + 自动切换

典型方案:

  • MySQL:MHA / Orchestrator / MySQL InnoDB Cluster
  • PostgreSQL:Patroni + etcd / repmgr
  • Oracle:Data Guard(Fast-Start Failover)
  • SQL Server:AlwaysOn Availability Groups

结构:

主库  →  从库(同步/异步)
        ↑
    Failover 管理器

2. 共享存储 Failover(Active/Passive)

  • 两台数据库服务器
  • 共享存储(SAN / NAS)
  • 一台宕机,另一台挂载存储启动

✅ 数据零丢失
❌ 存储单点风险


3. 分布式数据库(原生高可用)

  • TiDB
  • CockroachDB
  • PolarDB / Aurora

✅ 节点故障自动恢复
❌ 架构复杂、成本高


二、Failover 实现方式

1️⃣ 自动 Failover(推荐)

核心组件:

  • 健康检查(心跳)
  • 选主机制(Quorum)
  • VIP / DNS / Proxy 切换

示例(Patroni):

raft:
  retry_timeout: 10s
  • 主库宕机
  • etcd 选新主
  • HAProxy 自动路由

2️⃣ 手动 Failover

适用于:

  • 数据一致性要求极高
  • 不允许自动切换误判

步骤:

  1. 确认主库真的不可用
  2. 提升从库为主库
  3. 修改应用连接配置 / DNS

三、Failover 关键机制

✅ 1. 脑裂(Split-Brain)防护

  • 使用 奇数节点仲裁(etcd / ZooKeeper)
  • 网络隔离时,少数派自动降级

✅ 2. 数据一致性

  • 同步复制:零丢失,但性能低
  • 异步复制:高性能,可能丢少量数据

金融场景:同步半复制(Semi-Sync)


✅ 3. 应用层无感知

方式:

  • VIP(虚拟 IP)
  • 数据库中间件(ProxySQL / MyCat)
  • Kubernetes Service

✅ 4. 故障恢复(Rejoin)

  • 原主库恢复后:
    • 作为新从库重新加入
    • 或人工确认后再上线

四、典型 Failover 流程(自动)

1. 健康检查失败
2. 仲裁确认主库不可用
3. 提升最新从库为主库
4. 切换 VIP / DNS
5. 应用继续写入
6. 原主库恢复后重建复制

五、实施建议

✅ 一定要做:

  • 定期 Failover 演练
  • 监控复制延迟
  • 设置合理超时时间

❌ 避免:

  • 纯脚本 Ping 判断主库
  • DNS TTL 过长
  • 无仲裁机制

六、如果你告诉我:

  • 使用的数据库(MySQL / PG / Oracle)
  • 部署环境(物理机 / 云 / K8s)
  • 是否能接受数据丢失

我可以给你一套可直接落地的 Failover 方案 + 配置示例

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI