一、简介

LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基 于LVS+keepalived实现

LVS 官网: http://www.linuxvirtualserver.org/

二、LVS运行原理

2.1LVS 的集群结构

2.2lvs相关概念

  • RS:Real Server
  • CIP:Client IP
  • VIP: Virtual serve IP VS(连接)外网的IP
  • DIP: Director IP VS内网的IP
  • RIP: Real server IP

访问流程:CIP ->VIP == DIP-> RIP

2.3LVS的集群类型

  • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
  • lvs-dr: 操纵封装新的MAC地址
  • lvs-tun:在原请求IP报文之外新加一个IP首部
  • lvs-fullnat: 修改请求报文的源和目标IP

以上4种类型前2种常用

2.3.1nat模式

lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

2.3.1.1nat模式流程图

  1. 客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口
  2. VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
  3. RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口
  4. VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)VS服务器把修改过报文的响应数据包回传给客户端
  5. lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞
2.3.1.2模拟lvs-nat集群实验(三层IP和四层端口)
实验前准备
设备名称IP
client172.25.250.111
lvs172.25.250.100(VIP|NAT)、192.168.252.100(DIP|仅主机)
rs1192.168.252.10
rs2192.168.252.20
设备的相关配置

lvs 调度器

#配置VIP和DIP(双网卡)
DIP
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.252.100/24
method=manual#VIP
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=172.25.250.100/24,172.25.250.2
method=manual#激活VIP和DIP
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth1#安装ipvsadm
dnf install ipvsadm -y#编写调度策略
ipvsadm -A -t 172.25.250.100:80 -s rr
ipvsadm -a -t 172.25.250.100:80 -r 192.168.252.10:80 -m
ipvsadm -a -t 172.25.250.100:80 -r 192.168.252.20:80 -m
ipvsadm-save / /etc/sysconfig.conf/ipvsadm
#查看调度策略
ipvsadm  -Ln #开启路由内核转发功能
vim /etc/sysctl.conf net.ipv4.ip_forward=1  
sysctl -p

rs1/2

#配置RIP
#RIP
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.252.20/24,192.168.252.100 #lvs上仅主机的网卡上的IP
method=manual#激活rip
nmcli connection reload
nmcli connection up eth0
测试

用client测试得到以下结果

2.3.2LVS-DR模式

DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

2.3.2.1DR模式流程图

在DR模式中,RS接收到访问请求后不需要回传给LVS调度器,直接把回传数据发送给client,所以RS和Lvs上都要有vip

  1. 客户端发送数据帧给Lvs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
  2. LVS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC
  3. RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC
2.3.2.2模拟DR集群实验(玩二层MAC地址)
实验前准备
设备名称IP
172.25.250.111client客户端
172.25.250.100(nat)/192.168.252.100(仅主机)router的双网卡对应的ip
192.168.252.111lvs的DIP
192.168.252.10RS1-rip
192.168.252.20RS2-rip
192.168.252.200集群对外的VIP
相关设备的配置

client

仅需修改网关,把网关设置为routernat网卡上的IPvim /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0type=ethernetinterface-name=eth0[ethernet][ipv4]address1=172.25.250.111/24,172.25.250.100method=manual

router
#开启内核路由转发sysctl -a | grep ipv4.ip_forward
net.ipv4.ip_forward = 1
sysctl -p #开启防火墙和地址伪装
systemctl start firewalld
firewall-cmd --add-masquerade     #地址伪装

lvs-dr
#配置DIP和VIP
DIP
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address0=192.168.252.111/24,192.168.252.100   #把网关设置为router仅网卡设备上的IP
====================================================================
VIP
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address0=192.168.252.200/32
address1=127.0.0.1/8
====================================================================
#激活DIP和VIP
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth0    #可能会遇到激活网卡后无VIP情况,需要看网卡设备激活状况
nmcli connection show 
# 编写调度策略
ipvsadm -A -t 192.168.252.200:80 -s rr 
#-A:添加策略 -t:tcp  IP:虚拟IP  -s:调度算法 -rr:轮询
#调度后端真实服务器
ipvsadm -a -t 192.168.252.200:80 -r 192.168.252.10:80 -g
ipvsadm -a -t 192.168.252.200:80 -r 192.168.252.20:80 -g#调度策略做永久保存
ipvsadm-save > /etc/sysconfig/ipvsadm
[root@dr-lvs system-connections]# cat /etc/sysconfig/ipvsadm
-A -t dr-lvs:http -s rr
-a -t dr-lvs:http -r 192.168.252.10:http -g -w 1
-a -t dr-lvs:http -r 192.168.252.20:http -g -w 1#重启服务
systenctl start ipvssadm 
#关闭防火墙

RS1/2

#配置RIP和VIP
#RIP
[connection]
id=eth0
uuid=7ba00b1d-8cdd-30da-91ad-bb83ed4f7474
type=ethernet
interface-name=eth0
timestamp=1752646309[ipv4]
address1=192.168.252.20/24,192.168.252.100
dns=8.8.8.8;
method=manual#VIP
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
address1=192.168.252.200/32
address2=127.0.0.1/8
method=manual
#开启arp抑制,防止客户端请求穿透LVS的调度策略,直接访问后端服务器
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
#net.ipv4.conf.all.arp_announce = 2
#net.ipv4.conf.all.arp_announce =1
#arp_announce 只响应同本机所有接口   arp_ignore 忽略arp报文
测试

排错过程:

得出后端真实服务器的web没有启动

2.3.3实验过程中的问题和排错

2.3.3.1问题

可能会出现VIP配置没问题,但是查不到vip的情况

原因之前激活过的网卡已占用设备位置,所以需要把之前激活的网卡删除再重新激活后配置的网卡

执行nmcli connection delete 加上已占用网卡的uuid 

        nmcli connection up lo

排错:
  • 后端服务器的防火火墙未关闭
  • 后端web服务没有起/网关
  • 配置的ip冲突
  • 编写策略有问题,是基于VIP去调度后端真实服务器

2.3.4TUN模式(了解)

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)

2.3.4.1TUN模式流程图

  1. 客户端发送请求数据包,包内有源IP+vip+dport
  2. 到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
  3. RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP)+port,响应数据包通过网络直接回传给client
2.3.4.2TUN模式的特点
  • DIP, VIP, RIP都应该是公网地址
  • RS的网关一般不能指向DIP
  • 请求报文要经由Director,但响应不能经由Director
  • 不支持端口映射
  • RS的OS须支持隧道功能

2.3.5fullnet模式(了解)

2.3.5.1fullnet流程图

fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发

CIP --> DIP

VIP --> RIP

2.3.6LVS工作模式总结

NAT模式TUN模式DR模式
RS操作系统不限支持隧道禁用arp
调度器和服务器网络可跨网络可跨网络不可跨网络
调度服务器数量服务器数量
RS服务器网关指向到调度器DIP指向到路由指向到路由

2.4LVS调度算法

静态算法:
RRroundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
WRRWeighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
SHSource Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
DHDestination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
动态算法:
LC

least connections(最少链接发)

适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)

WLC

Weighted LC(权重最少链接)

默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight

SED

Shortest Expection Delay,

初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight

但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接

NQNever Queue,第一轮均匀分配,后续SED
LBLCLocality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
LBLCRLBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89836.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89836.shtml
英文地址,请注明出处:http://en.pswp.cn/web/89836.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes CNI网络插件性能瓶颈排查与优化实践

Kubernetes CNI网络插件性能瓶颈排查与优化实践 CNI(Container Network Interface)是 Kubernetes 网络层的核心组件,不同 CNI 插件实现了容器间网络通信、多租户隔离、流量限速等功能。然而在大规模集群或高并发业务场景下,CNI 插…

20250720-6-Kubernetes 调度-nodeName字段,DaemonS_笔记

一、污点与容忍1. 给节点添加污点1)命令格式基本语法:kubectl taint node [node] keyvalue:[effect]示例:kubectl taint node k8s-node1 gpuyes:NoSchedule操作说明:与打标签命令类似,将"…

微软开源项目 Detours 详细介绍与使用实例分享

目录 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours应用场景 5、Detours兼容性 6、Detours具体使用方法 7、Detours使用实例 - 使用Detours拦截系统库中的UnhandledExceptionFilter接口,实现对程序异常的拦截 C++软件异常排查从入门到精通系列教程…

研发知识系统选型实战:从 Notion 到 Gitee Wiki 的迭代经验

关键词:知识管理、版本控制、协作编辑、国产平台、研发效能 在日常研发管理中,知识管理平台往往被视为“非核心工具”,但它的好坏直接影响着团队交接效率、文档可用性以及协作深度。过去几年,我们团队先后使用过 Notion、Confluen…

从一开始的网络攻防(三):sqlmap快速上手

一、确定目标 使用sqlmap的第一步是确定探测的目标,一般有四种: 数据库URL文件Google批量扫 环境 Target IP: 192.168.8.133 Port: 13306(Mysql)、8088(sqli_labs) mysql: docker pull的最新mysql sqlmap github:https://g…

《Anaconda 精简路径治理》系列 · 番外篇Conda 虚拟环境路径结构方案全解——六种路径布局对比、优劣与治理建议

Python 多版本环境治理理念驱动的系统架构设计:三维治理、四级隔离、五项自治 原则-CSDN博客 Anaconda 路径精简后暴露 python 及工具到环境变量的配置记录-CSDN博客 【终极实战】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具协同 AnacondaPyCharm:构建…

容器基础知识3-kubectl、kubeadm 和 kubelet,kube-proxy

kubectl、kubeadm 和 kubelet,kube-proxy的概念和关系一、kubeadm:K8s 集群的 “搭建工程师”核心定位如果把 K8s 集群比作一栋大楼,kubeadm 就是负责 “打地基、搭框架” 的工程师,专门用来快速搭建 K8s 集群的工具。具体工作内容…

langchain调用本地ollama语言模型和嵌入模型

参考:ollama兼容OpenAIEmbeddings的解决思路 解决代码: 访问embedding模型代码 # 测试以下两个引用都可以 from langchain_openai import OpenAIEmbeddings #from langchain_community.embeddings import OpenAIEmbeddings from typing import List,…

gitlab私有化部署

以下是整理好的Markdown格式文档,详细描述了从下载镜像、启动镜像、修改external_url以及设置或重置root密码的步骤。 GitLab 安装与配置指南 本文档将指导您完成GitLab的安装和基本配置过程,包括下载镜像、启动容器、修改外部访问URL(external_url)及设…

CCLink IE转ModbusTCP网关配置无纸记录器(上篇)

本研究案例采用CCLink IE转ModbusTCP网关技术,实现了将记录仪数据传输至三菱PLCPLC的过程。具体操作步骤如下所述。在确保无纸记录仪与PT100传感器传感器的连接无误后,应将无纸记录仪与个人计算机(PC)通过以太网线进行连接&#x…

近期工作感想:职业规划篇

最近整理博客时,撞见意外的惊喜——17年刚毕业那会儿写的职业规划,静静躺在回收站里。 重读那些碎碎念,忍不住想笑:那时候的焦虑太真切了,哪敢想后来会遇到这么多大佬,推着我往前一直阴暗爬行😂…

Matlab自学笔记六十四:求解自变量带有约束条件的方程

1.说明 有一些方程由于实际问题的需要,需要设置一些限制约束条件,例如x>0等,若使用Matlab编程求解,首先尝试使用符号运算求解(符号运算可参考文章54:Matlab自学笔记五十四:符号数学工具箱和…

Flutter状态管理篇之ChangeNotifier(二)

目录 前言 一、ChangeNotifier定义 1.ChangeNotifier定义 2.Listenable的定义 二、继承体系 三、核心方法解析 1.类结构与属性分析 1.Listenable的定义 2..核心字段 1.属性解析 1._count 2._listeners 3.为什么不用const [] 4._notificationCallStackDep…

大带宽服务器对于高流量网站的作用

随着科学技术的快速发展,越来越多的网站面临着高流量的访问需求,在同一时间中会有着大量的用户进行访问,同时也提高了该企业的知名度,但是这对于服务器的性能需求也在逐渐增高,而大带宽服务器卓越的性能和稳定的传输能…

2025年算法备案发号规律总结与下半年发号预测

上半年发号规律总结图太糊?可看下方表格(左划看全表)👇今年批次算法备案总批次发布时间所发当批算法材料提交时间段审核周期25年第一批第十批2025/3/122025年1月(春节前)约2个月25年第二批第十一批2025/5/1…

高光谱相机(Hyperspectral Camera)

高光谱相机(Hyperspectral Camera)高光谱相机:是一种可以采集连续、多达上百个窄波段的光谱信息的成像设备。它的核心特征是:每个像素点都拥有一个完整的光谱曲线,类似于“像素级别的光谱仪”。举例:普通彩…

经典排序算法之归并排序(Merge Sort)

归并算法定义:所谓归并排序是指将两个或两个以上有序的数列(或有序表),合并成一个仍然有序的数列(或有序表)。这样的排序方法经常用于多个有序的数据文件归并成一个有序的数据文件。归并排序相比较之前的排…

Linux系统环境下 Node.js 20 安装实践:glibc 2.17 兼容方案与工具链优化

前言:在 CentOS 7.9 的生产环境中,默认搭载的 glibc 2.17 是系统的核心依赖,直接升级它可能引发稳定性风险。而 Node.js 20 作为较新的运行时,其与 glibc 的兼容性长期困扰着开发者:为什么有些场景下 Node.js 20 能直接…

构建一个简单的Java框架来测量并发执行任务的时间

文章目录一、完整代码二、代码解释1、方法签名2、初始化CountDownLatch3、提交任务到执行器4、任务线程的逻辑5、主线程的逻辑详细解释总结以下代码实现了一个简单的框架,用于测量并发执行任务的时间。它使用了Executor来执行任务,并通过CountDownLatch来…

精通 triton 使用 MLIR 的源码逻辑 - 第001节:triton 的应用简介

项目使用到 MLIR,通过了解 triton 对 MLIR 的使用,体会到 MLIR 在较大项目中的使用方式,汇总一下。1. Triton 概述OpenAI Triton 是一个开源的编程语言和编译器,旨在简化 GPU 高性能计算(HPC) 的开发&#…