Nginx负载均衡会话保持配置指南

目录

[1. 先明确整体架构](#1. 先明确整体架构)

[2. 核心结论(针对你的架构)](#2. 核心结论(针对你的架构))

[3. 如何让请求固定到同一台 Nginx 节点?](#3. 如何让请求固定到同一台 Nginx 节点?)

[方式 1:LVS + Keepalived(最常用的四层负载)](#方式 1:LVS + Keepalived(最常用的四层负载))

[方式 2:HAProxy + Keepalived(七层负载,更灵活)](#方式 2:HAProxy + Keepalived(七层负载,更灵活))

[4. 验证方法(确认是否固定到同一台)](#4. 验证方法(确认是否固定到同一台))

总结


结合你补充的 "nginx 前面添加了一个 keepalive 负载均衡" 这个场景,我先把逻辑理清楚,再给你可落地的配置和验证方法:

1. 先明确整体架构

你现在的架构应该是:客户端 → Keepalived+负载均衡器(比如LVS/HAProxy/Nginx) → Nginx集群 → 后端业务服务器

这里要先纠正一个关键认知:Keepalived 本身不是负载均衡器 ------ 它的核心是「高可用(VIP 漂移)」,通常和 LVS/HAProxy/Nginx 配合使用:

  • Keepalived:负责监控负载均衡器的存活,挂了就把 VIP 切到备用节点,保证入口不宕机;
  • 真正做「请求分发」的是 LVS/HAProxy/Nginx(我们统称「前端负载均衡器」);
  • 你说的「keepalive」,大概率是指前端负载均衡器开启了 TCP/HTTP Keepalive 连接复用。

2. 核心结论(针对你的架构)

即使前端负载均衡器开启了 Keepalive,默认情况下,同一个客户端的多次请求仍然可能被分发到不同的 Nginx 节点 ------ 原因和之前一致:Keepalive 只是「复用连接」,解决的是 "频繁建连 / 断连的性能问题",但不负责 "把请求固定到同一台服务器"。

3. 如何让请求固定到同一台 Nginx 节点?

需要在前端负载均衡器上配置「会话保持(Sticky Session)」,以下是两种最常见的实现方式:

方式 1:LVS + Keepalived(最常用的四层负载)

LVS 本身支持会话保持,修改 Keepalived 配置文件(通常 /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,客户端访问的IP
    }
}

# 配置LVS + 会话保持
virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo wrr  # 负载算法(加权轮询)
    lb_kind DR   # LVS DR模式(常用)
    persistence_timeout 600  # 会话保持超时时间(秒),同一IP 10分钟内固定到同一台Nginx
    protocol TCP

    # 后端Nginx节点
    real_server 192.168.1.11 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.12 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

关键配置:persistence_timeout 600 ------ 开启基于客户端 IP 的会话保持,超时时间可根据业务调整。

方式 2:HAProxy + Keepalived(七层负载,更灵活)

如果前端是 HAProxy + Keepalived,修改 HAProxy 配置(/etc/haproxy/haproxy.cfg):

复制代码
frontend http_front
    bind *:80
    bind 192.168.1.100:80  # VIP
    mode http
    default_backend nginx_backend

backend nginx_backend
    mode http
    balance roundrobin  # 负载算法
    cookie SRV_ID insert indirect nocache  # 插入cookie做会话保持
    server nginx1 192.168.1.11:80 check cookie nginx1  # 绑定cookie到节点
    server nginx2 192.168.1.12:80 check cookie nginx2

关键配置:cookie SRV_ID insert ------ 基于 Cookie 的会话保持,同一客户端会被固定到分配的 Nginx 节点。

4. 验证方法(确认是否固定到同一台)

  1. 在两台 Nginx 节点的日志里(比如 /var/log/nginx/access.log),添加客户端 IP 和服务器 IP 的记录;
  2. 用同一个客户端(比如浏览器)多次访问 VIP(192.168.1.100);
  3. 查看日志:如果所有请求都出现在同一台 Nginx 的日志里,说明会话保持生效;如果分散在两台,说明没生效。

总结

  1. Keepalived ≠ 负载均衡 ≠ 会话保持:Keepalived 只负责高可用(VIP 漂移),真正的负载分发和会话保持由 LVS/HAProxy 实现;
  2. 默认不粘节点:仅开启 Keepalive(连接复用),请求仍会被负载均衡到不同 Nginx 节点;
  3. 粘节点需配置 :LVS 加 persistence_timeout、HAProxy 加 cookie 即可实现会话保持,固定到同一台 Nginx。
相关推荐
Canmag 兴隆磁性2 小时前
中大型钕铁硼产品的磁通测量与自动分选:一条产线自动化的工程实现思路
运维·学习·自动化·永磁材料
xuefeiniao4 小时前
PHP2Shell漏洞修复
运维·服务器·php
便利店10245 小时前
系统活动一抓留存!深入 Linux C/C++ 调试工具之 sysdig
linux·运维·服务器·sysdig
智能运维指南6 小时前
企业 IT 运维自动化平台怎么选?从场景匹配到 POC 验证的完整评估框架
运维·自动化·自动化运维·嘉为蓝鲸
toooooop87 小时前
CentOS 7 内核 3.10.0-1160.119.1 升级指南
linux·运维·centos
云飞云共享云桌面7 小时前
广东东莞制造工厂10人共享一台三维设计服务器
运维·服务器·3d·自动化·制造
kkkkkkkkkk_Z7 小时前
新手自学嵌入式 | 学习日记:Linux驱动复习之系统移植(U-Boot篇)
linux·运维·学习
hz567898 小时前
企业视频会议系统方案:总部与分支机构高效协同如何落地?
运维·服务器·网络·安全·实时音视频·信息与通信
sun153690275728 小时前
露天矿边坡滑坡怎么预警?QY-19GNSS 自动化地表位移监测系统介绍
运维·安全·自动化