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

LVS (Linux virual server)

LVS简介

        LVS(Linux Virtual Server)是一个基于Linux平台的开源负载均衡系统。它通过将多个服务器组成一个虚拟服务器集群,实现了高效的负载均衡和流量分发。                
        LVS的核心思想是利用IP负载均衡技术和内容请求分发机制,将客户端的请求均衡地分配给服务器集群中的各个节点。这种机制能够有效地提高服务器的利用率,降低单点故障的风险,并提供高可用性和可伸缩性的服务。

LVS 官网: http://www.linuxvirtualserver.org/
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务

LVS的三种工作模式分别是NAT模式、DR模式和IP隧道模式。

VS:Virtual Server
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

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

lvs的调度算法

根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法

静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS被调度

lvs静态调度算法

RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐

WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少

SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往 第一次挑中的RS,从而实现会话绑定

DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请 求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

lvs动态调度算法

主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的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承接

NQ:Never Queue,第一轮均匀分配,后续SED

LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理

LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS

NAT模式


本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和 PORT实现转发
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
支持端口映射,可修改请求报文的目标PORT
VS必须是Linux系统,RS可以是任意OS系统

 优点:配置和管理相对简单,网络架构灵活,允许后端服务器在不同网段中,客户端不需要感知后端服务器的存在。
缺点:在整个流程中,所有输入输出的流量都要经过负载均衡器,这会导致负载均衡器成为性能瓶颈,尤其是在Web类应用中,响应流量大于请求流量时更为明显。

实验

 四台虚拟机:客户端、lvs调度器、webserver1、webserver2

Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连 Web服务器采用仅主机网卡与director相连
Web服务器网关指向192.168.0.100
后端web服务器不需要连接外网

实验步骤:

1、启动路由器内核路由功能

2、lvs

下载 ipvsadm负载均衡控制组件

yum install -y ipvsadm

通过ipvsadm配置负载均衡器

ipvsadm -A -t 172.25.254.100:80 -s rr 
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.10:80 -m   
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.20:80 -m

3、sr1

yum install -y httpd
echo this is sr 1 > /var/www/html/index.html
systemctl enable --now httpd

4、测试

[root@client ~]# for i in {1..10}
> do
> curl 172.25.254.100
> done
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1

DR模式

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

DR模式的特点
1.Director和各RS都配置有VIP
2.确保前端路由器将目标IP为VIP的请求报文发往Director
3.在前端网关做静态绑定VIP和Director的MAC地址 在RS上使用arptables工具 在RS上修改内核参数以限制arp通告及应答级别
4.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
5.RIP的网关不能指向DIP,以确保响应报文不会经由Director
6.RS和Director要在同一个物理网络
7.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
8.不支持端口映射(端口不能修败) arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP /proc/sys/net/ipv4/conf/all/arp_ignore /proc/sys/net/ipv4/conf/all/arp_announce
9.RS可使用大多数OS系统

实验
实验环境

准备五台虚拟机:客户端、路由器、负载均衡器、真实服务器1、真实服务器2
五台虚拟机均为openEuler-22.03-LTS-SP3-x86_64-dvd.iso
router两个网卡,一个为nat模式一个为仅主机模式

client -- nat172.25.254.200
router -- nat172.25.254.100
router -- 仅主机182.168.0.100
LVS -- DIP192.168.0.50
sr1 -- RIP1192.168.0.10
sr2 -- RIP2192.168.0.20
VIP192.168.0.200

实验步骤

1、五台设备的ip配置

# client
[root@client ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:bd:21:87 brd ff:ff:ff:ff:ff:ffinet 172.25.254.200/24 brd 172.25.254.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:febd:2187/64 scope link valid_lft forever preferred_lft forever# router
[root@router ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:7a:6c:bf brd ff:ff:ff:ff:ff:ffinet 172.25.254.100/24 brd 172.25.254.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe7a:6cbf/64 scope link valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:7a:6c:c9 brd ff:ff:ff:ff:ff:ffinet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute eth1valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe7a:6cc9/64 scope link valid_lft forever preferred_lft forever# LVS
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.200/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:95:4f:97 brd ff:ff:ff:ff:ff:ffinet 192.168.0.50/24 brd 192.168.0.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe95:4f97/64 scope link valid_lft forever preferred_lft forever# sr1
[root@rs1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.200/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:3e:fc:63 brd ff:ff:ff:ff:ff:ffinet 192.168.0.10/24 brd 192.168.0.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe3e:fc63/64 scope link valid_lft forever preferred_lft forever# sr2
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.0.200/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:06:4a:cd brd ff:ff:ff:ff:ff:ffinet 192.168.0.20/24 brd 192.168.0.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe06:4acd/64 scope link valid_lft forever preferred_lft forever

1、禁用sr1和sr2的arp响应

#在RS1和RS2中解决响应问题
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

3、开启router路由器的路由转发

4、在LVS中配置策略
在LVS、rs1、rs2的换回接口中配置VIP,都为192.168.0.200

ip a a 192.168.0.200/32 dev lo

#LVS配置
[root@lsv ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lsv ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -w 1 -g
[root@lsv ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -w 1 -g
# 查看规则[root@lsv ~]# ipvsadm -Ln
[root@lsv ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0         
  -> 192.168.0.20:80              Route   1      0          0    

5、sr1配置

[root@rs1 ~]# yum install httpd -y

[root@rs1 ~]# echo this is rs1 > /var/www/html/index.html

[root@rs1 ~]# systemctl restart httpd

sr2配置相同

6、测试

[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1
this is rs2
this is rs1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【ARM】ARM Cortex 处理器详细讲解
  • Upload 上传图标不显示
  • 【C#】StringComparer
  • 智能电话机器人的优势与挑战
  • 在mac上通过 MySQL 安装包安装 MySQL 之后,终端执行 mysql 命令报错 command not found: mysql
  • Pytorch-张量的创建
  • 电脑装机-热插拔
  • P1012 [NOIP1998 提高组] 拼数
  • java基础学习笔记1
  • 50 mysql 的 “where 1 = 1“ 的优化处理
  • 开启智能能效管理:4G 智能计量控制插座的协议对接与私有化部署
  • 36、Python之面向对象:容器类协议与collections.abc
  • Android进阶之路 - app后台切回前台触发超时保护退出登录
  • Java Web —— 第四天(HTTP协议,Tomcat)
  • 关于RCE
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • js ES6 求数组的交集,并集,还有差集
  • Js基础知识(四) - js运行原理与机制
  • Object.assign方法不能实现深复制
  • PHP变量
  • PHP面试之三:MySQL数据库
  • scala基础语法(二)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • select2 取值 遍历 设置默认值
  • webpack+react项目初体验——记录我的webpack环境配置
  • 初识MongoDB分片
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 首页查询功能的一次实现过程
  • No resource identifier found for attribute,RxJava之zip操作符
  • hi-nginx-1.3.4编译安装
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #数据结构 笔记一
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $(function(){})与(function($){....})(jQuery)的区别
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (二)WCF的Binding模型
  • (二)正点原子I.MX6ULL u-boot移植
  • (七)Activiti-modeler中文支持
  • (转)创业的注意事项
  • (转)大型网站架构演变和知识体系
  • (转)视频码率,帧率和分辨率的联系与区别
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net 调用php,php 调用.net com组件 --
  • .NetCore部署微服务(二)
  • .net反混淆脱壳工具de4dot的使用
  • .net中调用windows performance记录性能信息
  • .NET周刊【7月第4期 2024-07-28】
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @TableLogic注解说明,以及对增删改查的影响