当前位置: 首页 > news >正文

Keepalived 负载均衡


Keepalived 负载均衡

Keepalived 可以与 LVS(Linux Virtual Server)结合,提供强大的四层负载均衡功能。它通过 IPVS(IP Virtual Server)内核模块实现高性能的负载分发。

核心组件

  • Virtual Server:虚拟服务器,对外提供服务的 VIP
  • Real Server:真实服务器,实际处理请求的后端服务器
  • IPVS:Linux 内核中的负载均衡模块
  • 健康检查:监控后端服务器状态

工作模式

模式说明特点适用场景
DR(Direct Routing)直接路由性能最高,要求在同一网段大流量场景
NAT(Network Address Translation)网络地址转换配置简单,性能较低小规模应用
TUN(IP Tunneling)IP 隧道可跨网段,性能中等跨机房部署

完整的环境配置

这两个服务在 Keepalived 中通过分别定义不同的 virtual_server 来区分。
由于 IPVS 是基于 <虚拟IP,端口,协议> 三元组建立映射的,因此 80 和 443 互不影响,各自的健康检查、调度算法和会话保持配置都可以独立设置。

global_defs {router_id LB_MASTERenable_script_security
}# HTTP 负载均衡
virtual_server 10.20.230.32 80 {delay_loop 6lb_algo wlclb_kind DRpersistence_timeout 300   # HTTP 会话保持,时间相对较短protocol TCPreal_server 192.168.1.10 80 {weight 2HTTP_GET {url {path /healthstatus_code 200}connect_timeout 3retry 3delay_before_retry 2}}real_server 192.168.1.11 80 {weight 1HTTP_GET {url {path /healthstatus_code 200}connect_timeout 3retry 3delay_before_retry 2}}
}# HTTPS 负载均衡
virtual_server 10.20.230.32 443 {delay_loop 6lb_algo wlc              # 加权最少连接算法lb_kind DRpersistence_timeout 600   # HTTPS 会话保持时间更长protocol TCP# 后端服务器1 - 高性能服务器real_server 192.168.1.10 443 {weight 3             # 更高的权重inhibit_on_failure   # 失败时禁用SSL_GET {            # HTTPS 健康检查url {path /healthstatus_code 200}connect_timeout 3retry 3delay_before_retry 2}}# 后端服务器2 - 普通服务器real_server 192.168.1.11 443 {weight 1inhibit_on_failureSSL_GET {url {path /healthstatus_code 200}connect_timeout 3retry 3delay_before_retry 2}}
}

高级配置技巧

会话保持配置

会话保持(Session Persistence)适用于需要 长时间维持客户端和同一后端服务器交互 的业务场景:

  • 流媒体(视频点播/直播):避免反复切换服务器导致播放卡顿
  • WebSocket 长连接:必须确保连接持续性
  • 在线文档/协作系统:会话中断会影响用户体验
virtual_server 192.168.1.100 80 {delay_loop 6lb_algo wlclb_kind DRprotocol TCPpersistence_timeout 1800   # 30分钟会话保持# 基于客户端 IP 的会话保持persistence_granularity 255.255.255.0  # 按 C 类网段real_server 192.168.1.10 80 {weight 1TCP_CHECK {connect_timeout 3}}
}

基于防火墙标记的负载均衡

这种方式提供了更灵活的流量控制能力:

# 步骤1:设置防火墙标记
# 标记 HTTP 和 HTTPS 流量
iptables -t mangle -A PREROUTING -d 10.20.230.32 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 100# 标记来自内网的流量
iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -d 10.20.230.32 -p tcp --dport 443 -j MARK --set-mark 200# 标记来自外网的流量
iptables -t mangle -A PREROUTING ! -s 192.168.0.0/16 -d 10.20.230.32 -p tcp --dport 443 -j MARK --set-mark 300# 步骤2:Keepalived 配置
# 多端口服务
virtual_server fwmark 100 {delay_loop 6lb_algo wlclb_kind DRprotocol TCPreal_server 192.168.1.10 0 {  # 端口0表示所有端口weight 2MISC_CHECK {misc_path "/usr/local/bin/check_multi_port.sh 192.168.1.10 80 443"}}real_server 192.168.1.11 0 {weight 1MISC_CHECK {misc_path "/usr/local/bin/check_multi_port.sh 192.168.1.11 80 443"}}
}# 内网服务器组
virtual_server fwmark 200 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.1.20 443 {weight 1TCP_CHECK {connect_timeout 3}}
}# 外网服务器组
virtual_server fwmark 300 {delay_loop 6lb_algo wlclb_kind DRprotocol TCPreal_server 192.168.2.10 443 {weight 2TCP_CHECK {connect_timeout 3}}
}

什么是四层负载均衡

四层负载均衡是指在 OSI 模型第四层(传输层) 工作的负载均衡方式。第四层包含 TCP/UDP 协议,所以四层负载均衡的调度依据主要是:

  • IP 地址(源 IP/目的 IP)
  • 端口号(源端口/目的端口)
  • TCP/UDP 会话信息

在这种模式下,负载均衡器并不关心 HTTP、HTTPS、MQTT 等应用层协议的具体内容,而是根据 五元组 (源 IP, 源端口, 目的 IP, 目的端口, 传输协议) 来分发流量。


四层负载均衡的工作原理

假设有一台四层负载均衡器(LB),前面接收用户请求,后面挂着多台真实服务器(Real Server):

  1. 客户端发起连接:客户端向负载均衡器的 VIP(虚拟 IP)发起 TCP/UDP 请求。
  2. 负载均衡器选择后端:LB 根据四层信息(IP+端口+协议),使用一定的调度算法(如轮询 Round Robin、最少连接 Least Connection、一致性哈希等)选中一个真实服务器。
  3. 转发数据:LB 会把客户端的请求报文转发给选中的后端服务器。
    • 可能是 NAT 模式:对请求包头的目的 IP 和端口进行修改,再转发。
    • 可能是 DSR(直接路由模式):只修改二层 MAC,不修改 IP。
    • 可能是 TProxy(透明模式):保持源 IP 不变,直发后端。
  4. 返回给客户端
    • 如果是 NAT,返回流量需要经由 LB,由 LB 改写后返回客户端。
    • 如果是 DSR,后端服务器直接把结果返回给客户端(高性能,但需要配置 VIP)。


文章转载自:

http://sZMW3H3w.bpmtg.cn
http://yXz01TlK.bpmtg.cn
http://2tldxNZp.bpmtg.cn
http://LwykD12Y.bpmtg.cn
http://VTk5qPTl.bpmtg.cn
http://55XugkLB.bpmtg.cn
http://HuNri6b5.bpmtg.cn
http://3hLI7f7u.bpmtg.cn
http://iVVUzbv8.bpmtg.cn
http://340xHcHm.bpmtg.cn
http://68VFC85c.bpmtg.cn
http://8mjpsdgG.bpmtg.cn
http://FXWA6fZ5.bpmtg.cn
http://psCOYqLd.bpmtg.cn
http://EHZ0Rw4d.bpmtg.cn
http://VXrJt2HZ.bpmtg.cn
http://y90pMh23.bpmtg.cn
http://6Q7C0aRM.bpmtg.cn
http://JPfcumYy.bpmtg.cn
http://2quXJbkX.bpmtg.cn
http://t6ktWiHT.bpmtg.cn
http://kVehcc6r.bpmtg.cn
http://Iva4wp6U.bpmtg.cn
http://SDmg9IHR.bpmtg.cn
http://Nf4Trbz4.bpmtg.cn
http://yKw3jZBA.bpmtg.cn
http://E0wZn921.bpmtg.cn
http://G5anPdFx.bpmtg.cn
http://nZ7FKXez.bpmtg.cn
http://x2wpQ3Tk.bpmtg.cn
http://www.dtcms.com/a/379810.html

相关文章:

  • 智能文档处理业务,应该选择大模型还是OCR专用小模型?
  • 《Redis核心机制解析》
  • Netty 在 API 网关中的应用篇(请求转发、限流、路由、负载均衡)
  • 金蝶云星空插件开发记录(一)
  • Knockout-ES5 入门教程
  • 基于 Art_DAQ、InfluxDB 和 PyQt 的传感器数据采集、存储与可视化
  • 【图像处理基石】图像压缩有哪些经典算法?
  • C语言实战:简单易懂通讯录
  • youte-agent部署(windows)
  • Python实现点云法向量各种方向设定
  • Linnux IPC通信和RPC通信实现的方式
  • apache实现LAMP+apache(URL重定向)
  • MongoDB 与 GraphQL 结合:现代 API 开发新范式
  • k8s-临时容器学习
  • uni-app 根据用户不同身份显示不同的tabBar
  • ubuntu18.04安装PCL1.14
  • Ubuntu 系统下 Anaconda 完整安装与环境配置指南(附常见问题解决)
  • 网络链路分析笔记mtr/traceroute
  • 在 Ubuntu 系统中利用 conda 创建虚拟环境安装 sglang 大模型引擎的完整步骤、版本查看方法、启动指令及验证方式
  • 基带与射频的区别与联系
  • 《企业安全运营周报》模板 (极简实用版)​
  • opencv基于SIFT特征匹配的简单指纹识别系统实现
  • Node.js 操作 Elasticsearch (ES) 的指南
  • 使用tree命令导出文件夹/文件的目录树( Windows 和 macOS)
  • Spring缓存(二):解决缓存雪崩、击穿、穿透问题
  • LabVIEW加载 STL 模型至 3D 场景 源码见附件
  • Tessent_ijtag_ug——第 4 章 ICL 提取(2)
  • 前端WebSocket实时通信实现
  • 2025年- H133-Lc131. 反转字符串(字符串)--Java版
  • 萨顿四条原则