本文详细介绍了基于LVS DR模式与Keepalived的高可用负载均衡架构。核心原理包括VIP流量分发、ARP抑制机制和VRRP协议构建毫秒级故障转移。

一、核心原理与技术理论

LVS架构解析

  1. DR模式工作流程

    • 客户端请求发送到VIP

    • Director通过IPVS进行流量分发

    • 真实服务器直接响应客户端(不经过Director)

    • ARP抑制确保真实服务器不暴露MAC地址

  2. 关键组件协作

Keepalived高可用机制

  • VRRP协议实现主备心跳检测(默认端口112)

  • 优先级机制(priority值决定主备角色)

  • 毫秒级故障转移(VIP漂移+IPVS服务接管)

二、背景需求与实现目标

行业痛点

  1. 单点故障导致服务中断

  2. 硬件负载均衡设备成本高昂

  3. 突发流量冲击单机性能瓶颈

解决方案优势

  • 零成本:开源软件构建企业级高可用

  • 高性能:DR模式吞吐量可达10Gbps+

  • 无缝切换:故障转移用户无感知

  • 灵活扩展:支持动态添加后端服务器

三、详细部署步骤

1. 环境准备

角色要求
Director节点2台(主备配置相同)
Real Server≥2台(部署相同服务)
VIP与物理IP同网段

2. Director节点配置

  1. 安装必要软件:

    yum install keepalived ipvsadm -y
  2. 配置Keepalived:

    1. 编辑配置文件:vi /etc/keepalived/keepalived.conf

    2. 主节点配置:

      vrrp_instance VI_1 {
      state MASTER
      interface ens33
      virtual_router_id 51
      priority 150
      advert_int 1
      authentication {
      auth_type PASS
      auth_pass 1111
      }
      virtual_ipaddress {
      192.168.1.100  # VIP地址
      }
      }

      备份节点配置(差异部分):

      state BACKUP
      priority 100
  3. 配置LVS服务:

    virtual_server 192.168.1.100 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    protocol TCP
    real_server 192.168.1.20 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    }
    }
    real_server 192.168.1.21 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    }
    }
    }
  4. 启动服务:

    systemctl start keepalived
    systemctl enable keepalived

3. 真实服务器配置

  1. 配置ARP抑制:
    1. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  2. 绑定VIP到本地回环:
    1. ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 up
  3. 添加路由记录:
    1. route add -host 192.168.1.100 dev lo:0


四、典型问题排查指南

问题1:VIP无法访问

排查步骤

  1. 检查VIP绑定状态:

    1. ip addr show ens33
  2. 验证防火墙设置:

    1. firewall-cmd --list-ports
  3. 检查真实服务器ARP抑制:

    1. sysctl -a | grep arp_ignore
问题2:主备切换失败

解决方案

  1. 检查VRRP通信:

    1. tcpdump -i ens33 vrrp
  2. 确认配置一致性:

    1. virtual_router_id值

    2. 认证密码

    3. 网卡名称

问题3:真实服务器状态异常

处理流程

  1. 手动测试服务连通性:

    1. curl -I http://真实服务器IP
  2. 检查健康检查配置:

    1. connect_timeout值

    2. nb_get_retry重试次数

    3. 端口设置是否正确


五、实践总结与优化建议

核心价值验证

  • 支撑10万+QPS高并发场景

  • 故障切换时间<1秒

  • 硬件成本节约90%+

最佳实践总结

  1. 调度算法选择:

    • 小规模集群:轮询(rr)

    • 异构服务器:加权最小连接(wlc)

    • 会话保持:源地址哈希(sh)

  2. 安全加固措施:

    • vrrp_strict  # 启用VRRP安全模式
      enable_script_security
  3. 监控方案:

    • 实时流量统计:ipvsadm -Ln --stats

    • 存活状态检测:systemctl status keepalived

    • Prometheus监控集成

架构演进建议

  1. 容器化部署:将LVS+Keepalived打包为Docker镜像

  2. 多云部署:跨云厂商实现异地高可用

  3. 自动化扩缩容:根据流量自动增减Real Server

实战经验
在电商大促场景中,通过以下优化实现50万QPS:

  1. 调度算法从rr改为wlc

  2. 增加健康检查频率:delay_loop 1

  3. 开启内核参数:net.ipv4.vs.conn_reuse_mode=0

最终效果验证

[root@director ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.100:80 wlc
-> 192.168.1.20:80             Route   3      1256       8742
-> 192.168.1.21:80             Route   2      942        6218

posted @ 2025-07-29 19:48  yjbjingcha  阅读(28)  评论(0)    收藏  举报