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

Keepalived 与 LVS 集成及多实例配置详解

一、Keepalived 扩展功能:LVS 集成与多实例管理

1. Keepalived + LVS:四层负载均衡高可用方案
1.1 集成原理与架构
  • 核心逻辑:Keepalived 通过 VRRP 实现 LVS 负载均衡节点的高可用,同时利用 LVS 的 IP 负载均衡技术(NAT/DR/TUN 模式)分发流量到后端服务器。

  • 组件分工

    • Keepalived:管理 VRRP 状态、VIP 漂移和节点健康检查。

    • LVS:基于 IP 层(OSI 第四层)实现流量转发,支持 TCP/UDP 协议(如 HTTP、MySQL、Redis)。

1.2 LVS 负载均衡模式
模式 原理 特点
NAT负载均衡器作为网关,修改数据包源 / 目的 IP,后端服务器默认网关指向负载均衡器。 配置简单,需负载均衡器处理所有进出流量,适合小规模集群。
DR(直接路由)负载均衡器仅修改数据包目的 MAC,后端服务器共享 VIP 的 IP 配置。 性能高,后端服务器需配置相同子网 IP,适合高吞吐量场景。
TUN(隧道模式)负载均衡器与后端服务器通过 IP 隧道通信,支持跨子网部署。 支持地理分散的后端服务器,配置复杂。
1.3 配置示例(LVS DR 模式)
# Keepalived 配置文件(主节点)
global_defs {router_id LVS_MASTER
}vrrp_instance LVS_VIP {state MASTERinterface eth0virtual_router_id 60priority 100virtual_ipaddress {192.168.1.254/24 dev eth0  # VIP}
}# LVS 规则配置(通过 keepalived 动态注入)
virtual_server 192.168.1.254 80 {delay_loop 6lb_algo wlc  # 加权最小连接算法lb_kind DR  # DR 模式protocol TCPreal_server 192.168.1.101 80 {weight 10TCP_CHECK {connect_port 80connect_timeout 3retry 3}}real_server 192.168.1.102 80 {weight 8TCP_CHECK {connect_port 80connect_timeout 3retry 3}}
}

关键配置说明

  • virtual_server:定义 VIP 和服务端口(如 80)。

  • lb_algo:负载均衡算法(支持 rr/wlc/lc 等)。

  • real_server:后端服务器 IP 及权重,TCP_CHECK 实现健康检查。

1.4 后端服务器配置(DR 模式)
# 配置 VIP 别名(不启用 ARP 响应)
sudo ip addr add 192.168.1.254/32 dev lo:0
sudo arp -Ds 192.168.1.254 $(ifconfig eth0 | grep ether | awk '{print $2}') pub

原理:后端服务器通过回环接口(lo)绑定 VIP 的 /32 地址,避免响应 ARP 请求干扰负载均衡器。

2. 多实例支持:单机管理多个独立高可用组
2.1 应用场景
  • 多业务隔离:同一物理机上运行多个 Keepalived 实例,分别管理不同业务的 VIP(如 Web 服务 VIP1、数据库 VIP2)。

  • 混合负载均衡:同时部署 LVS 负载均衡实例和纯 VRRP 高可用实例。

2.2 实例隔离机制
  • 配置文件隔离:每个实例使用独立的配置文件(如 /etc/keepalived/instance1.conf/etc/keepalived/instance2.conf)。

  • 端口隔离

    • 主实例使用默认端口(VRRP 通告 UDP 112、管理接口 TCP 1936)。

    • 其他实例通过 vrrp_port 参数指定不同端口(如 113、1937)。

  • 进程隔离:每个实例以独立进程运行,通过不同 PID 文件区分。

2.3 配置示例(双实例)

实例 1:Web 服务高可用(纯 VRRP)

# /etc/keepalived/web.conf
vrrp_instance WEB {state MASTERinterface eth0virtual_router_id 70priority 100virtual_ipaddress {192.168.1.254/24}track_script {check_web}
}

实例 2:数据库负载均衡(LVS + VRRP)

# /etc/keepalived/db.conf
global_defs {router_id LVS_DBvrrp_port 113  # 自定义 VRRP 端口
}vrrp_instance DB {state MASTERinterface eth0virtual_router_id 71priority 100virtual_ipaddress {192.168.1.255/24  # 独立 VIP}
}virtual_server 192.168.1.255 3306 {lb_kind NATreal_server 192.168.1.103 3306 {weight 5TCP_CHECK { ... }}
}

启动命令

# 实例 1
sudo keepalived -f /etc/keepalived/web.conf -D# 实例 2
sudo keepalived -f /etc/keepalived/db.conf -D -p /var/run/keepalived_db.pid
2.4 管理与监控
  • 状态查看
# 实例 1 状态
sudo keepalived -S info -f /etc/keepalived/web.conf# 实例 2 状态
sudo keepalived -S info -f /etc/keepalived/db.conf
  • 日志分离:每个实例配置独立日志文件:
global_defs {log_file /var/log/keepalived_web.log  # 实例 1 日志
}
3. 扩展功能最佳实践
3.1 LVS 性能优化
  • 算法选择

    • 短连接业务(如 HTTP):使用 rr(轮询)或 wrr(加权轮询)。

    • 长连接业务(如数据库):使用 wlc(加权最小连接)。

  • 连接调度:通过 persistence_timeout 配置会话保持(如电商购物车场景):

virtual_server 192.168.1.254 80 {persistence_timeout 300  # 5 分钟内同一客户端 IP 路由到同一后端
}
3.2 多实例资源分配
  • CPU 隔离:为不同实例分配独立 CPU 核心(通过 systemd-cgroups)。

  • 内存限制:使用 MemoryMax 参数限制实例内存占用:

# /etc/systemd/system/keepalived@.service.d/limit.conf
[Service]
MemoryMax=256M
3.3 云原生场景适配
  • 容器化部署:在 Kubernetes 中使用 keepalived + ipvs 实现四层负载均衡,替代传统 NodePort 服务:
apiVersion: apps/v1
kind: DaemonSet
metadata:name: keepalived-lvs
spec:template:spec:containers:- name: keepalivedimage: keepalived:latestvolumeMounts:- mountPath: /etc/keepalivedname: config

二、总结:扩展功能的价值与适用场景

  • Keepalived + LVS:提供 “高可用 + 负载均衡” 一体化解决方案,适合传统数据中心的四层流量分发场景(如金融交易、实时通信)。

  • 多实例管理:满足复杂业务架构下的资源隔离需求,避免单一实例故障影响全局,同时优化硬件利用率。

在实际应用中,建议根据业务特性选择扩展功能:

  • 无状态服务优先使用 LVS DR 模式,结合 Keepalived 实现高性能高可用。

  • 多业务场景通过多实例隔离,配合云原生技术(如容器、K8s)实现混合架构部署。

通过合理利用 Keepalived 的扩展功能,可在不引入复杂中间件的前提下,构建灵活、高效的基础设施层。

http://www.xdnf.cn/news/585361.html

相关文章:

  • React 与 TypeScript 极客园移动端
  • OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()
  • Android 内存溢出(OOM)的 Kotlin 排查与优化指南
  • 博客打卡-0/1背包问题,回溯法
  • 类和对象(4)--《Hello C++ Wrold!》(6)--(C/C++)--赋值运算符重载,取地址和const取地址操作符重载
  • 嵌入式STM32学习——串口USART 2.2(串口中断接收)
  • Python字符串格式化(二): f-string的进化
  • 企业级爬虫进阶开发指南
  • 【linux知识】sftp配置免密文件推送
  • 开搞:第四个微信小程序:图上县志
  • 获取印度股票市场API
  • 关于XILINX的XDC约束文件编写
  • HarmonyOS 鸿蒙应用开发基础:EventHub,优雅解决跨组件通信难题
  • 10.IIC和BH1750
  • 基于单片机的室内采光及可燃气体泄漏报警装置设计
  • SCons构建工具使用指南及示例
  • JAVA SE — 循环与分支和输入输出
  • 有没有开源的企业网盘,是否适合企业使用?
  • 记录:express router,可以让node.js后端文件里的路由分布的更清晰
  • vim以及vi编辑器常用快捷键指令
  • 服务器操作系统调优内核参数(方便查询)
  • 复杂项目中通过使用全局变量解决问题的思维方式
  • 2025中青杯数学建模B题思路+模型+代码
  • 【TTS回顾】CosyVoice 深度解析:基于LLM的TTS模型
  • iOS 直播弹幕功能的实现
  • 前端三件套之html详解
  • DevOps体系之Jmeter
  • java面试每日一背 day2
  • MySQL错误1419(HY000)解决方案:SUPER权限缺失与二进制日志启用冲突的3种处理方式
  • 内存管理子系统学习记录