Keepalived + Nginx + HAProxy 高可用架构部署实战案例

目录

一、架构说明

[二、服务器规划(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 两台)

  1. 安装 HAProxy
bash 复制代码
yum install haproxy -y
systemctl enable haproxy
  1. 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
  1. 启动 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

  1. 安装 Keepalived
bash 复制代码
yum install keepalived -y
systemctl enable keepalived
  1. 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"   #记录切换为主节点的信息
}
  1. 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"
}
  1. 健康检测脚本(两台 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
  1. 记录切换为主节点的信息脚本(两台 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
  1. 启动 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;恢复后自动上线。

相关推荐
56AI2 小时前
360 智语 AI 企业智能体平台深度评测:从 L4 蜂群架构到政企落地实战
人工智能·架构
马士兵教育3 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
youngerwang3 小时前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
snow@li3 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
老毛肚3 小时前
JeecgBoot 后端架构与技术栈全景导读 01
架构
云烟成雨TD3 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework4 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
逍遥德4 小时前
MQTT教程详解-05.SpringBoot集成mqtt client 性能分析
java·spring boot·spring·mt
@insist1234 小时前
系统架构设计师-操作系统进程管理核心知识点详解
架构·系统架构·软考·系统架构设计师·软件水平考试