双机热备如何配置落地

wen 开源项目 29

本文目录导读:

双机热备如何配置落地

  1. 方案一:基于共享存储的双机热备(Active-Passive 模式)
  2. 方案二:基于主从复制/镜像的双机热备(Active-Active 或 Active-Passive 无共享)
  3. 方案三:基于应用层/中间件的双活(Active-Active 真双活)
  4. 关键落地注意事项(避坑指南)
  5. 总结建议

双机热备的“落地”配置,核心在于根据业务的重要性(RPO/RTO指标)以及预算,选择合适的架构并进行正确的系统配置。

“落地”通常指从理论到实际可操作、可用于生产环境的完整部署过程,主要包含以下几种主流方案的配置步骤:

基于共享存储的双机热备(Active-Passive 模式)

适用场景: 数据库(Oracle RAC除外)、企业核心应用(ERP、MES)、文件服务器,对数据一致性要求极高。

核心原理: 两台服务器通过光纤/SCSI/iSCSI连接同一台存储(如磁盘阵列),一台为主节点(Active),挂载存储并提供服务;另一台为备节点(Passive),监听主节点心跳,主节点故障时,备节点接管存储和IP,继续服务。

配置落地步骤:

  1. 硬件与网络规划

    • 两台服务器(同配置最佳),安装相同操作系统(如Windows Server / Linux)。
    • 心跳网络: 两根交叉网线直连两台服务器(独立网卡,必须冗余),用于检测对方是否存活。
    • 业务网络: 连接到交换机,用于对外提供服务(需配置虚拟浮动IP)。
    • 存储网络: 服务器HBA卡/网卡连接至共享磁盘阵列。
  2. 存储配置

    • 在磁盘阵列上将LUN(逻辑单元号)同时映射给两台服务器。
    • 关键点:两台服务器能看到同一个物理磁盘,但同一时间只能有一台服务器写入(由集群软件仲裁)。
  3. 操作系统配置(以Windows Server故障转移集群为例)

    • 在两台服务器上安装故障转移集群功能。
    • 验证磁盘是否为基本磁盘(非动态磁盘),并分配相同的盘符(如F:)。
    • 配置MSDTC(分布式事务协调器)(如需数据库集群)。
  4. 集群软件安装与配置

    • 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
  5. 应用层配置

    • 将应用的数据目录指向共享存储的盘符/挂载点。
    • 将应用的连接地址配置为虚拟IP(如192.168.1.100)。
  6. 数据同步机制

    • 生产机写入的数据实时写入共享存储,备机通过集群软件挂载后可直接读取(无同步延迟,但依赖存储)。

基于主从复制/镜像的双机热备(Active-Active 或 Active-Passive 无共享)

适用场景: 对存储成本敏感、可接受毫秒级延迟的数据中心级应用(如MySQL主从、PGSQL流复制、Redis哨兵、Keeplived+HAProxy)。

核心原理: 两台服务器各有独立存储,通过网络实时复制数据,备机不占用共享存储,故障后切换速度较大方案慢。

配置落地步骤(以 MySQL 主从复制 + Keepalived 为例):

  1. 基础环境
    • 两台服务器(A:192.168.1.10,B:192.168.1.20),虚拟IP:192.168.1.100。
    • 安装MySQL 8.0并初始化。
  2. 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_RunningSlave_SQL_Running 均为Yes。
  3. 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 BACKUP
      • priority 100
      • 其余相同。
  4. 故障切换流程
    • 主库MySQL宕机 -> Keepalived检测脚本失败 -> 移除主节点权重 -> VIP漂移到备库 -> 应用连接VIP继续工作。
    • 注意: 备库需要设置为read_only=0(开启可写),生产需配合半同步复制GTID确保数据不丢。

基于应用层/中间件的双活(Active-Active 真双活)

适用场景: Web服务、无状态API、负载均衡器(Nginx/Haproxy)、容器化应用(K8s)。

核心原理: 两台服务器同时提供服务,通过负载均衡设备(硬件F5/软件Nginx)将流量分发,数据层(如Redis集群、数据库分片)独立实现高可用。

配置落地步骤(以 Nginx + Tomcat/Java应用 为例):

  1. 应用部署
    • 两台服务器(Web1, Web2)各自部署Tomcat应用,代码包完全一致。
    • 应用代码中的Session共享(使用Redis统一存储)。
    • 静态资源部署到NFS(网络文件系统)或对象存储(OSS)。
  2. 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;
      }
      }
  3. 健康检查
    • 配置Nginx的proxy_next_upstream让Nginx自动踢掉故障的后端节点。
  4. 故障切换特点
    • 优点: 两台机器都在跑,各承担50%流量,一台挂了流量全部切向另一台(业务零中断)。
    • 难点: 需保证两层(应用服务器+数据库或缓存服务器)都有HA机制。

关键落地注意事项(避坑指南)

  1. 脑裂问题(Split-Brain): 是双机热备最严重的故障。
    • 现象: 心跳线断了,两台机器都以为对方挂了,同时接管资源(都写存储、都抢VIP),导致数据损坏。
    • 解决方案: 必须配置Fence(隔离)机制,IPMI电源控制、SAN存储锁、STONITH(当检测到对方未响应时,直接通过IPMI/BMC重启或断电对方的电源)。
  2. 切换时间:
    • 共享存储方案(最快):秒级。
    • 主从复制方案(中等):10-30秒(需等待DNS刷新或Keepalived切换)。
    • 应用层双活方案(最快):毫秒级(前提是数据库也要HA)。
  3. 数据一致性:
    • 方案一(共享存储)最安全。
    • 方案二(主从复制)在异步模式下存在丢数据风险(如MySQL半同步/全同步可解决)。
    • 方案三(应用双活)要求应用本身无状态或能容忍最终一致性。
  4. 测试验证:
    • 拔网线测试: 分别拔掉心跳线、业务线,观察是否发生脑裂及VIP是否正确漂移。
    • 杀进程测试: 直接kill -9核心服务进程,观察接管逻辑是否触发。
    • 压力测试: 在业务高负载下进行切换,监控是否导致连接风暴。
  5. 管理复杂性:
    • 双机不等于高枕无忧,需要准备三机(仲裁节点)来解决极端情况下的投票问题(如Pacemaker + Corosync)。

总结建议

最稳定且通用的双机热备落地配置是:共享存储(如NFS/SAN)+ 集群软件(如Pacemaker/Windows Cluster)+ 应用层Keepalived,如果你的业务数据量小或对实时性要求极高(如银行),建议走RGDO(远程同步数据)或同城双活(纯硬件层面),对于初创或小团队,普通双机热备(方案一或二) + 定期演练 是最快见效的“落地”方式。

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