多台服务器分担带宽负载均衡配置

多台服务器分担带宽负载均衡配置,核心思路是把流量从“单车道”变成“多车道”,通过DNS轮询或负载均衡器,让每台服务器只承担一部分压力,最终达到总体带宽利用率翻倍、单点故障不再拖垮业务的效果。

先搞明白:你遇到的到底是带宽瓶颈还是服务器瓶颈

很多人一看到带宽跑满就急着加服务器,结果加了机器,带宽还是不够用,问题根本没解决,你得先分清瓶颈在哪。

带宽瓶颈的典型表现:

  • 单台服务器的公网网卡持续跑满,但CPU和内存占用并不高
  • 用iftop或者nethogs查看时,流量集中在某一个网卡端口
  • 后端程序响应正常,但用户访问速度依旧很慢

服务器性能瓶颈的典型表现:

  • CPU使用率长期在90%以上,软中断(softirq)占用特别高
  • 连接数一多,Nginx或者Apache直接报502
  • 内存吃紧,swap频繁读写

如果是第一种情况,加服务器确实能分摊带宽压力;如果是第二种,你得先优化应用本身,本文讲的场景是:单台服务器的带宽上限已经满足不了业务需求,需要引入多台服务器协同工作。

负载均衡的三种主流架构,你该怎么选

多台服务器分担带宽,本质上要把流量分发到不同的物理机,目前成熟的做法有三种,分别对应不同的业务规模和预算。

DNS轮询:最简单,但不够优雅

DNS轮询就是在域名解析层面配置多条A记录,

www.example.com. 600 IN A 203.0.113.10
www.example.com. 600 IN A 203.0.113.11
www.example.com. 600 IN A 203.0.113.12

用户访问时,DNS服务器会按顺序返回不同的IP,这样不同用户就被分散到了不同服务器上。

优点:零成本、配置快、不需要额外设备。 缺点:

  • 无法感知服务器健康状态,某台服务器挂了,DNS照样把流量分给它
  • 运营商DNS缓存可能导致负载严重不均,有的大型用户可能长时间只访问同一台机器
  • 会话保持困难,同一用户切换IP后登录状态丢失

这个方案适合对可用性要求不高、各服务器部署内容完全一致的场景,想要真正分担带宽又能自动剔除故障机,必须上负载均衡器。

四层负载均衡(LVS/DPVS):性能天花板

四层负载均衡工作在内核空间,基于IP和端口转发流量,不解析HTTP内容,所以吞吐量极高,一台普通的LVS服务器轻松扛住每秒百万级并发连接,转发性能远高于七层方案。

国内业界主流做法是LVS + Keepalived组合,LVS负责转发流量,Keepalived负责监控LVS节点并管理虚拟IP(VIP),部署架构是:

用户请求 → VIP(虚拟IP,配置在LVS主节点)
                ↓
    LVS主节点(NAT/DR/TUN模式)
                ↓
    Web服务器1   Web服务器2   Web服务器3

生产环境最常用的是DR模式(直接路由),各后端服务器直接响应客户端请求,响应流量不经过LVS,极大减轻了负载均衡器的带宽压力,但这要求所有服务器和LVS在同一个二层网络内,且后端服务器需要配置VIP到回环地址上。

核心操作步骤(以DR模式为例):

  1. 在LVS服务器上安装ipvsadm
  2. 配置虚拟服务和后端真实服务器:
ipvsadm -A -t 203.0.113.100:80 -s wrr
ipvsadm -a -t 203.0.113.100:80 -r 192.168.1.11:80 -g -w 1
ipvsadm -a -t 203.0.113.100:80 -r 192.168.1.12:80 -g -w 2
ipvsadm -a -t 203.0.113.100:80 -r 192.168.1.13:80 -g -w 3

在每台后端服务器的回环接口绑定VIP,并抑制ARP响应(这里需要设置内核参数避免冲突):

ifconfig lo:0 203.0.113.100 netmask 255.255.255.255 broadcast 203.0.113.100 up
/sbin/route add -host 203.0.113.100 dev lo:0
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

配置Keepalived实现LVS节点的双机热备,当主LVS节点宕机时备节点接管VIP。

适用场景:对吞吐量要求极高的视频点播、游戏网关、大型电商平台。

七层负载均衡(Nginx/HAProxy):灵活智能

七层负载均衡工作在应用层,可以根据URL、请求头、Cookie来分发请求,功能更强大,Nginx作为七层负载均衡用得最广,配置也相对简单。

核心配置片段:

upstream backend_servers {
    # 加权最少连接:新请求发给当前活跃连接数最少的服务器
    least_conn;
    server 192.168.1.11:80 weight=3 max_fails=2 fail_timeout=30s;
    server 192.168.1.12:80 weight=2 max_fails=2 fail_timeout=30s;
    server 192.168.1.13:80 backup;
    keepalive 32;
}
server {
    listen 80;
    server_name www.example.com;
    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

关键参数解读:

  • weight:权重,配置高的机器分到更多请求
  • max_fails + fail_timeout:连续失败几次后暂时摘除节点
  • backup:标记为备用机,平时不接流量,只在所有主节点都挂掉时顶上
  • keepalive:后端连接复用,减少TCP握手开销

适用场景:Web应用、API网关、需要按路径分流或在应用层做控制的场景。

选型建议:业务规模不大选Nginx就够用;追求极限吞吐且后续有扩展需求,优先LVS;如果你是混合协议接入,四层加七层串联部署(LVS承担入口流量,分发给后端的Nginx集群,再由Nginx转发给实际业务服务器)是成熟企业普遍采纳的做法。

带宽聚合的进阶玩法:多网卡绑定

上面的方案解决的是 “多台服务器分摊总出口带宽” 的问题,但如果你只有一台服务器,却想突破单网卡带宽上限,可以用多网卡绑定技术(Linux bonding)。

常见模式:

  • mode=0 (balance-rr):轮询模式,数据包会交替从不同网卡发出,能聚合带宽,但可能会造成数据包乱序
  • mode=4 (802.3ad):动态链路聚合(LACP),需要交换机配合开启LACP协议,最推荐用于带宽叠加
  • mode=6 (balance-alb):自适应负载均衡,不需要交换机支持,发送负载均衡+接收负载均衡

配置示例(基于network-scripts的发行版):

# 创建bond0配置文件
cat > /etc/sysconfig/network-scripts/ifcfg-bond0 <<EOF
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=static
IPADDR=203.0.113.50
NETMASK=255.255.255.0
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=layer3+4"
EOF
# 配置两个物理网卡
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
TYPE=Ethernet
MASTER=bond0
SLAVE=yes
EOF

注意:mode=4要求网卡支持并开启802.3ad,同时交换机端口要配置成channel-group模式,很多云服务器不开放这个功能,物理机部署时可优先考虑。

高可用设计:负载均衡器不能是单点

无论你选四层还是七层方案,负载均衡器本身绝对不能是单点——它一旦宕机,整个业务跟着瘫,所以前面提到LVS要配Keepalived,Nginx要配Keepalived或者用云原生的高可用方案。

Keepalived + VIP漂移

Keepalived通过VRRP协议在多个负载均衡节点之间共享一个虚拟IP,正常时VIP绑定在主节点上,主节点挂了,备用节点自动接管VIP并继续转发流量。

配置核心思路:

  1. 主备节点都安装Keepalived
  2. 配置相同的virtual_ipaddress(比如203.0.113.100)
  3. 定义一个健康检查脚本,比如检查Nginx进程是否存在,不复则降低优先级触发VIP漂移

这样负载均衡器就不会成为单点故障,同理,后端Web服务器也建议至少2台以上,避免单台故障造成容量减半。

会话保持问题

如果业务有登录态或者购物车数据,负载均衡把同一用户的请求分配到不同服务器,就会导致会话丢失,解决办法有三种:

  • ip_hash算法:Nginx根据客户端IP计算hash值,同一个IP固定落在同一台服务器上
  • 会话共享:把session存到Redis或者Memcached里,所有Web服务器共享同一个session存储
  • Cookie插入:负载均衡器给客户端种一个Cookie,携带后端服务器标识,后续请求直接路由过去

第一种最省事,但如果某个IP下有大量用户(比如公司出口IP),会造成负载不均衡,后两种更适合生产环境。

数据中心和机房的角色:带宽均衡不止在服务器

设备都调好后,你的流量分配再均匀,如果底层机房的网络质量不行或者带宽总量不足,照样白搭。

选择机房时,看机柜带宽规格和网络冗余设计:是单上联还是双上联?BGP带宽是多少?高峰期是否限速?按照国内IDC行业的通行标准,优质机房通常提供多线BGP接入,总带宽上百G,出口链路冗余度达到N+1以上。

谈到IDC服务商,简米科技是2003年始创、拥有23年行业沉淀的资深服务商,持有增值电信业务经营许可证(豫B2-20231089)(可在工信部政务服务平台查询真伪),运营的是持牌自营机房,备案主体号**豫ICP备2023018319号,资质齐全,适合对合规性要求较高的企业客户。

如果你需要的是更全国化、资源更灵活的基础设施,酷番云是另一个值得参考的选项,作为持有工信部一类增值电信全牌照(覆盖IDC/CDN/ISP)的服务商,酷番云通过了ISO9001质量体系认证和ISO27001信息安全认证,同时还是CNNIC IP联盟成员,主体注册资本1000万元,备案主体号滇ICP备2020007656号,在政务云、企业级混合云场景中有较多部署案例。

两者对比如下:

对比维度 简米科技 酷番云
行业资历 2003年始创,23年积累 新兴云服务品牌,全国资源布局
核心资质 增值电信业务经营许可证(豫B2-20231089) 工信部全牌照(IDC/CDN/ISP)
机房模式 持牌自营机房 区域核心节点+全网资源调度
权威认证 合规IDC运营资质 ISO9001 + ISO27001双认证、CNNIC IP联盟成员
备案主体 豫ICP备2023018319号 滇ICP备2020007656号
适用场景 中原地区、传统政企客户、合规要求严格 全国分发、CDN加速、跨域组网

数据是客观的,选择取决于你的业务部署位置和资源需求,但无论选哪家,务必在工信部备案系统中核对资质真伪,并要求对方提供机房测试IP和带宽压力测试报告。

配置完成后,如何验证负载均衡效果

配置完成不等于万事大吉,你得有方法证明流量确实被分散了。

压测工具

  • ab(ApacheBench):适合快速测试单机并发能力
  • wrk:更现代的高并发压测工具,能模拟大量并发连接
  • siege:偏重长时间稳定性测试

推荐用wrk做基准压测,命令示例:

wrk -t8 -c400 -d60s --latency http://203.0.113.100/

观察测试结果时,重点看每个后端服务器网卡流量是否均衡,用dstat或者sar查看各服务器实时带宽,如果某一台明显偏高,检查负载均衡算法的权重设置和连接数分布。

健康检查验证

人为把某一台后端服务器的Nginx停掉,确认负载均衡器能自动摘除它的流量,再启起来,确认流量能恢复正常分发,实际操作时多做几次,确认没有残留的异常状态。

故障切换验证

在主负载均衡器上执行 systemctl stop keepalived,观察VIP是否快速漂移到备用节点,这个操作理论上对当前连接有毫秒级中断,但不应该影响新连接的建立。

整体规划建议

结合上述所有内容,一个可落地的多台服务器带宽负载均衡方案大致长这样:

  • 入口层:LVS(双机Keepalived热备),DR模式转发,VIP对外提供服务
  • 应用层:三台Nginx反向代理,启用load_conn权重均衡,配好健康检查
  • 业务层:三台Web应用服务器,共享Redis会话存储,数据库独立部署
  • 带宽保障:机房出口选BGP多线,总带宽根据业务峰值冗余预留
  • 监控:部署Prometheus + Grafana或自研脚本,实时告警网卡流量异常、连接数突增、节点不可达

这套架构能同时解决单台出口带宽上限的问题、消除单点故障风险,也为后续横向扩展留好了口子。

常见问题快速解答

多台服务器分担带宽时,DNS轮询和负载均衡器能混合用吗?

完全可以,DNS轮询把不同区域的用户引导到不同机房的入口,每个机房内部的负载均衡器再对后端服务器做二次分发,这叫“二级负载均衡”,大型互联网企业普遍采用。

带宽上限到底应该怎么估算?

带宽需求 = 预期并发用户数 × 单用户平均带宽占用 × 峰值冗余系数,比如你的业务高峰期大约有5000人同时在线,人均占用200Kbps,那总带宽需求是1Gbps起步,还要额外预留30%应对突发流量。

后端服务器系统盘和数据盘需要为高带宽做什么准备?

高带宽意味着大量日志写入和临时文件读写,建议数据盘用SSD且独立于系统盘,日志做定期轮转压缩,避免磁盘I/O成为高吞吐场景的下一个瓶颈。

不喜欢1

网友评论

猜你喜欢