本文目录导读:

- 方案一:基于共享存储的双机热备(Active-Passive 模式)
- 方案二:基于主从复制/镜像的双机热备(Active-Active 或 Active-Passive 无共享)
- 方案三:基于应用层/中间件的双活(Active-Active 真双活)
- 关键落地注意事项(避坑指南)
- 总结建议
双机热备的“落地”配置,核心在于根据业务的重要性(RPO/RTO指标)以及预算,选择合适的架构并进行正确的系统配置。
“落地”通常指从理论到实际可操作、可用于生产环境的完整部署过程,主要包含以下几种主流方案的配置步骤:
基于共享存储的双机热备(Active-Passive 模式)
适用场景: 数据库(Oracle RAC除外)、企业核心应用(ERP、MES)、文件服务器,对数据一致性要求极高。
核心原理: 两台服务器通过光纤/SCSI/iSCSI连接同一台存储(如磁盘阵列),一台为主节点(Active),挂载存储并提供服务;另一台为备节点(Passive),监听主节点心跳,主节点故障时,备节点接管存储和IP,继续服务。
配置落地步骤:
-
硬件与网络规划
- 两台服务器(同配置最佳),安装相同操作系统(如Windows Server / Linux)。
- 心跳网络: 两根交叉网线直连两台服务器(独立网卡,必须冗余),用于检测对方是否存活。
- 业务网络: 连接到交换机,用于对外提供服务(需配置虚拟浮动IP)。
- 存储网络: 服务器HBA卡/网卡连接至共享磁盘阵列。
-
存储配置
- 在磁盘阵列上将LUN(逻辑单元号)同时映射给两台服务器。
- 关键点:两台服务器能看到同一个物理磁盘,但同一时间只能有一台服务器写入(由集群软件仲裁)。
-
操作系统配置(以Windows Server故障转移集群为例)
- 在两台服务器上安装故障转移集群功能。
- 验证磁盘是否为基本磁盘(非动态磁盘),并分配相同的盘符(如F:)。
- 配置MSDTC(分布式事务协调器)(如需数据库集群)。
-
集群软件安装与配置
- Windows: 通过“故障转移群集管理器”创建集群,添加节点,验证配置,添加共享磁盘和IP地址。
- Linux(使用RHCS/ Pacemaker):
# 禁用并屏蔽防火墙和selinux # 安装包:pcs, corosync, pacemaker, fence-agents-all # 配置主机名解析(/etc/hosts) # 设置hacluster用户密码 pcs cluster auth node1 node2 -u hacluster pcs cluster setup --name cluster_name node1 node2 --start --enable pcs property set stonith-enabled=false # 生产环境必须开启fence机制 # 添加资源(VIP, 文件系统, 服务) pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s pcs resource create SharedFS ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/mnt/shared fstype=ext4 op monitor interval=20s
-
应用层配置
- 将应用的数据目录指向共享存储的盘符/挂载点。
- 将应用的连接地址配置为虚拟IP(如192.168.1.100)。
-
数据同步机制
- 生产机写入的数据实时写入共享存储,备机通过集群软件挂载后可直接读取(无同步延迟,但依赖存储)。
基于主从复制/镜像的双机热备(Active-Active 或 Active-Passive 无共享)
适用场景: 对存储成本敏感、可接受毫秒级延迟的数据中心级应用(如MySQL主从、PGSQL流复制、Redis哨兵、Keeplived+HAProxy)。
核心原理: 两台服务器各有独立存储,通过网络实时复制数据,备机不占用共享存储,故障后切换速度较大方案慢。
配置落地步骤(以 MySQL 主从复制 + Keepalived 为例):
- 基础环境
- 两台服务器(A:192.168.1.10,B:192.168.1.20),虚拟IP:192.168.1.100。
- 安装MySQL 8.0并初始化。
- MySQL主从复制配置
- 主库(A): 在my.cnf中开启
log-bin,创建复制用户(CREATE USER 'repl'@'%' IDENTIFIED BY '...'; GRANT REPLICATION SLAVE ON *.* TO ...;)。 - 从库(B): 配置
server-id(不同于主库),执行CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='...'; START SLAVE; - 验证:
SHOW SLAVE STATUS\G确保Slave_IO_Running和Slave_SQL_Running均为Yes。
- 主库(A): 在my.cnf中开启
- Keepalived配置(负责IP漂移)
- 在主备两台机器上安装
keepalived。 - 主节点配置 (
/etc/keepalived/keepalived.conf):vrrp_script chk_mysql { script "/usr/local/bin/mysql -u root -e 'select 1' &>/dev/null" # 检查mysql是否存活 interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 # 主比备高 advert_int 1 virtual_ipaddress { 192.168.1.100/24 dev eth0 } track_script { chk_mysql } } - 备节点配置:
state BACKUPpriority 100- 其余相同。
- 在主备两台机器上安装
- 故障切换流程
- 主库MySQL宕机 -> Keepalived检测脚本失败 -> 移除主节点权重 -> VIP漂移到备库 -> 应用连接VIP继续工作。
- 注意: 备库需要设置为
read_only=0(开启可写),生产需配合半同步复制或GTID确保数据不丢。
基于应用层/中间件的双活(Active-Active 真双活)
适用场景: Web服务、无状态API、负载均衡器(Nginx/Haproxy)、容器化应用(K8s)。
核心原理: 两台服务器同时提供服务,通过负载均衡设备(硬件F5/软件Nginx)将流量分发,数据层(如Redis集群、数据库分片)独立实现高可用。
配置落地步骤(以 Nginx + Tomcat/Java应用 为例):
- 应用部署
- 两台服务器(Web1, Web2)各自部署Tomcat应用,代码包完全一致。
- 应用代码中的Session共享(使用Redis统一存储)。
- 静态资源部署到NFS(网络文件系统)或对象存储(OSS)。
- Nginx配置(反向代理+负载均衡)
- 在第三台机器(或使用Keepalived+VIP)上配置Nginx主备(或使用Keepalived做高可用)。
upstream tomcat_backend { # 定义后端服务器池 server 192.168.1.11:8080 weight=5 max_fails=2 fail_timeout=30s; server 192.168.1.12:8080 weight=5 max_fails=2 fail_timeout=30s; } server { listen 80; server_name yourdomain.com; location / { proxy_pass http://tomcat_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
- 在第三台机器(或使用Keepalived+VIP)上配置Nginx主备(或使用Keepalived做高可用)。
- 健康检查
- 配置Nginx的
proxy_next_upstream让Nginx自动踢掉故障的后端节点。
- 配置Nginx的
- 故障切换特点
- 优点: 两台机器都在跑,各承担50%流量,一台挂了流量全部切向另一台(业务零中断)。
- 难点: 需保证两层(应用服务器+数据库或缓存服务器)都有HA机制。
关键落地注意事项(避坑指南)
- 脑裂问题(Split-Brain): 是双机热备最严重的故障。
- 现象: 心跳线断了,两台机器都以为对方挂了,同时接管资源(都写存储、都抢VIP),导致数据损坏。
- 解决方案: 必须配置Fence(隔离)机制,IPMI电源控制、SAN存储锁、STONITH(当检测到对方未响应时,直接通过IPMI/BMC重启或断电对方的电源)。
- 切换时间:
- 共享存储方案(最快):秒级。
- 主从复制方案(中等):10-30秒(需等待DNS刷新或Keepalived切换)。
- 应用层双活方案(最快):毫秒级(前提是数据库也要HA)。
- 数据一致性:
- 方案一(共享存储)最安全。
- 方案二(主从复制)在异步模式下存在丢数据风险(如MySQL半同步/全同步可解决)。
- 方案三(应用双活)要求应用本身无状态或能容忍最终一致性。
- 测试验证:
- 拔网线测试: 分别拔掉心跳线、业务线,观察是否发生脑裂及VIP是否正确漂移。
- 杀进程测试: 直接
kill -9核心服务进程,观察接管逻辑是否触发。 - 压力测试: 在业务高负载下进行切换,监控是否导致连接风暴。
- 管理复杂性:
- 双机不等于高枕无忧,需要准备三机(仲裁节点)来解决极端情况下的投票问题(如Pacemaker + Corosync)。
总结建议
最稳定且通用的双机热备落地配置是:共享存储(如NFS/SAN)+ 集群软件(如Pacemaker/Windows Cluster)+ 应用层Keepalived,如果你的业务数据量小或对实时性要求极高(如银行),建议走RGDO(远程同步数据)或同城双活(纯硬件层面),对于初创或小团队,普通双机热备(方案一或二) + 定期演练 是最快见效的“落地”方式。