温馨提示×

怎样在Linux Overlay中实现负载均衡

小樊
35
2025-12-08 00:07:31
栏目: 云计算

在 Linux Overlay 网络中实现负载均衡

一、概念澄清与总体思路

  • Overlay 网络是在现有物理网络上叠加的虚拟网络,常见技术包括 VXLAN、NVGRE、Geneve,用于跨主机容器互联;而 OverlayFS 是联合文件系统,和网络无关,不能直接做负载均衡。实现思路通常是:先用容器/编排系统建立 Overlay 网络,再用 HAProxy/Nginx/LVS 或编排平台内置的 Service/Ingress 做流量分发,并通过 Keepalived 提供 VIP 高可用与健康检查。

二、方案一 Docker Swarm 内置路由网格

  • 适用场景:多主机 Docker 环境,快速发布无状态服务。
  • 步骤要点:
    1. 初始化 Swarm 并创建可附加的 Overlay 网络
      docker swarm init
      docker network create --driver overlay --attachable my-overlay
    2. 发布带副本的服务并接入 Overlay
      docker service create --name web --replicas 3 --network my-overlay nginx
    3. 访问方式:任意节点访问 PublishedPort(Swarm 内置路由网格会将端口发布到所有节点),即可在后端副本间负载均衡。
  • 说明:Swarm 的“路由网格”会在集群内自动做 L4 转发与分发,无需额外负载均衡器;如需外部 VIP,可在前面叠加 HAProxy/Keepalived

三、方案二 手动部署 HAProxy/Nginx + Keepalived

  • 适用场景:需要自定义调度策略、灰度发布、TLS 终止、WAF/限流等高级能力。
  • 步骤要点:
    1. 在 Overlay 中运行多个后端实例
      docker run -d --name backend1 --network my-overlay nginx
      docker run -d --name backend2 --network my-overlay nginx
    2. 在独立节点部署 HAProxy(示例为轮询)
      global
      log /dev/log local0
      log /dev/log local1 notice
      daemon
      defaults
      log global
      mode http
      option httplog
      timeout connect 5000ms
      timeout client 50000ms
      timeout server 50000ms
      frontend http_in
      bind *:80
      default_backend web_back
      backend web_back
      balance roundrobin
      server s1 backend1:80 check
      server s2 backend2:80 check
    3. 为 HAProxy 节点配置 Keepalived VIP(示例)
      vrrp_instance VI_1 {
      state MASTER
      interface eth0
      virtual_router_id 51
      priority 100
      advert_int 1
      authentication { auth_type PASS; auth_pass 1234 }
      virtual_ipaddress { 192.168.1.100/24 }
      }
    4. 外部通过 VIP:80 访问,流量经 HAProxy 分发到 Overlay 后端。
  • 说明:Nginx 亦可替代 HAProxy 作为七层负载均衡器;Keepalived 提供 VIP 漂移健康检查,提升可用性。

四、方案三 基于 OVS 的 Overlay 与 LVS 结合

  • 适用场景:需要内核级转发、超高性能或精细流量控制的场景。
  • 步骤要点:
    1. 安装并启动 Open vSwitch
      yum install -y openvswitch
      systemctl start openvswitch && systemctl enable openvswitch
    2. 创建 OVS 网桥并配置 Overlay 隧道/端口(具体 VXLAN/Geneve 参数依网络规划而定)。
    3. 在 OVS 网桥上接入后端容器网络命名空间或接入到承载 Overlay 的节点网络。
    4. 使用 LVS(IPVS)+ Keepalived 做四层负载均衡与高可用(VIP 绑定在 OVS 网桥/节点上)。
  • 说明:该路径更偏底层,适合对 吞吐、时延 有严格要求的场景。

五、关键配置与运维要点

  • 基础网络与安全
    • 开启转发:sysctl -w net.ipv4.ip_forward=1
    • 允许 Overlay 封装与转发流量(示例为 VXLAN 接口与物理口):
      iptables -A INPUT -i vxlan+ -j ACCEPT
      iptables -A FORWARD -i vxlan+ -o vxlan+ -m state --state RELATED,ESTABLISHED -j ACCEPT
      iptables -A FORWARD -i vxlan+ -o eth0 -j ACCEPT
      iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
  • 健康检查与服务发现
    • 负载均衡器侧开启 主动/被动健康检查(如 HTTP/ TCP 检查),自动摘除异常实例。
    • 结合 Consul/Etcd 或编排平台内置服务发现,动态更新后端列表。
  • 监控与日志
    • 使用 Prometheus + Grafana 采集 HAProxy/Nginx/LVS/IPVS 指标与容器/Pod 指标,设置告警,便于快速定位异常。
  • 常见排错
    • 核查 Overlay 子网容器 IP 是否在同一网段且可互通。
    • 核查 Overlay 隧道/VXLAN/Geneve 端口(如 4789/UDP)与物理口策略放行。
    • 核查 VIP 绑定、ARP 通告与 路由表 是否正确;查看负载均衡器与后端日志。

0