在Linux上实现高可用网络负载均衡主要有以下几种方案:
下面我将重点介绍LVS+Keepalived和HAProxy+Keepalived这两种最常用的方案。
# 在两台负载均衡服务器上执行
sudo apt-get install ipvsadm keepalived # Debian/Ubuntu
sudo yum install ipvsadm keepalived # CentOS/RHEL
sudo vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 # VIP地址
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr # 轮询算法
lb_kind DR # 直接路由模式
protocol TCP
real_server 192.168.1.101 80 {
weight 1
TCP_CHECK {
connect_timeout 10
}
}
real_server 192.168.1.102 80 {
weight 1
TCP_CHECK {
connect_timeout 10
}
}
}
sudo vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90 # 优先级低于主服务器
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 # 相同的VIP地址
}
}
# 其余配置与主服务器相同
# 在每个后端服务器上执行
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
# 添加VIP到lo接口
ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 up
sudo systemctl start keepalived
sudo systemctl enable keepalived
# 在两台负载均衡服务器上执行
sudo apt-get install haproxy keepalived # Debian/Ubuntu
sudo yum install haproxy keepalived # CentOS/RHEL
sudo vi /etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server1 192.168.1.101:80 check
server server2 192.168.1.102:80 check
sudo vi /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_haproxy
}
}
sudo vi /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_haproxy
}
}
sudo systemctl start haproxy
sudo systemctl enable haproxy
sudo systemctl start keepalived
sudo systemctl enable keepalived
sudo ipvsadm -Ln
sudo systemctl status haproxy
# 或通过stats页面访问
# 在主服务器上停止keepalived或haproxy
sudo systemctl stop keepalived
# 观察VIP是否转移到备服务器
健康检查优化
日志配置
安全加固
性能调优
监控告警
以上配置可以根据实际网络环境和业务需求进行调整。在生产环境部署前,建议在测试环境充分验证。