目录
[二、服务器规划(4 台机器,最小生产环境)](#二、服务器规划(4 台机器,最小生产环境))
[步骤 1:部署后端 Nginx 集群(WEB1、WEB2 两台)](#步骤 1:部署后端 Nginx 集群(WEB1、WEB2 两台))
[步骤 2:部署 HAProxy(LB-Master、LB-Backup 两台)](#步骤 2:部署 HAProxy(LB-Master、LB-Backup 两台))
[步骤 3:部署 Keepalived 实现 VIP 漂移(LB-Master、LB-Backup)](#步骤 3:部署 Keepalived 实现 VIP 漂移(LB-Master、LB-Backup))
[1. 正常状态](#1. 正常状态)
[2. 故障切换测试](#2. 故障切换测试)
[3. Nginx 节点故障](#3. Nginx 节点故障)
一、架构说明
主流分层架构:前端 HAProxy 集群 + 后端 Nginx 业务集群 + Keepalived 实现 VIP 漂移
架构分层
接入层:HAProxy + Keepalived(主备 / 双主):对外暴露统一 VIP,四层 + 七层负载均衡,接收用户公网请求
应用层:Nginx 集群:处理静态资源、反向代理后端 Java/PHP 服务
高可用保障:Keepalived:故障自动切换 VIP,单 HAProxy 宕机自动切备机,业务无断流
二、服务器规划(4 台机器,最小生产环境)
| 主机 | IP | 角色 |
|---|---|---|
| LB-Master | 192.168.10.71 | HAProxy 主 + Keepalived Master |
| LB-Backup | 192.168.10.72 | HAProxy 备 + Keepalived Backup |
| WEB1 | 192.168.10.73 | Nginx 节点 1 |
| WEB2 | 192.168.10.74 | Nginx 节点 2 |
| VIP | 192.168.10.100 | 对外访问地址(用户访问:http://192.168.10.100) |
三、部署方法
步骤 1:部署后端 Nginx 集群(WEB1、WEB2 两台)
bash
1. 安装 Nginx
yum install nginx -y
systemctl enable nginx && systemctl start nginx
2. 区分测试页面(验证负载)
# WEB1
echo "Nginx-Node1:192.168.10.73" > /usr/share/nginx/html/index.html
# WEB2
echo "Nginx-Node2:192.168.10.74" > /usr/share/nginx/html/index.html
步骤 2:部署 HAProxy(LB-Master、LB-Backup 两台)
- 安装 HAProxy
bash
yum install haproxy -y
systemctl enable haproxy
- HAProxy 主配置 /etc/haproxy/haproxy.cfg(主备配置完全一致)
bash
global
log /dev/log local0 info
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
mode http
log global
option httplog
option dontlognull
retries 3
timeout connect 5s
timeout client 30s
timeout server 30s
# 前端监听VIP所有80端口
frontend http_front
bind *:80
default_backend nginx_pool
# 后端Nginx负载池
backend nginx_pool
balance roundrobin #轮询调度
server ng1 192.168.10.73:80 check inter 2000 rise 2 fall 3
server ng2 192.168.10.74:80 check inter 2000 rise 2 fall 3
# 监控页面,查看后端节点状态 http://IP:9999/stats
listen stats
bind *:9999
stats enable
stats uri /stats
stats auth admin:123456
- 启动 HAProxy
bash
systemctl start haproxy
此时单独访问192.168.10.71:80、192.168.10.72:80会轮询 Nginx1/Nginx2
步骤 3:部署 Keepalived 实现 VIP 漂移(LB-Master、LB-Backup)
Keepalived 作用:10.71(主)正常时 VIP=192.168.10.100 绑定在主网卡;主 HAProxy / 主机宕机,VIP 自动飘到备机 10.72。
注意配置VIP:
1.cp ifcfg-eth0 ifcfg-eth0:1
2.编辑其内容来设置相应的网络接口名称和IP地址---DEVICE ,NAME,IPADDR在虚拟网络配置文件中
3.systemctl restart network
- 安装 Keepalived
bash
yum install keepalived -y
systemctl enable keepalived
- Master 节点(192.168.10.71)配置 /etc/keepalived/keepalived.conf
bash
global_defs {
router_id LVS_MASTER #路由ID,标识本节点的字符串,邮件通知时会用到
}
# 检测HAProxy进程脚本
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER为主,BACKUP为备
interface eth0 #改成实际网卡名(ip a查看)
virtual_router_id 51 #虚拟路由编号,主从要一致
priority 100 #优先级,数值越大,获取处理请求的优先级越高;主优先级高于备
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100/24 dev eth0 label eth0:0 #定义虚拟ip(VIP)
}
# 自定义健康检查脚本
track_script {
chk_haproxy #配置上面自定义的vrrp脚本调用名
}
notify_master "/etc/keepalived/haproxy_master.sh" #记录切换为主节点的信息
}
- Backup 节点(192.168.10.72)配置
bash
global_defs {
router_id LVS_BACKUP
}
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 80 #优先级低于master
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100/24 dev eth0 label eth0:0
}
track_script {
chk_haproxy
}
notify_master "/etc/keepalived/haproxy_master.sh"
}
- 健康检测脚本(两台 LB 都创建 /etc/keepalived/check_haproxy.sh)
原理:HAProxy 进程挂了,Keepalived 自动降权重,VIP 飘到备机
bash
#!/bin/bash
# 检测haproxy进程
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
systemctl stop keepalived
fi
bash
chmod +x /etc/keepalived/check_haproxy.sh
- 记录切换为主节点的信息脚本(两台 LB 都创建 /etc/keepalived/haproxy_master.sh)
bash
#!/bin/bash
LOGFILE="/var/log/keepalived-haproxy-state.log"
echo "Being Master ..." >> $LOGFILE
bash
chmod +x /etc/keepalived/haproxy_master.sh
- 启动 Keepalived
bash
systemctl start keepalived
四、功能验证
1. 正常状态
- Master (10.71) 网卡存在192.168.10.100VIP,Backup 无 VIP
- 访问 http://192.168.10.100 轮询返回 Nginx1、Nginx2 内容
2. 故障切换测试
- 停止 Master 的 HAProxy:systemctl stop haproxy(脚本检测进程消失→keepalived 停止→VIP 自动漂移到 10.72,访问 VIP 依然正常)
- Master 整机断电:备机自动接管 VIP,业务不间断
- Master 恢复后,重新抢占 VIP(MASTER 优先级高)
3. Nginx 节点故障
停掉 WEB1 Nginx,HAProxy 健康检查失败自动剔除故障节点,所有请求转发 WEB2;恢复后自动上线。