LVS--理论+实操

ops/2024/9/24 15:14:15/

 lvs简介

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

lvs集群体系结构

 

工作原理:

VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

lvs集群的类型

lvs-nat:       修改请求报文的目标IP,多目标IPDNAT lvs-dr   操纵封装新的MAC地址

lvs-tun:       在原请求IP报文之外新加一个IP首部

lvs-fullnat  修改请求报文的源和目标IP

nat模式

本质是多目标IPDNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RSRIP PORT实现转发

   RIPDIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP

   请求报文和响应报文都必须经由Director转发, Director易于成为系统瓶颈

   支持端口映射,可修改请求报文的目标PORT

  VS必须是Linux系统, RS可以是任意OS系统

nat模式数据逻辑

1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 9000port

2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RSRIP和相应端口

3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 9000port

4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP,响应目标端口(9000-->80 5.VS服务器把修改过报文的响应数据包回传给客户端

6.lvsNAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,IPVS存在后访问请求在通 PREROUTING后被ipvs结果并作nat转发

因为ipvs的作用点是在PREROUTINGINPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工作。所以在做lvs时要把iptables的火墙策略全清理掉。

DR模式

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

DR模式数逻辑

 

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

DR模式数据传输过程

 1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIPMAC

2.VS调度主机接收到数据帧后把帧中的VIPMAC该为RS1MAC,此时帧中的数据为客户端IP+客户端 MAC+VIP+RS1MAC

3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容VIP+RS1MAC+客户端IP+客户端IP MAC

DR模式的特点

1.Director和各RS都配置有VIP

2.确保前端路由器将目标IPVIP的请求报文发往Director 

3.在前端网关做静态绑定VIPDirectorMAC地址

4.RS的RIP可以使用私网地址,也可以是公网地址; RIPDIP在同一IP网络; 5.RIP的网关不能指向DIP,以确保响应报文不会经由Director

6.RSDirector要在同一个物理网络

7.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client 8.不支持端口映射(端口不能修败)

TUN模式

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

TUN模式数据传输过程

1.客户端发送请求数据包,包内有源IP+vip+dport

2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含 TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1

3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP CIP +port,响应数据包通过网络直接回传给client

 lvs的调度算法

静态方法:仅根据算法本身进行调度,不考虑RS的负载情况

动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度

lvs静态调度算法

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

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

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

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

lvs动态调度算法

1 LC least connections(最少链接发)

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

2WLCWeighted LC(权重最少链接)

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

3SED Shortest Expection Delay,

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

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

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

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

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

lvs实操

lvs的NAT模式

环境图

 lvs主机-----rhel9--两张网卡

 

eth0:172.25.254.100 lvs.timinglee.org NAT模式eth1:192.168.0.100 lvs.timinglee.org 仅主机模式
[root@lvs ~]# cat /etc/NetworkManager/systemconnections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
​
[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@lvs ~]# cat /etc/NetworkManager/systemconnections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1
​
[ipv4]
address1=192.168.0.100/24
method=manual
[root@lvs ~]# nmcli connection reload
[root@lvs ~]# nmcli connection up eth0

webserver1主机----rhel9---仅主机

[root@webserver1 ~]# cat /etc/NetworkManager/systemconnections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
​
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
dns=114.114.114.114;
[root@webserver1 ~]# nmcli connection reload
[root@webserver1 ~]# nmcli connection up eth0

webserver2----rhel9----仅主机

[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
​
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
dns=114.114.114.114;
[root@webserver2 ~]# nmcli connection reload
[root@webserver2 ~]# nmcli connection up eth0
webserver1配置部分
[root@webserver1 ~]# dnf install httpd -y
[root@webserver1 ~]# echo webserver1 - 192.168.0.10 > /var/www/html/index.html
[root@webserver1 ~]# systemctl enable --now httpd

webserver2配置部分

[root@webserver2 ~]# dnf install httpd -y
[root@webserver2 ~]# echo webserver2 - 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd

lvs主机配置部分

[root@lvs ~]# dnf search lvs
[root@lvs ~]# dnf install ipvsadm -y
​
# 查看策略
[root@lvs ~]# ipvsadm -Ln #查看有哪些策略
[root@lvs ~]# cat /etc/sysconfig/ipvsadm # 查看位于 /etc/sysconfig/ 目录下名为 ipvsadm 的文件的内容

ipvsadm命令

核心功能:

集群服务管理:增、删、改

集群服务的RS管理:增、删、改

查看

命令参数

ipvsadm -D -t|u|f service-address 删除 

ipvsadm –C 清空

ipvsadm –R 重载

ipvsadm -S [-n] 保存

lvs集群中的增删改

1.管理集群服务中的增删改

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

-A   #添加

-E    #修改

-t    #tcp服务  -u   #udp服务

-s    #指定调度算法,默认为WLC

-p   #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver -f       #firewall mask 火墙标记,是一个数字

2.管理集群中RealServer的曾增删改

-a      #添加realserver 

-e      #更改realserver

 -t      #tcp协议

-u      #udp协议

-f      #火墙 标签

-r      #realserver地址 

-g      #直连路由模式

-i      #ipip隧道模式

-m      #nat模式

-w      #设定权重

-Z      #清空计数器  

-C      #清空lvs策略 

-L      #查看lvs策略 

-n      #不做解析

--rate :输出速率信息

# -A:用于添加一个新的虚拟服务器  -t:指定了虚拟服务器的地址和端口   -s:指定了调度算法    rr:轮询算法
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr 
[root@lvs ~]# ipvsadm -Ln (有)
# -a:用于向虚拟服务器添加一个新的真实服务器   -t:虚拟服务器的地址和端口   -r:要添加的真实服务器的地址和端口    -m:指定了转发方法,即NAT(网络地址转换)模式
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
# 保存
[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
#永久保存
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

lvs的DR模式 

环境图

 lvsz主机配置

 router主机配置--eth0>nat ----eth1>仅主机

 client1 主机配置---eth0--nat

 lvs内核路由功能打开

[root@lvs ~]# vim  /etc/sysctl.conf

 在lvs 和 webserver1和webserver2中设定vip 

 

 

 RS1RS2中解决响应问题

解决vip响应问题

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:

(1)在前端网关做静态绑定

(2)在各RS使用arptables

(3)在各RS修改内核参数,来限制arp响应和通告的级别

限制响应级别:arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应

1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别:arp_announce

0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告

1:尽量避免将接口信息向非直接连接网络进行通告

2:必须避免将接口信息向非本网络进行通告

 

 lvs中配置策略

 

 防火墙标签解决轮询错误-----火墙mark标记解决调度问题

在webserver1和webserver2中安装mod_ssl并重启apache ]

# yum install mod_ssl -y

# systemctl restart httpd

netstat -antup | grep http

 

lvs中设置调度,因为我们要调度80443两个端口所以我们需要设定两组策略 

先使用ipvsadm -C 清空策略

 lvs主机为端口做标记

[root@lvs ~]# iptables -t mangle -nL

[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
[root@lvs ~]# iptables -t mangle -nL

 

 添加新策略

 再次测试


http://www.ppmy.cn/ops/94885.html

相关文章

https访问需要怎么操作

其实现在很多细心的朋友都会发现,越来越多的网站在访问时,都是https访问而不是http访问,有人知道https和http有什么区别吗? 其实http访问只是最基础的网站访问方式,在使用浏览器访问时,会显示不安全的提示…

激光测距传感器

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、产品原理:二、产品介绍:三、应用特点四、应用案例:1.冶金钢铁板卷材开卷工…

来了,秋天的第一个POC

立秋就这么水灵灵地过了 又到了“秋天的第一杯奶茶”刷屏的时刻 而我们要追求的是“秋天的第一个POC” 做好变强的准备了吗 Yak POC编写,这一篇就够了 文章中指代的POC仅指使用 Yaklang 编程语言编写的POC 在此篇文章中就详细描述 Yaklang 语法的学习了&#x…

vue项目配置基础路由vue-router

1、运行以下命令安装vue-router yarn add vue-router 2、在src目录下的components中新建两个vue页面 3、在src目录下新建router文件夹,在router文件夹下面新建index.js文件 4、配置main.js文件 //引入Vue import Vue from "vue"; //引入App import App…

DVWA | Brute Force(LowMedium)的渗透实践

Brute force主要是通过爆破达到渗透目的&#xff1a; Low 查看源代码&#xff1a; <?phpif( isset( $_GET[ Login ] ) ) {// Get username$user $_GET[ username ];// Get password$pass $_GET[ password ];$pass md5( $pass );// Check the database$query "SE…

【NPM】使用教程

NPM&#xff08;Node Package Manager&#xff09;是一个用于管理JavaScript包的工具&#xff0c;通常与Node.js一起使用。以下是一个简要的NPM使用教程&#xff0c;帮助你快速上手&#xff1a; 1. 安装 Node.js 和 NPM 下载和安装 Node.js&#xff1a; 访问 Node.js官网 下载…

ESP-ADF 开发环境搭建

首先在github上下载esp-adf的工程代码 或者 gitee上下载代码 esp-adf: ESP-ADF 是由乐鑫官方推出的针对 ESP32 和 ESP32-S2 系列芯片的音频开发框架。ESP-ADF 国内镜像仓库,Issues 和 PRs 请仍旧提交到 github。 (gitee.com) 下载后,查看esp-adf\components文件夹下的esp-…

第5章 使用Intent和IntentFilter通信

第5章 使用Intent和IntentFilter通信 本章要点 理解Intent对于Android应用的作用使用Intent启动系统组件Intent的Component属性的作用Intent的Action属性的作用Intent的Category属性的作用为指定Action、Category的Intent配置对应的intent-filterIntent的Data属性Intent的Typ…