从原理到实操:基于 Keepalived 的 Nginx/HAProxy 高可用部署指南

Keepalived+Nginx高可用部署指南

在互联网架构中,负载均衡器(如 Nginx、HAProxy)是流量入口的核心组件,一旦单点故障将导致整个服务不可用。Keepalived基于VRRP(虚拟路由冗余协议)实现节点高可用,可与Nginx/HAProxy结合,构建负载均衡 + 故障自动切换的高可用架构。

前言

在互联网架构中,负载均衡器(如 NginxHAProxy)是流量入口的核心组件,一旦单点故障将导致整个服务不可用。Keepalived基于VRRP(虚拟路由冗余协议)实现节点高可用,可与Nginx/HAProxy结合,构建负载均衡 + 故障自动切换的高可用架构。

核心概念

组件

核心作用

Keepalived

基于 VRRP 协议,实现主备节点的 “虚拟 IP(VIP)” 漂移,完成故障自动切换

Nginx

七层(HTTP/HTTPS)负载均衡器,支持反向代理、静态资源缓存、SSL 终止等功能

HAProxy

四层(TCP)/ 七层负载均衡器,支持会话保持、健康检查、高并发场景,性能更优

VIP(虚拟 IP)

对外提供服务的统一 IP 地址,主节点故障时自动切换到备节点,对业务无感知

VRRP 协议工作原理

图片

VRRP 协议通过主备节点选举实现IP冗余:

  • 主节点(Master):正常情况下持有VIP,对外提供服务,并定期向备节点发送VRRP通告报文(默认每1秒一次),告知自身状态;
  • 备节点(Backup):监听主节点的通告报文,若超时(默认3秒)未收到,则认为主节点故障,自动升级为新主节点,抢占VIP
  • 故障恢复:原主节点恢复后,根据优先级(默认主节点优先级更高)重新抢占VIP,恢复主节点身份(可配置非抢占模式避免频繁切换)。

部署配置

一主一备架构为例(生产环境推荐2节点以上),拓扑如下:

[客户端] → [VIP: 192.168.1.100]
            ↓(自动切换)
    ┌──────────────┐  ┌──────────────┐
    │ 主节点(Master) │  │ 备节点(Backup) │
    │ IP: 192.168.1.11 │  │ IP: 192.168.1.12 │
    │ Keepalived + Nginx/HAProxy │  │ Keepalived + Nginx/HAProxy │
    └──────────────┘  └──────────────┘
            ↓(负载均衡)
    ┌──────────────┐  ┌──────────────┐
    │ 后端 Web 节点1 │  │ 后端 Web 节点2 │
    │ IP: 192.168.1.21 │  │ IP: 192.168.1.22 │
    └──────────────┘  └──────────────┘
  • 正常状态:主节点持有VIP,客户端流量通过VIP进入主节点的Nginx/HAProxy,再转发到后端Web节点;
  • 故障状态:主节点宕机或负载均衡服务异常,备节点抢占VIP,流量自动切换到备节点,业务无感知。
准备与规划

节点角色

IP 地址

安装软件

主节点(Master)

192.168.1.11

Keepalived + Nginx/HAProxy

备节点(Backup)

192.168.1.12

Keepalived + Nginx/HAProxy

虚拟 IP(VIP)

192.168.1.100

后端 Web 节点 1

192.168.1.21

Nginx/Apache

后端 Web 节点 2

192.168.1.22

Nginx/Apache

前置操作(所有节点)
# 关闭防火墙(CentOS 7)
systemctl stop firewalld && systemctl disable firewalld
# 关闭 SELINUX
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

Keepalived +Nginx/HAProxy安装过程略,下面只进行配置讲解

配置主节点(Master)Keepalived
! Configuration File for keepalived
global_defs {
    router_id LVS_MASTER  # 节点标识,主备需不同(如备节点设为 LVS_BACKUP)
}

# 健康检查脚本:检测 Nginx/HAProxy 是否存活,若服务停则触发切换
vrrp_script check_lb {
    script "/etc/keepalived/check_lb.sh"# 健康检查脚本路径
    interval 2  # 检查间隔(秒)
    weight -20  # 若脚本返回失败,节点优先级降低 20(确保备节点抢占)
}

vrrp_instance VI_1 {
    state MASTER  # 节点角色:MASTER(主)/BACKUP(备)
    interface eth0  # 绑定 VIP 的网卡(需与实际网卡一致,用 ip addr 查看)
    virtual_router_id 51  # 虚拟路由 ID,主备必须相同(0-255)
    priority 100  # 优先级:主节点 > 备节点(如备节点设为 90)
    advert_int 1  # VRRP 通告间隔(秒),主备需一致

    # 认证配置:主备必须相同,防止非法节点接入
    authentication {
        auth_type PASS
        auth_pass 1111  # 密码(1-8 位)
    }

    # 虚拟 IP(VIP):可配置多个,用空格分隔
    virtual_ipaddress {
        192.168.1.100/24 dev eth0 label eth0:0  # 网卡别名,便于识别
    }

    # 调用健康检查脚本
    track_script {
        check_lb
    }
}
配置备节点(Backup)Keepalived

备节点配置与主节点类似,仅需修改3处参数:

global_defs {
    router_id LVS_BACKUP  # 与主节点不同
}

vrrp_instance VI_1 {
    state BACKUP  # 角色为备节点
    priority 90  # 优先级低于主节点(100)
    # 其他参数(virtual_router_id、auth_pass、VIP 等)与主节点完全一致
}
编写健康检查脚本

检测负载均衡服务(以Nginx为例,HAProxy只需替换服务名):

#!/bin/bash
# 检查 Nginx 进程是否存在
if ! ps aux | grep nginx | grep -v grep > /dev/null; then
    # 尝试重启 Nginx(若重启失败则触发切换)
    systemctl start nginx
    sleep 2
    # 再次检查,若仍失败则停止 Keepalived(释放 VIP)
    if ! ps aux | grep nginx | grep -v grep > /dev/null; then
        systemctl stop keepalived
    fi
fi
配置 Nginx 反向代理
# 定义后端 Web 节点池(weight 为权重,值越大分配到的流量越多)
upstream web_servers {
    server 192.168.1.21:80 weight=1;
    server 192.168.1.22:80 weight=1;
    # 可选配置:故障重试、超时时间
    keepalive 32;  # 长连接数
    proxy_next_upstream error timeout invalid_header;
}

# 配置反向代理
server {
    listen 80;
    server_name localhost;  # 若有域名,可替换为实际域名(如 www.example.com)

    location / {
        proxy_pass http://web_servers;  # 转发到后端节点池
        # 传递客户端真实 IP 及请求头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
配置 HAProxy 四层负载均衡(以 TCP 为例)
global
    log         127.0.0.1 local2  # 日志配置
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000  # 最大并发连接数
    user        haproxy
    group       haproxy
    daemon      # 后台运行

defaults
    mode        tcp  # 模式:tcp(四层)/http(七层)
    log         global
    option      tcplog
    option      dontlognull
    retries     3  # 故障重试次数
    timeout connect 5000ms  # 连接超时
    timeout client  50000ms # 客户端超时
    timeout server  50000ms # 服务端超时

# 前端监听配置(监听 VIP 的 80 端口)
frontend http_front
    bind *:80
    default_backend http_back  # 转发到后端节点池

# 后端节点池配置
backend http_back
    balance roundrobin  # 负载均衡算法:轮询(roundrobin)/权重(static-rr)
    server web1 192.168.1.21:80 check inter 2000 rise 2 fall 3  # check 启用健康检查
    server web2 192.168.1.22:80 check inter 2000 rise 2 fall 3
主节点故障切换测试
  • 模拟主节点服务故障:在主节点(192.168.1.11)停止Nginx/HAProxy服务
  • 观察VIP漂移:在备节点(192.168.1.12)执行 ip addr show eth0,若出现 192.168.1.100VIP),说明漂移成功;
  • 验证业务连续性:客户端再次访问192.168.1.100,若仍能正常访问,说明故障切换生效(业务无感知)。
补充说明
virtual_server

virtual_serverKeepalivedLVS模块的核心配置项,它的作用是:

  • Keepalived节点上直接实现 四层(TCP/UDP)负载均衡,将客户端请求通过VIP转发到后端真实服务器(Real Server),无需依赖Nginx/HAProxy等第三方负载均衡软件。
! 基于 Keepalived + LVS 的配置(无需 Nginx/HAProxy)
global_defs {
    router_id LVS_MASTER
}

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 dev eth0 label eth0:0  # VIP
    }
}

# 关键:配置 virtual_server(LVS 负载均衡规则)
virtual_server 192.168.1.100 80 {  # VIP + 监听端口(80 端口)
    delay_loop 6  # 健康检查间隔(秒)
    lb_algo rr    # 负载均衡算法:rr(轮询)、wrr(权重轮询)等
    lb_kind DR    # LVS 模式:DR(直接路由)、NAT、TUN(隧道)
    persistence_timeout 50  # 会话保持时间(秒)

    # 后端真实服务器(Real Server)
    real_server 192.168.1.21 80 {
        weight 1  # 权重
        TCP_CHECK {  # 健康检查(TCP 端口检测)
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.22 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值