双机热备如何配置落地

wen 网络安全 36

从理论到实践的完整指南

📖 目录导读

  1. 双机热备的核心概念与价值
  2. 配置前的准备工作与架构选型
  3. 双机热备落地配置步骤详解
  4. 常见配置陷阱与故障处理
  5. FAQ:双机热备高频问题解答

双机热备的核心概念与价值

双机热备(Active-Standby HA)是确保业务连续性的关键方案,通过主备两台服务器实时同步数据,当主服务器宕机时,备用机自动接管服务。核心价值体现在:消除单点故障、实现99.99%+可用性、运维窗口零中断。

双机热备如何配置落地

适用场景

  • 数据库核心业务(如MySQL、Oracle)
  • Web服务、API网关
  • 文件存储与NFS/Samba共享
  • 虚拟化与容器集群

误区提醒:双机热备≠负载均衡,负载均衡是同时分担流量,热备是主备切换,两者可互补但不等同。


配置前的准备工作与架构选型

1 硬件与网络要求

  • 两台同配置服务器(CPU、内存、磁盘尽量一致)
  • 心跳网络:建议使用独立物理网卡或交叉网线,避免业务网络断裂影响判断
  • 共享存储:推荐SAN/NAS或分布式块存储(如Ceph)

2 软件选型对比

方案类型 代表软件 适用场景 成本
操作系统层 Keepalived + HAProxy Web服务负载 免费
数据库层 MySQL InnoDB Cluster 数据库高可用 开源
虚拟化层 VMware HA 虚拟机集群 商业
容器层 Kubernetes + etcd 微服务架构 开源

推荐组合:对于中小企业,Keepalived + Nginx + MySQL双主是最低成本的通用方案。


双机热备落地配置步骤详解

以下以 Keepalived(VIP漂移)+ Nginx Web服务 + MySQL双主同步 为例,演示完整配置流程。

1 基础环境配置

# 两台服务器均需操作
sudo apt update && sudo apt install keepalived nginx mysql-server
sudo systemctl enable keepalived nginx mysql

网络规划

  • 主服务器(p3001):eth0 192.168.1.10,eth1(心跳) 10.0.0.1
  • 备服务器(p3002):eth0 192.168.1.11,eth1(心跳) 10.0.0.2
  • VIP(虚拟IP):192.168.1.100

2 Keepalived核心配置

主节点(p3001) /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.100/24 dev eth0
    }
    track_script {
        chk_nginx
    }
}

备节点(p3002):将 state 改为 BACKUPpriority 改为 90。

监控脚本 /etc/keepalived/chk_nginx.sh

#!/bin/bash
if systemctl is-active nginx > /dev/null 2>&1; then
    exit 0
else
    exit 1
fi

注意:脚本添加执行权限 chmod +x /etc/keepalived/chk_nginx.sh

3 MySQL双主同步配置

主备机各编辑 /etc/mysql/mysql.conf.d/mysqld.cnf

# 主节点
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_db
auto_increment_increment = 2
auto_increment_offset = 1
# 备节点
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_db
auto_increment_increment = 2
auto_increment_offset = 2

创建同步用户(在主备各执行一次):

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

设置同步关系(主备互为主从):

-- 在p3001上指向p3002
CHANGE MASTER TO MASTER_HOST='192.168.1.11', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
START SLAVE;
-- 在p3002上指向p3001
CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
START SLAVE;

检查 SHOW SLAVE STATUS\GSlave_IO_RunningSlave_SQL_Running 均为 Yes 即成功。

4 Nginx故障切换验证

配置Nginx监控HTML页面,当主节点Nginx停止时,Keepalived自动将VIP漂移到备节点,用户访问 http://192.168.1.100 无感知。

验证步骤

  1. 客户机 ping VIP(持续ping)
  2. 在主节点 systemctl stop nginx
  3. 观察:
    • Keepalived日志自动切换到备机
    • VIP在两秒内漂移
    • 客户机ping中断不超过2个包

常见配置陷阱与故障处理

1 脑裂问题

现象:两台服务器同时持有VIP,导致数据冲突。 解决方案

  • 配置 多心跳网络(两条物理链路)
  • 使用 STONITH(杀死故障节点) 机制
  • 检测到脑裂时自动降级

2 数据同步延迟

现象:主节点故障后,备节点数据落后数秒。 解决方案

  • MySQL启用 半同步复制rpl_semi_sync_master_enabled=1
  • 监控 Seconds_Behind_Master 指标并告警

3 配置错误导致切换失败

排查命令工具

# 检查Keepalived状态
systemctl status keepalived
journalctl -u keepalived -n 50
# 检查MySQL同步
mysql -e "SHOW SLAVE STATUS\G" | grep -E "Running|Error"
# 检查VIP归属
ip addr show eth0 | grep 192.168.1.100

FAQ:双机热备高频问题解答

Q1:双机热备需要多大带宽?

心跳网络建议至少100Mbps,数据同步网络取决于业务量,MySQL复制每秒同步通常在1-5MB以内,千兆网卡足够。

Q2:两台服务器硬件配置必须要一致吗?

不一致会导致切换后性能瓶颈,但可以运行。强烈建议同步,尤其是磁盘I/O性能,否则备机无法承载主机的写入负载。

Q3:可以在云服务器上配双机热备吗?

可以,使用云厂商的浮动IP或内网VIP,注意需购买两个同区域同配置的实例,且内网互通,部分云厂商提供原生HA服务(如阿里云SLB + RDS高可用),但成本较高。

Q4:切换时间通常多长?

正常情况下:Keepalived 1-3秒检测心跳超时+VIP漂移,MySQL主动切换约5-10秒(包含连接池刷新),总感知时间可控制在10秒内。

Q5:如何测试双机热备的可靠性?

逐步进行:

  1. 拔掉主节点网线(网络层面的故障)
  2. 关闭主节点电源(物理级故障)
  3. 杀掉关键进程(软件级故障)
  4. 模拟磁盘满、内存OOM

落地关键点

  • ✅ 优先测试心跳网络独立性
  • ✅ 必须设置监控脚本,连Nginx挂了也要切
  • ✅ MySQL同步必须监控延迟与错误
  • ✅ 定期人工切换演练(建议每月一次)
  • ✅ 记录切换日志并优化切换耗时

双机热备不是“装好就无忧”,而是持续运维的起点,只有通过严格的配置、测试与监控,才能真正实现业务“无感知重启”。

抱歉,评论功能暂时关闭!