尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

LVS负载均衡彻底搞懂:三种工作模式原理与DR模式实战踩坑全记录

LVS负载均衡彻底搞懂:三种工作模式原理与DR模式实战踩坑全记录 一、LVS 是什么LVSLinux Virtual ServerLinux 虚拟服务器是由章文嵩博士开发的内核级四层负载均衡技术工作在 OSI 模型的传输层TCP/UDP只处理 IP 和端口的转发不解析 HTTP 等应用层内容因此性能极高单台调度器可支撑上万并发连接。LVS 集群中有两类核心角色Director调度器接收客户端请求按照调度算法将数据包转发给后端真实服务器本身不处理业务。Real ServerRS真实服务器真正处理业务请求并将响应结果返回给客户端。LVS 是四层负载均衡Nginx 是七层负载均衡。LVS 只看 IP 端口Nginx 可以看 URL、Cookie、Header 等应用层信息。二、LVS 三种工作模式详解LVS 支持三种工作模式NAT 模式、DR 模式、TUN 模式。三者的本质区别在于数据包的转发方式和回包路径不同。2.1 NAT 模式网络地址转换参数-m工作原理客户端请求 VIP数据包到达调度器。调度器修改数据包的目标 IPDNAT将 VIP 改为某台 RS 的真实 IP转发给后端。RS 处理请求后将响应包发给调度器RS 的默认网关必须指向调度器。调度器修改响应包的源 IPSNAT将 RS 真实 IP 替换回 VIP返回给客户端。特点请求和响应全部流量都经过调度器调度器容易成为性能瓶颈。RS 可以和 VIP 不在同一个网段RS 只需要内网 IP不需要公网 IP。不需要在 RS 上配置 lo 回环网卡 VIP也不需要 ARP 抑制。支持任意操作系统的 RS。适用场景小规模集群、对性能要求不高的场景。配置示例ipvsadm-A-t10.1.8.100:80-srr ipvsadm-a-t10.1.8.100:80-r10.1.8.11:80-mipvsadm-a-t10.1.8.100:80-r10.1.8.12:80-mipvsadm-a-t10.1.8.100:80-r10.1.8.13:80-m关键所有 RS 的默认网关必须配置为调度器的内网 IP。2.2 DR 模式直接路由参数-g生产最常用工作原理客户端访问 VIP请求报文到达调度器。调度器不修改 IP只修改数据帧的目标 MAC 地址将其改为选中 RS 的物理网卡 MAC在二层转发给 RS。RS 收到数据包由于本机 lo 回环网卡绑定了 VIP能够识别并处理该请求。响应报文由 RS 直接返回给客户端不经过调度器。特点只有入方向请求经过调度器响应包 RS 直回客户端调度器压力小性能最高。调度器和所有 RS必须在同一个局域网因为是二层 MAC 转发。硬性约束踩坑重点VIP 必须绑定在 RS 的lo 回环网卡上掩码为/32绝对不能绑定在物理网卡如 ens33上。必须配置 ARP 抑制内核参数防止 RS 对外广播 VIP 的 ARP 响应否则客户端会绕过调度器直接访问某台 RS导致负载均衡失效。net.ipv4.conf.all.arp_ignore 1 net.ipv4.conf.all.arp_announce 2 net.ipv4.conf.lo.arp_ignore 1 net.ipv4.conf.lo.arp_announce 2适用场景同一局域网内的大规模 Web 集群生产环境中最常用。配置示例ipvsadm-A-t10.1.8.100:80-srr ipvsadm-a-t10.1.8.100:80-r10.1.8.11:80-gipvsadm-a-t10.1.8.100:80-r10.1.8.12:80-gipvsadm-a-t10.1.8.100:80-r10.1.8.13:80-g2.3 TUN 模式IP 隧道参数-i工作原理客户端请求 VIP数据包到达调度器。调度器在原有 IP 报文外面再封装一层新的 IP 头部IP 隧道封装将封装后的包发给 RS。RS 解开隧道外层 IP拿到原始请求包本机 lo 网卡配置了 VIP处理业务。RS 直接将响应返回客户端回包不经过调度器。特点RS 和调度器可以跨网段、跨机房不要求同一局域网。回包不走调度器性能较高。RS 内核必须支持并开启ipip隧道模块。硬性约束RS 主机内核必须加载ipip模块。VIP 配置在 RS 的 lo 回环网卡上。同样需要配置 ARP 抑制。适用场景跨机房、跨地域的分布式集群。配置示例ipvsadm-A-t10.1.8.100:80-srr ipvsadm-a-t10.1.8.100:80-r10.1.8.11:80-iipvsadm-a-t10.1.8.100:80-r10.1.8.12:80-iipvsadm-a-t10.1.8.100:80-r10.1.8.13:80-i2.4 三种模式对比汇总对比项NAT 模式DR 模式TUN 模式ipvsadm 参数-m-g-i入流量经过调度器经过调度器经过调度器出流量经过调度器RS 直回客户端RS 直回客户端RS 与调度器网段可不同网段必须同一局域网可跨网段 / 跨机房RS 是否需要 VIP不需要lo 绑定 VIPlo 绑定 VIP是否需要 ARP 抑制不需要必须必须特殊要求RS 网关指向调度器同局域网ipip 隧道模块性能较低调度器瓶颈最高高适用场景小规模集群同网段大规模集群最常用跨机房集群三、LVS 常用调度算法算法名称说明rr轮询按顺序依次分配每台 RS 轮流处理wrr加权轮询根据 RS 权重分配权重高的处理更多请求lc最少连接优先分配给当前连接数最少的 RSwlc加权最少连接结合权重和连接数综合分配默认算法lblc基于局部性的最少连接同一目标 IP 尽量分配给同一 RS四、DR 模式完整实战配置4.1 实验环境主机IP 地址角色lvs-dir[10.1.8.10](10.1.8.10)调度器 Directorweb1[10.1.8.11](10.1.8.11)RS 节点web2[10.1.8.12](10.1.8.12)RS 节点web3[10.1.8.13](10.1.8.13)RS 节点VIP[10.1.8.100](10.1.8.100)虚拟 IP4.2 调度器配置# 1. 绑定VIP到物理网卡ipaddradd10.1.8.100/24 dev ens33# 2. 安装ipvsadmyuminstall-yipvsadm# 3. 配置LVS规则ipvsadm-C# 清空旧规则ipvsadm-A-t10.1.8.100:80-srr# 添加虚拟服务轮询算法ipvsadm-a-t10.1.8.100:80-r10.1.8.11:80-g# 添加web1DR模式ipvsadm-a-t10.1.8.100:80-r10.1.8.12:80-g# 添加web2DR模式ipvsadm-a-t10.1.8.100:80-r10.1.8.13:80-g# 添加web3DR模式# 4. 查看规则ipvsadm-Ln4.3 所有 RS 节点配置web1/web2/web3 全部执行# 1. 绑定VIP到lo回环网卡/32掩码重点ipaddradd10.1.8.100/32 dev lo# 2. 配置ARP抑制echo1/proc/sys/net/ipv4/conf/all/arp_ignoreecho2/proc/sys/net/ipv4/conf/all/arp_announceecho1/proc/sys/net/ipv4/conf/lo/arp_ignoreecho2/proc/sys/net/ipv4/conf/lo/arp_announce# 3. 持久化ARP参数写入/etc/sysctl.conf防止重启失效cat/etc/sysctl.confEOF net.ipv4.conf.all.arp_ignore 1 net.ipv4.conf.all.arp_announce 2 net.ipv4.conf.lo.arp_ignore 1 net.ipv4.conf.lo.arp_announce 2 EOFsysctl-p4.4 验证负载均衡# 客户端执行90次请求统计各节点处理次数foriin{1..90};docurl-s10.1.8.100;done|sort|uniq-c正常结果三台 RS 各处理 30 次请求。五、实战踩坑总结坑 1流量全部落到同一台 RS现象90 次请求全部打到 web1web2 和 web3 零流量。原因RS 的 lo 网卡 ARP 抑制参数未生效arp_ignore0、arp_announce0RS 对外广播了 VIP 的 ARP 响应客户端 ARP 缓存直接指向 web1绕过了 LVS 调度器。解决# 检查ARP参数sysctlnet.ipv4.conf.lo.arp_ignore net.ipv4.conf.lo.arp_announce# 修正为1和2echo1/proc/sys/net/ipv4/conf/lo/arp_ignoreecho2/proc/sys/net/ipv4/conf/lo/arp_announce# 客户端清空ARP缓存arp-d10.1.8.100坑 2sysctl: invalid syntax 报错现象执行sysctl -p时报/etc/sysctl.conf(11): invalid syntax。原因配置文件中键值对等号两侧有空格或参数名拼写错误。解决sysctl.conf中键值对严格使用参数名值格式等号左右不要加空格注释行以#开头。坑 3ipvsadm: unexpected argument 报错现象添加 RS 时报unexpected argument。原因混淆了-A添加虚拟服务和-a添加后端 RS后端 RS 地址前缺少-r参数。解决大写-A只配 VIP小写-a配 RS 且必须加-r指定后端地址。坑 4nmcli 命令拼接报错现象invalid setting.property nmcli。原因两条独立的 nmcli 命令写在同一行被当成一条命令解析。解决每条 nmcli 命令单独执行不要同行拼接。六、总结DR 模式是生产环境最常用的 LVS 模式性能最高但必须配置 lo 绑定 VIP 和 ARP 抑制。NAT 模式配置最简单但调度器是瓶颈适合小规模场景。TUN 模式支持跨机房但需要 ipip 隧道支持使用较少。DR 模式下最常见的问题就是 ARP 抑制配置不到位导致客户端绕过调度器直接访问 RS表现为流量不均。排障思路先看ipvsadm -Ln确认规则正确再检查 RS 的 lo VIP 绑定和 ARP 参数最后清空客户端 ARP 缓存复测。
返回列表