如何在ubuntu虚拟机中实现负载均衡
导读:在 Ubuntu 虚拟机中搭建负载均衡的可行方案 应用层负载均衡:使用 Nginx 或 HAProxy 作为反向代理,将请求分发到多个后端应用实例,配置简单、维护成本低,适合大多数 Web/API 场景。 传输层负载均衡:使用 LVS(I...
在 Ubuntu 虚拟机中搭建负载均衡的可行方案
- 应用层负载均衡:使用 Nginx 或 HAProxy 作为反向代理,将请求分发到多个后端应用实例,配置简单、维护成本低,适合大多数 Web/API 场景。
- 传输层负载均衡:使用 LVS(IPVS)+ Keepalived,由 Keepalived 管理 VRRP 虚拟 IP 并实现主备或主主高可用,LVS 负责四层转发,性能更高,适合大流量场景。
- 高可用思路:无论采用哪种方案,都建议引入 Keepalived 提供 VIP 漂移,避免单点故障;小规模可用主从,业务量大可用主主(双 VIP)提升资源利用率。
方案一 应用层 Nginx 或 HAProxy 快速落地
-
适用:快速为 Web/API 做负载均衡,支持轮询、权重、健康检查等常用策略。
-
拓扑示例:客户端 → LB(Nginx/HAProxy) → 多个后端(如 192.168.1.101:8080、192.168.1.102:8080)。
-
Nginx 示例
- 安装:sudo apt update & & sudo apt install nginx
- 配置 /etc/nginx/nginx.conf(http 段内):
upstream backend { server 192.168.1.101:8080; server 192.168.1.102:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } } - 生效:sudo systemctl restart nginx
-
HAProxy 示例
- 安装:sudo apt update & & sudo apt install haproxy
- 配置 /etc/haproxy/haproxy.cfg:
global daemon maxconn 256 defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http-in bind *:80 default_backend servers backend servers balance roundrobin server server1 192.168.1.101:8080 server server2 192.168.1.102:8080 - 生效:sudo systemctl restart haproxy
-
健康检查增强(Nginx):在 upstream 中加入参数如 weight=1 max_fails=3 fail_timeout=20s 可提升容错能力。
方案二 四层高性能 LVS + Keepalived 主备
-
适用:需要更高吞吐/更低延迟的四层转发(TCP/UDP),并通过 Keepalived 提供 VIP 高可用。
-
拓扑示例:客户端 → VIP(如 192.168.31.200) → LVS(主/备)→ 多个 RealServer(后端应用)。
-
部署步骤
- 在两台 LB 虚拟机安装组件:sudo apt-get install keepalived ipvsadm
- 开启转发(NAT/DR 常用):sudo sysctl -w net.ipv4.ip_forward=1
- 主节点 /etc/keepalived/keepalived.conf(示例为 DR 模式):
global_defs { router_id LVSMaster } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 100 priority 100 advert_int 1 authentication { auth_type PASS; auth_pass 123456 } virtual_ipaddress { 192.168.31.200 } } virtual_server 192.168.31.200 80 { delay_loop 6 lb_algo wrr lb_kind DR protocol TCP real_server 192.168.31.186 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } - 备节点:将 state 改为 BACKUP、priority 略低(如 90),其余保持一致。
- 启动:sudo service keepalived start
- RealServer(DR 模式)要点:绑定 VIP 到回环、ARP 抑制、开启非本地回环转发(常见做法如 ifconfig lo:0 192.168.31.200/32 up 并调整内核 arp/转发参数)。
-
说明:LVS 支持 NAT/TUN/DR 三种模式;NAT 需 LB 开启转发,DR 需在同一二层网段并做回环/VIP 配置。
方案三 高可用增强与扩展
- Keepalived 主备 vs 主主
- 主备:一主一备,故障自动切换,部署简单;
- 主主:两台 LB 各自绑定不同 VIP,配合 DNS 轮询 实现双活与资源充分利用。
- 动态服务发现与自动更新
- 结合 Consul + Consul Template + Nginx,当后端节点上线/下线时自动生成 Nginx upstream 配置并重载,减少人工维护成本。
- 健康检查与故障隔离
- Nginx:在 upstream 中使用 max_fails/fail_timeout;
- LVS:通过 TCP_CHECK/HTTP_GET 等健康检查自动摘除异常 RealServer。
虚拟机网络与连通性要点
- 建议使用 桥接网卡 或 Host-Only 网络,使虚拟机与宿主机/外部网络互通,并为 VIP 所在网段配置正确的路由。
- 同一局域网内测试 DR 模式 更便捷;跨网段或公网环境优先考虑 NAT 或主主 + DNS 方案。
- 关闭或放行相关端口(如 80/443)与 ICMP/ARP(DR 场景),避免健康检查与 VIP 绑定失败。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在ubuntu虚拟机中实现负载均衡
本文地址: https://pptw.com/jishu/777659.html
