Linux虚拟机负载均衡实现指南
在Linux虚拟机环境中,负载均衡通过将客户端请求分发到多个后端服务器,提升系统吞吐量、可用性和容错能力。常见实现方式包括Nginx反向代理、HAProxy专用负载均衡器、LVS(Linux Virtual Server)内核级方案,以下是具体配置步骤及关键说明:
Nginx是一款高性能HTTP/反向代理服务器,通过upstream模块实现负载均衡,适用于Web应用场景。
sudo apt update && sudo apt install nginxsudo yum install epel-release && sudo yum install nginx/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf),添加upstream块定义后端服务器组,并指定负载均衡算法(默认轮询):http {
upstream backend {
server 192.168.1.101:80 weight=1 max_fails=2 fail_timeout=10s; # 权重1,失败2次后剔除10秒
server 192.168.1.102:80 weight=2; # 权重2,承担更多请求
server 192.168.1.103:80;
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://backend; # 转发到后端服务器组
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
}
}
}
sudo systemctl restart nginxsudo nginx -tcurl访问your-domain.com,观察请求是否轮流分发到后端服务器(可通过后端服务器日志确认)。HAProxy是专注于TCP/HTTP负载均衡的开源工具,支持高并发和多种调度算法,适用于需要更精细控制的场景。
sudo apt update && sudo apt install haproxysudo yum install haproxy/etc/haproxy/haproxy.cfg),定义前端(监听端口)和后端(后端服务器):global
daemon
maxconn 256 # 最大并发连接数
defaults
mode http # HTTP模式(也可设为tcp)
option httplog
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80 # 监听80端口
default_backend servers # 转发到后端服务器组
backend servers
balance roundrobin # 轮询算法(可选leastconn、source等)
server server1 192.168.1.101:80 check inter 2000 rise 2 fall 3 # 健康检查:每2秒检测,连续2次成功标记为up,3次失败标记为down
server server2 192.168.1.102:80 check inter 2000 rise 2 fall 3
server server3 192.168.1.103:80 check inter 2000 rise 2 fall 3
sudo systemctl restart haproxysudo systemctl status haproxycurl访问http://负载均衡器IP,观察请求分发情况。LVS是Linux内核级负载均衡解决方案,通过修改数据包目标地址实现转发,性能极高,适用于大规模集群。
sudo systemctl stop firewalld(CentOS)或sudo ufw disable(Ubuntu)。echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward(永久生效需修改/etc/sysctl.conf中的net.ipv4.ip_forward=1)。sudo ifconfig lo:8 192.168.1.150 netmask 255.255.255.255 up
sudo route add -host 192.168.1.150 dev lo:8
echo 1 | sudo tee /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 | sudo tee /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 | sudo tee /proc/sys/net/ipv4/conf/all/arp_announce
sudo yum install httpd && echo "RS1: 192.168.1.141" | sudo tee /var/www/html/index.html(RS2同理,修改内容区分)。sudo yum install ipvsadm# 添加虚拟服务(TCP模式,轮询算法)
sudo ipvsadm -A -t 192.168.1.150:80 -s rr
# 添加后端真实服务器(DR模式,直接路由转发)
sudo ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.141 -g
sudo ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.142 -g
# 查看规则:sudo ipvsadm -Ln
http://192.168.1.150,刷新页面观察请求是否轮流分发到RS1/RS2(通过页面内容区分)。max_fails(Nginx)、check(HAProxy)、ipvsadm -C(LVS)配置健康检查,自动剔除故障服务器。ip_hash(Nginx)、cookie(HAProxy)或LVS的 persistence功能。以上方案覆盖了Linux虚拟机环境下的常见负载均衡需求,可根据实际场景(如应用类型、性能要求、预算)选择合适的工具。