温馨提示×

CentOS域名如何实现负载均衡

小樊
45
2025-12-17 10:06:00
栏目: 云计算

在 CentOS 上,通常通过“域名解析 + 负载均衡器”来实现按域名分发流量。常见做法是将域名解析到一台或多台负载均衡器(如 Nginx/HAProxy),由负载均衡器将请求转发到后端应用服务器;若需要更高可用,可在负载均衡器前再加一层 LVS+Keepalived 的 VIP。也可使用 DNS 轮询做简单分发,但其故障切换和健康检查能力较弱,适合作为补充手段。

方案一 反向代理负载均衡 Nginx 或 HAProxy

  • 思路:将域名解析到负载均衡器的 VIP 或公网 IP,在负载均衡器上配置 upstream/backend 指向多台后端应用服务器,实现轮询、加权、最少连接或基于源 IP/URI 的调度。
  • 快速示例
    • Nginx(/etc/nginx/conf.d/lb.conf)
      upstream backend {
          server 10.0.0.11:80 weight=3;
          server 10.0.0.12:80;
          server 10.0.0.13:80;
          # 可按需改为 least_conn; ip_hash; 等
      }
      server {
          listen 80;
          server_name www.example.com;
          location / {
              proxy_pass http://backend;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      
      校验并重载:
      nginx -t && systemctl reload nginx
      
    • HAProxy(/etc/haproxy/haproxy.cfg 片段)
      frontend http-in
          bind *:80
          default_backend app_servers
      backend app_servers
          balance roundrobin
          server web1 10.0.0.11:80 check
          server web2 10.0.0.12:80 check
          server web3 10.0.0.13:80 check
      
      校验并重载:
      haproxy -c -f /etc/haproxy/haproxy.cfg && systemctl reload haproxy
      
  • 要点:为应用开启健康检查和失败重试;需要会话保持时可用 ip_hash(Nginx)或 cookie 插入(HAProxy);对外域名统一解析到负载均衡器入口。

方案二 高可用部署 LVS + Keepalived

  • 思路:使用 **LVS(IPVS)**做四层转发,配合 Keepalived 管理 VIP 与故障切换,实现双机或多机热备;适合大流量、对稳定性要求高的场景。
  • 快速示例
    • 在两台均衡器上安装组件并启用转发:
      yum install -y ipvsadm keepalived
      echo 1 > /proc/sys/net/ipv4/ip_forward
      
    • Keepalived 主备配置(/etc/keepalived/keepalived.conf 片段)
      vrrp_instance VI_1 {
          state MASTER            # 备机改为 BACKUP
          interface eth0           # 按实际网卡名
          virtual_router_id 51
          priority 100            # 备机设更低
          advert_int 1
          authentication { auth_type PASS; auth_pass 1234 }
          virtual_ipaddress { 192.168.2.254/24 }
      }
      virtual_server 192.168.2.254 80 {
          delay_loop 6
          lb_algo rr
          lb_kind NAT
          protocol TCP
          real_server 10.0.0.11 80 { weight 1; TCP_CHECK { connect_timeout 3; } }
          real_server 10.0.0.12 80 { weight 1; TCP_CHECK { connect_timeout 3; } }
      }
      
    • 启动与验证:
      systemctl enable --now keepalived
      ip a | grep 192.168.2.254   # 应只在 MASTER 上看到 VIP
      
  • 要点:VIP 对外暴露,域名解析到 VIP;后端服务器需开启服务并允许来自均衡器的流量;如需七层能力,可在 LVS 前再叠加 Nginx/HAProxy。

方案三 DNS 轮询与故障切换

  • 思路:在 DNS 中为同一域名配置多条 A 记录(轮询返回),或将解析指向内部 HAProxy/Nginx 集群;为提升可用性,客户端可配置多个 DNS 服务器,并在服务端用 BIND 主从dnsmasq 做解析与转发。
  • 示例与注意
    • 多条 A 记录实现简单轮询:
      www.example.com. IN A 203.0.113.11
      www.example.com. IN A 203.0.113.12
      
    • 客户端 /etc/resolv.conf 配置多个 DNS:
      nameserver 8.8.8.8
      nameserver 1.1.1.1
      
    • 服务端可用 dnsmasq 做本地解析与转发,或 BIND 搭建主从同步。
  • 限制:DNS 轮询不具备应用层健康检查,TTL 与客户端缓存会延迟故障切换;更适合作为入口层面的“粗粒度”负载或配合健康检查/就近解析使用。

域名解析与验证步骤

  • 将域名解析指向负载均衡器入口(如 CNAME 到 LB 域名,或直接 A 记录到 VIP),并确保健康检查路径(如 //health)返回 2xx/3xx
  • 在负载均衡器上配置后端池与健康检查,必要时开启 X-Forwarded-For/X-Real-IP 以传递真实客户端信息。
  • 验证
    • 解析是否正确:dig www.example.com +short
    • 连通与健康:curl -I http://www.example.com/health
    • 观察分发:在各后端放置不同内容页面,连续刷新或压测,核对命中分布与日志。
  • 防火墙与 SELinux:放行 80/443(及管理端口),必要时设置 SELinux 布尔值或策略以允许代理转发。

0