CentOS 虚拟机负载均衡实操指南
一、方案选型与适用场景
二、快速上手 Nginx 负载均衡
sudo yum install -y epel-release && sudo yum install -y nginxsudo systemctl start nginx && sudo systemctl enable nginxhttp {
upstream backend {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
# 可选:least_conn; 最少连接;默认轮询
}
server {
listen 80;
server_name 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;
}
}
}
sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload三、快速上手 HAProxy 负载均衡
sudo yum install -y haproxysudo systemctl start haproxy && sudo systemctl enable haproxyglobal
daemon
maxconn 256
defaults
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
server server1 192.168.1.101:8080 check
server server2 192.168.1.102:8080 check
server server3 192.168.1.103:8080 check
sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload四、高性能入口 LVS + Keepalived(DR 模式)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 66
priority 100
advert_int 1
authentication { auth_type PASS auth_pass 1111 }
virtual_ipaddress { 192.168.1.200 }
}
virtual_server 192.168.1.200 8080 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 0
real_server 192.168.1.111 8080 { weight 1; TCP_CHECK { connect_timeout 3; } }
real_server 192.168.1.115 8080 { weight 1; TCP_CHECK { connect_timeout 3; } }
}
#!/bin/bash
VIP=192.168.1.200
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP 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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del -host $VIP >/dev/null 2>&1
echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stopped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
五、健康检查、监控与会话保持
max_fails 与 fail_timeout 实现被动健康检查,例如:upstream backend {
server 192.168.1.101:8080 max_fails=3 fail_timeout=10s;
server 192.168.1.102:8080 max_fails=3 fail_timeout=10s;
}
server 行添加 check 参数启用 TCP/HTTP 健康检查。TCP_CHECK 或应用层检查脚本对后端做健康检查,异常节点自动摘除。ip_hash;)实现简单,但可能造成负载不均;