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

LVS总结

LVS总结

一、LVS概念与工作原理

Director:负载调度器,整个集群的入口,运行IPVS内核模块

Real Server(RS):真实后端服务器,实际处理请求

VIP:对外暴露的虚拟服务地址

DIP:与内网通信用的IP

RIP:后端服务器的真实IP

CIP发起请求的客户端IP

IPVS:内核模块,LVS的核心实现

ipvsadm:用户态管理工具,用于配置IPVS规则

image 

LVS是基于linux内核的四层负载均衡解决方案,工作在网络层。

工作原理:LVS工作在TCP/IP第四层(传输层),在内核Netfilter框架的INPUT链上挂钩当数据包到达Director时,IPVS模块根据调度算法选取一台Real Server,修改数据包的目标地址/端口,然后转发出去,整个过程在内核态完成,不经过用户。

 

二、LVS三种集群模式

DR模式是生产环境首选,因为响应流量不经过Director,避免了带宽瓶颈。NAT模式最简单但Director容易成为瓶颈。TUN模式适合地理分布式部署。

image

 

image

 

三、LVS调度算法

image

 静态算法(不感知当前RS状态):

rr:请求依次分给各RS,无差别循环

wrr:按权重比例轮询,权重2:1则RS1获得2倍请求

sh:对客户端IP取哈希,同一IP用永远到同一RS

dh:对目标IP取哈希,用于正向代理缓存命中优化

 

动态算法(实时感知RS连接状态)

lc:选择活跃连接数+非活跃连接数最小的RS

wlc:选择(活跃连接x256 + 非活跃连接)/权重 最小的RS,默认算法

sed:选择 (活跃连接+1) ÷ 权重 最小的 RS,解决 wlc 对低权重 RS 不公平问题

nq:若有空闲 RS(活跃连接=0)则直接分配,否则退化为 sed

lblc:同一目标 IP 尽量分到同一 RS(缓存命中),负载过高时才调度到其他 RS

lblcr:lblc 的增强版,维护目标→RS 集合映射,提升缓存利用率

 

四、LVS配置文件解析

# /etc/ipvsadm.rules(Debian/Ubuntu)

# ---- 虚拟服务(Virtual Service)配置 ----
# 格式:-A -t <VIP:port> -s <scheduler> [options]

-A -t 192.168.1.100:80 -s wrr
# -A : Add(添加虚拟服务)
# -t : TCP协议(-u 表示UDP协议)
# 192.168.1.100 : VIP(虚拟IP,对外提供服务的地址)
# :80 : 服务端口
# -s wrr : 指定调度算法,wrr=加权轮询(默认wlc)
# 可选:rr|wrr|lc|wlc|sh|dh|sed|nq|lblc|lblcr

# ---- 真实服务器(Real Server)配置 ----
# 格式:-a -t <VIP:port> -r <RIP[:port]> -<模式> -w <权重>

-a -t 192.168.1.100:80 -r 192.168.1.10:80 -g -w 3
# -a : add-server(添加Real Server到虚拟服务)
# -t 192...100:80 : 指定所属的虚拟服务(VIP:port)
# -r 192.168.1.10:80 : Real Server的IP和端口(RIP:port)
# -g : 指定工作模式为 DR(Direct Routing,直接路由)
# -g = gateway/DR模式(修改MAC地址转发)
# -m = masquerading/NAT模式(修改目标IP转发)
# -i = ipip/TUN模式(IP隧道封包转发)
# -w 3 : 权重(weight),数值越大分配请求越多,0=不接受新连接

-a -t 192.168.1.100:80 -r 192.168.1.11:80 -g -w 1
# 权重1,相对第一台RS接受更少流量(适合配置较低的服务器)

# ---- 持久化连接(Persistence)配置 ----
-A -t 192.168.1.100:443 -s rr -p 300
# -p 300 : persistent(持久化连接超时时间,秒)
# 同一客户端在300秒内的请求都会分配到同一台RS
# 等效于会话保持(Session Persistence),无需sh算法

# ---- 持久化粒度控制 ----
-A -t 192.168.1.100:0 -s rr -p 600
# port=0 : 端口为0时表示对该VIP上所有端口进行持久化(FWM模式)
# 常与防火墙标记(-f <mark>)配合使用

# ---- 防火墙标记(FWM)模式 ----
-A -f 1 -s wlc -p 300
# -f 1 : 使用防火墙标记1,需配合iptables打标记
# iptables -t mangle -A PREROUTING -d 192.168.1.100 -j MARK --set-mark 1
# 实现跨端口(如80和443)的持久化会话

 

# ============================================================
# DR 模式下 Real Server 的必要配置(每台RS均需执行)
# ============================================================

# 抑制ARP广播(DR/TUN模式特有要求)
# 防止RS上配置的VIP响应ARP请求,导致流量绕过Director

# 方法一:修改内核参数(推荐)
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
# arp_ignore=1 : 仅响应目标IP是本网卡IP的ARP请求
# (默认0=对所有接口上的IP都响应ARP)

echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
# arp_announce=2 : 对外ARP通告时,只使用与目标IP在同一子网的源IP
# (默认0=使用任意IP通告,会导致VIP被RS抢占ARP)

# 在回环接口(lo)上配置VIP
ip addr add 192.168.1.100/32 dev lo
# /32 : 子网掩码必须是32位,避免系统认为VIP所在网段在lo口
# RS通过lo:0接收Director转发来的包,以VIP为源IP回复客户端

# 持久化写入 /etc/sysctl.conf
# net.ipv4.conf.all.arp_ignore = 1
# net.ipv4.conf.all.arp_announce = 2

# 方法二:使用NetworkManager(Rocky Linux 推荐)
nmcli con add type dummy ifname lvs-vip
nmcli con mod lvs-vip ipv4.addresses "192.168.1.100/32"

 

# ============================================================
# ipvsadm 常用管理命令
# ============================================================

ipvsadm -ln
# -l : list(列出当前所有虚拟服务和RS)
# -n : numeric(以数字形式显示IP和端口,不做DNS反解)

ipvsadm -ln --stats
# --stats : 显示连接统计信息(总连接数、包数、字节数)

ipvsadm -ln --rate
# --rate : 显示实时速率(CPS连接/秒、PPS包/秒、BPS字节/秒)

ipvsadm -D -t 192.168.1.100:80
# -D : Delete(删除虚拟服务及其所有RS)

ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.10:80
# -d : del-server(仅删除指定RS,不影响虚拟服务)

ipvsadm -E -t 192.168.1.100:80 -s lc
# -E : Edit(修改虚拟服务属性,如调度算法)

ipvsadm -e -t 192.168.1.100:80 -r 192.168.1.10:80 -g -w 5
# -e : edit-server(修改RS属性,如权重)

ipvsadm --save > /etc/sysconfig/ipvsadm
# --save : 将当前规则保存到文件(用于持久化)

ipvsadm --restore < /etc/sysconfig/ipvsadm
# --restore : 从文件恢复规则(开机自动加载)

# 开机自动加载(CentOS/Rocky)
systemctl enable ipvsadm

 

# ============================================================
# Keepalived 中的 LVS 配置段(/etc/keepalived/keepalived.conf)
# 通常将 ipvsadm 规则集成到 Keepalived 中,实现高可用
# ============================================================

virtual_server 192.168.1.100 80 { # VIP 和端口
delay_loop 6 # 健康检查间隔(秒)
lb_algo wrr # 调度算法(同 -s 参数)
lb_kind DR # 工作模式:DR | NAT | TUN
persistence_timeout 50 # 持久化超时(秒),0=关闭
protocol TCP # 协议类型

real_server 192.168.1.10 80 { # RS1 的 RIP 和端口
weight 3 # 权重
HTTP_GET { # 健康检查方式
url {
path /health # 检查URL路径
status_code 200 # 期望的HTTP状态码
}
connect_timeout 3 # 连接超时(秒)
retry 3 # 失败重试次数
delay_before_retry 3 # 重试前等待(秒)
}
}

real_server 192.168.1.11 80 { # RS2 的 RIP 和端口
weight 1 # 权重较低(配置较弱的服务器)
HTTP_GET {
url {
path /health
status_code 200
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}

 

 

 

http://www.jsqmd.com/news/922946/

相关文章:

  • Arduino水位控制器:从晶体管开关到自动灌溉的DIY实践
  • 如何快速修复损坏二维码:终极像素级编辑指南
  • 2026年银川护栏网/围挡定制加工靠谱选择攻略|品类全、可定制、本地源头厂 - 宁夏壹山网络
  • 基于Arduino与超声波传感器的导盲辅助设备设计与实现
  • Gemini误答事件全链路复盘,深度解析算法透明度、工程灰度发布与PR协同失效点
  • UE5 C++项目编译罢工别慌!手把手教你清理Binaries/Intermediate/Saved文件夹的正确姿势(附依赖库丢失修复)
  • LinuxCNC开源数控系统完整指南:5步实现从入门到精通
  • Arduino智能夜灯项目:从状态机到交互设计的嵌入式开发实战
  • 医疗健康IT转型:从混合云架构到数据中台与AI落地的实践路径
  • Linux lsof 命令深度解析:从文件描述符到进程追踪
  • 别再只用 > 和 >> 了!Linux tee命令的5个实用场景,从日志记录到管道调试
  • UE5 Niagara实战:如何用Data Interface让你的粒子与场景里的任意物体“对话”?
  • AI率总超标?2026年AI论文网站排行榜权威发布,轻松达标不是梦!
  • 告别雷达误报!用Python手把手实现CFAR目标检测(附CA/OS算法对比)
  • Gemini舆情分析结果可信度验证体系(含F1-score≥0.89的12项基准测试用例与审计清单)
  • 赛博朋克2077存档编辑器终极指南:5步掌握游戏自定义艺术
  • 基于Arduino与TCS34725的糖果颜色分拣机:从硬件搭建到算法实现
  • 青海路由心国际旅行社发布对外咨询与微信联系渠道:兰兰领队15297212390 - 行业深度观察
  • 保姆级教程:在Ubuntu 20.04上从零搭建OSTrack目标跟踪环境(含libGL.so.1等常见报错解决)
  • Navicat重置终极指南:3种高效方法实现Navicat无限试用
  • 株洲闲置名表变现哪家可信?4家门店探店实测 正规渠道选这些不踩坑 - 生活测评小能手
  • Arduino蓝牙遥控小车制作:从电机驱动到手机控制全解析
  • 终极宽屏优化:让经典植物大战僵尸完美适配现代显示器
  • 树莓派笔记本改造:SMBus电池管理与Max1873/MP26123充电方案详解
  • Ctool深度解析:一站式开发者工具集的架构设计与加密解密实战指南
  • 硬核盘点!2026AI写作辅助平台大盘点(覆盖 99% 毕业生论文需求)
  • 别再手动分区了!用targetcli在CentOS 7上快速配置iSCSI共享存储(附完整命令清单)
  • 终极窗口控制神器:Simple Runtime Window Editor让你轻松突破游戏分辨率限制
  • Mac鼠标平滑滚动终极指南:如何用Mos实现触控板般的丝滑体验
  • Layerdivider终极指南:5分钟学会将图片自动分层为专业PSD文件