Debian虚拟机实现负载均衡的常见方法
在Debian虚拟机中,负载均衡可通过软件代理(如Nginx、HAProxy)或内核级方案(如LVS结合Keepalived)实现,以下是具体步骤及关键配置:
Nginx作为高性能反向代理服务器,适合Web应用的负载均衡,支持轮询、加权轮询、IP哈希等算法。
sudo apt update && sudo apt install nginx
/etc/nginx/conf.d/loadbalancer.conf),定义后端服务器组及负载均衡算法:http {
upstream backend {
server 192.168.1.101:80 weight=3; # 加权轮询(权重越高,分配请求越多)
server 192.168.1.102:80;
server 192.168.1.103:80;
}
server {
listen 80;
location / {
proxy_pass http://backend; # 将请求转发至后端服务器组
proxy_set_header Host $host; # 保留原始请求头
proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP
}
}
}
sudo systemctl restart nginx
通过浏览器或curl访问虚拟机IP,观察请求是否被分发至不同后端服务器(可通过后端服务器日志确认)。HAProxy专注于负载均衡,支持TCP(如数据库)和HTTP协议,内置健康检查功能。
sudo apt update && sudo apt install haproxy
/etc/haproxy/haproxy.cfg),定义前端监听端口、后端服务器组及负载均衡算法:global
log /dev/log local0 notice
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin # 轮询算法(默认)
server server1 192.168.1.101:80 check inter 2000 rise 2 fall 3 # 健康检查(2秒间隔,2次成功视为健康,3次失败视为宕机)
server server2 192.168.1.102:80 check
server server3 192.168.1.103:80 check
sudo systemctl restart haproxy
访问http://虚拟机IP/haproxy?stats(默认用户名/密码为admin/admin),可查看后端服务器状态及请求分发情况。LVS(Linux Virtual Server)是基于内核的负载均衡方案,性能极高;Keepalived提供虚拟IP(VIP)和故障转移,确保高可用性。
sudo apt update && sudo apt install ipvsadm keepalived
/etc/keepalived/keepalived.conf,定义虚拟IP(VIP)及负载均衡规则:vrrp_instance VI_1 {
state MASTER # 主节点设为MASTER,备节点设为BACKUP
interface eth0 # 绑定网卡(根据实际情况修改)
virtual_router_id 51 # 虚拟路由ID(同一网络内唯一)
priority 100 # 主节点优先级(高于备节点,如备节点设为90)
advert_int 1 # VRRP心跳间隔(秒)
authentication {
auth_type PASS
auth_pass 1234 # 心跳认证密码
}
virtual_ipaddress {
192.168.1.100 # 虚拟IP(客户端访问的统一入口)
}
}
virtual_server 192.168.1.100 80 { # 虚拟服务(VIP:端口)
delay_loop 6 # 健康检查间隔(秒)
lb_algo rr # 轮询算法
lb_kind DR # 直接路由模式(性能最优)
nat_mask 255.255.255.0
persistence_timeout 50 # 会话保持时间(秒)
protocol TCP # 使用TCP协议
real_server 192.168.1.101 80 { # 后端真实服务器
weight 1
TCP_CHECK { # 健康检查(TCP端口连通性)
connect_timeout 10
connect_port 80
}
}
real_server 192.168.1.102 80 {
weight 1
TCP_CHECK {
connect_timeout 10
connect_port 80
}
}
}
sudo systemctl restart keepalived
sudo systemctl start ipvsadm
在主节点执行ipvsadm -Ln,查看虚拟服务及后端服务器是否添加成功;停止主节点Keepalived,备节点应自动接管VIP,确保服务连续性。ufw)限制负载均衡器的访问端口(如仅允许可信IP访问管理界面);启用SSL加密(如Nginx配置ssl_certificate)保护数据传输。least_conn(最少连接)算法);调整内核参数(如net.ipv4.ip_forward=1启用IP转发,提升LVS性能)。