✅ “最小双机热备方案”中的数据库为什么达不到高可用?
原因很简单:
在最小方案里,两台服务器虽然互相热备,但 数据库只会有一份数据副本,不会做实时同步,也不会在数据库层面实现自动切换。
换句话说:
你的 Web 服务可以热备(自动切换),
但你的数据库只有一个有效的数据源,并不具备数据库级别的故障切换能力。
我下面用图和例子让你更容易理解。
📌 最小方案结构(2 台服务器,每台都部署了数据库,但不做同步)
ServerA(主)
├─ Web
└─ Database (唯一数据源)
ServerB(备)
├─ Web
└─ Database (但不实时同步、不参与工作)
虽然 ServerB 上也装了数据库,但没有实时同步。
❌ 这种情况下的问题是什么?
❌ 情况 1:主机数据库坏了
- 数据库崩溃
- 数据库文件损坏
- 硬盘损坏
▶ 即使备机 Web 能接管,但它的数据库也是老数据,或者没数据
▶ 业务依然无法工作
所以数据库不具备高可用性。
❌ 情况 2:主机宕机,但备机数据库没有最新数据
ServerA(主)正在正常工作,数据库里不断写入数据:
例如:
- 客户下单
- 售后登记
- 代理商新建账号
- 入库/出库数据
如果突然宕机:
ServerA 宕机 → VIP 漂移到 ServerB → Web 接管成功
但是 ServerB 的数据库:
- 要么是空的
- 要么是旧备份
- 要么没有同步到最新数据
▶ Web 接管也没用,因为 数据库缺数据。
这就是“数据库不高可用”。
✔ 那么数据库怎样才叫高可用?
必须满足两个条件:
① 数据实时同步(至少主从同步)
例如:
- MySQL 主从(Semi-sync)
- MySQL InnoDB Cluster
- MariaDB Galera
- PostgreSQL Streaming Replication
② 当主库挂掉,备库能自动切换
才能叫数据库高可用(DB HA)。
🌟 最小方案为什么不具备数据库 HA?原因如下:
因为:
- 不部署主从/集群
- 不做数据库复制
- 不做自动切换
- 没有独立的数据库高可用组件(MGR/PXC/Patroni 等)
你得到的只是:
Web 服务是高可用的,
但数据库是“单点”(Single Point of Failure)。
🎯 总结成一句话:
两台服务器 + Keepalived 的最小方案里,
只有 Web 层能自动切换,数据库无法保持最新,也无法自动接管,
因此数据库“不具备高可用”。
如果你需要的 HA 等级是:
| 需求 | 所需服务器数 |
|---|---|
| 只需要 Web 热备(最小) | 2 台 |
| Web + 数据库双高可用 | 3 台起步 |
| 企业级高可用(LB + DB Cluster) | 5 台以上 |