超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验
目录
- 前言
- 系统性能扩展方式
- 集群Cluster
- 分布式
- 集群与分布式
- 四层转发与七层转发的区别
- LVS(Linux virual server)
- 一、LVS介绍
- LVS相关概念
- 二、LVS集群结构体系
- 1. 负载均衡层(Load Balancer)
- 2. 服务器群组层(Server Pool/Server Array)
- 3. 后端共享存储层(Backend Storage/Shared Storage)
- 三、lvs的调度算法
- lvs调度算法类型
- lvs静态调度算法
- lvs动态调度算法
- 四、LVS集群的类型
- 五、NAT模式
- 1.NAT模式介绍
- 2.NAT模式数据逻辑
- 3.NAT模式实验详解
- Ⅰ、实验环境
- Ⅱ、配置命令
- 六、DR模式
- 1.DR模式介绍
- 2.DR模式特点
- 3.DR模式数据逻辑
- 4.DR模式实验详解
- Ⅰ、实验环境
- Ⅱ、配置实验环境
- Ⅲ、解决vip问题
- Ⅳ、配置详情
- 七、TUN模式
- 1.TUN模式介绍
- 2.TUN模式数据逻辑
- 八、fullnat模式
- 九、防护墙标签解决轮询错误问题
- 问题引出
- 问题解决
- 十、ipvsadm命令常用选项
前言
系统性能扩展方式
集群Cluster
Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
Cluster常见的三种类型:
-
LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
-
HA:HighAvailiablity(高可用)SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
SLA:Service level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服
务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在
常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一
些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外
停机时间 -
HPC:High-performance computing(高性能计算,国家战略资源,不在课程范围内)
分布式
分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用
- 分布式应用-服务按照功能拆分,使用微服务
- 分布式静态资源–静态资源放在不同的存储集群上
- 分布式数据和存储–使用key-value缓存系统
- 分布式计算–对特殊业务使用分布式计算,比如Hadoop集群
集群与分布式
- 集群: 同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据
和代码都是一样的 - 分布式: 一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务 - 分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数
来提升效率 - 对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器
完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决
定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,
都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败
四层转发与七层转发的区别
四层转发: 四层转发是指在传输层(TCP/IP层)进行负载均衡,是基于传输层的负载均衡,常用的设备包括硬件负载均衡器(如F5、Cisco等)和软件负载均衡器(如Nginx、HAProxy等)。它主要根据传输层的源IP地址、目标IP地址、源端口和目标端口等信息来进行负载均衡。四层转发可以实现基于网络协议和端口的负载均衡,但无法深入到应用层进行更精细的流量分发。
七层转发: 七层转发是指在应用层进行负载均衡,它可以深入到应用层的协议和数据进行分析和处理,是基于应用层的负载均衡,常用的设备包括应用交付控制器(ADC,如F5 BIG-IP等)和应用层负载均衡软件(如Nginx、HAProxy等)。。七层转发可以根据HTTP请求头、URL、Cookie等信息进行负载均衡,从而实现更精细的流量分发和更灵活的策略配置。七层转发可以根据具体的应用需求进行定制化配置,适用于复杂的应用场景。
LVS(Linux virual server)
一、LVS介绍
LVS(Linux Virtual Server)是一个开源的负载均衡软件,可以用于在Linux系统上构建高可用、高性能的应用服务器集群。
LVS基于Linux内核的IP负载均衡技术,通过将客户端请求导向一组后端服务器(称为真实服务器),从而实现对客户端请求的负载均衡。LVS支持多种负载均衡算法,如轮询、权重、哈希等,可以根据实际需求选择最合适的算法。
LVS的架构包括调度器(负载均衡器)、虚拟服务器和真实服务器。调度器负责接收客户端请求,并根据负载均衡算法将请求发送给合适的虚拟服务器。虚拟服务器是一个虚拟的IP地址和端口,可以对外提供服务。真实服务器是实际处理客户端请求的服务器,可以是一台或多台。
LVS相关概念
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(Linux Virtual Server)集群的体系结构通常被划分为三个主要层次:负载均衡层、服务器群组层(或称为服务器池)、以及后端共享存储层。
1. 负载均衡层(Load Balancer)
功能: 作为整个集群系统的前端,负责接收来自客户端的请求,并根据预设的调度算法将请求分发到后端的服务器群组中。
组成: 通常由一个或多个负载调度器(Director Server)组成,这些调度器上安装了LVS模块,用于实现负载均衡功能。此外,还可能包含备份调度器(Backup Load Balancer),以确保在主调度器故障时能够接替其工作。
特点: 调度器通过IP负载均衡技术或基于内容的请求分发技术,将请求转发到最合适的服务器上。同时,调度器还负责监控后端服务器的健康状况,并在检测到故障时将其从调度列表中剔除。
2. 服务器群组层(Server Pool/Server Array)
功能: 由一组实际运行应用服务的服务器组成,这些服务器负责处理来自负载均衡层转发的请求,并返回响应数据。
组成: 服务器群组可以包含多种类型的服务器,如WEB服务器、MAIL服务器、FTP服务器、DNS服务器等。这些服务器通过高速的LAN或WAN相连接,以确保数据的高效传输。
特点: 服务器群组中的服务器可以根据需要动态增加或减少,以适应不同的负载需求。同时,服务器之间的负载均衡和容错机制可以确保系统的高可用性和稳定性。
3. 后端共享存储层(Backend Storage/Shared Storage)
功能: 为服务器群组提供一个共享的存储区,使得所有服务器都能够访问相同的数据和服务。
组成: 通常由磁盘阵列设备或分布式文件系统组成,以提供高可用性和可扩展的存储解决方案。
特点: 共享存储层可以确保数据的一致性和完整性,同时减少数据复制和更新的开销。此外,它还可以支持多种数据访问协议和接口,以满足不同应用的需求。
+-----------------+
| 负载均衡层 |
| (Load Balancer)|
| +----+ +----+ |
| | LB1| | LB2| |(LB2为备份)
| +----+ +----+ |
+-----------------+ | | 转发请求 v
+-----------------+
| 服务器群组层 |
| (Server Pool/ |
| Server Array) |
| +----+ +----+ |
| | RS1| | RS2| |
| +----+ +----+ |
| ... ... |
| +----+ +----+ |
| | RSN| | RSN+1| |
| +----+ +----+ |
+-----------------+ | | 访问共享数据 v
+-----------------+
| 后端共享存储层 |
| (Backend Storage)|
| +------------+ |
| | 磁盘阵列/ | |
| | 分布式FS | |
| +------------+ |
+-----------------+
三、lvs的调度算法
lvs调度算法类型
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
静态方法: 仅根据算法本身进行调度,不考虑RS的负载情况
动态方法: 主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
lvs静态调度算法
1、RR: roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
2、WRR: Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
3、SH: Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往
第一次挑中的RS,从而实现会话绑定
4、DH: Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请
求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
lvs动态调度算法
主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
1、LC: least connections(最少链接发)
适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活
动链接数)
2、WLC: Weighted LC(权重最少链接)
默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
3、SED: 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: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
五、NAT模式
1.NAT模式介绍
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
支持端口映射,可修改请求报文的目标PORT
VS必须是Linux系统,RS可以是任意OS系统
2.NAT模式数据逻辑
1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口(9000port)
2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口(9000port)
4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1–>VIP),响应目标端口(9000–>80)
5.VS服务器把修改过报文的响应数据包回传给客户端
6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞
3.NAT模式实验详解
1.Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连
2.Web服务器采用仅主机网卡与director相连
3.Web服务器网关指向192.168.0.100
4.后端web服务器不需要连接外网
Ⅰ、实验环境
主机名 | 角色 | IP |
---|---|---|
LVS | 调度器(vs) | 192.168.0.100/24,vip 172.25.254.100/24 |
webserver1 | 真实服务器1(RS) | 192.168.0.10/24,GW 192.168.0.100 |
webserver2 | 真实服务器2(RS) | 192.168.0.20/24,GW 192.168.0.100 |
client | 测试机 | 本地 |
Ⅱ、配置命令
0.webserver1、webserver2配置
#webserver1 网卡配置
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual#webserver1 http配置
[root@webserver1 ~]# yum install httpd -y
[root@webserver1 ~]# echo this is 192.168.0.10 > /var/www/html/index.html#webserver2 同理
[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[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo this is 192.168.0.20 > /var/www/html/index.html
1.在lvs中启用内核路由功能
[root@lvs ~]# sysctl -a | grep ip_forward #查看打开内核路由功能的命令
net.ipv4.ip_forward = 0 # 0表示关闭,1表示打开
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0[root@lvs ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf #修改配置文件
[root@lvs ~]# sysctl -p #加载参数
net.ipv4.ip_forward = 1
2.在lvs中安装ipvsadm
[root@lvs ~]# yum install ipvsadm -y
3,在lvs中添加调度策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[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
4.查看策略
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr-> 192.168.0.10:80 Masq 1 0 0 -> 192.168.0.20:80 Masq 1 0 0 [root@lvs ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP AC19FE64:0050 rr -> C0A80014:0050 Masq 1 0 3 -> C0A8000A:0050 Masq 1 0 2 [root@lvs ~]# cat /proc/net/ip_vs_conn
Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires PEName PEData
TCP AC19FE01 C777 AC19FE64 0050 C0A8000A 0050 TIME_WAIT 9
TCP AC19FE01 C779 AC19FE64 0050 C0A8000A 0050 TIME_WAIT 9
TCP AC19FE01 C778 AC19FE64 0050 C0A80014 0050 TIME_WAIT 9
TCP AC19FE01 C776 AC19FE64 0050 C0A80014 0050 TIME_WAIT 9
TCP AC19FE01 C77A AC19FE64 0050 C0A80014 0050 TIME_WAIT 9
5.保存规则
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
6.测试 (在本地shell下)
[C:\~]$ for /L %i in (1,1,4) do (curl 172.25.254.100)C:\Users\21116\Documents\NetSarang Computer\7\Xshell\Sessions>(curl 172.25.254.100 ) % Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 21 100 21 0 0 7945 0 --:--:-- --:--:-- --:--:-- 10500
this is 192.168.0.10C:\Users\21116\Documents\NetSarang Computer\7\Xshell\Sessions>(curl 172.25.254.100 ) % Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 21 100 21 0 0 8070 0 --:--:-- --:--:-- --:--:-- 10500
this is 192.168.0.20C:\Users\21116\Documents\NetSarang Computer\7\Xshell\Sessions>(curl 172.25.254.100 ) % Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 21 100 21 0 0 7933 0 --:--:-- --:--:-- --:--:-- 10500
this is 192.168.0.10C:\Users\21116\Documents\NetSarang Computer\7\Xshell\Sessions>(curl 172.25.254.100 ) % Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 21 100 21 0 0 7903 0 --:--:-- --:--:-- --:--:-- 10500
this is 192.168.0.20
六、DR模式
1.DR模式介绍
DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs上都要有vip
2.DR模式特点
1.Director和各RS都配置有VIP
2.确保前端路由器将目标IP为VIP的请求报文发往Director
3.在前端网关做静态绑定VIP和Director的MAC地址
- 在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
- 在RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_annou
4.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络
5.RIP的网关不能指向DIP,以确保响应报文不会经由Director
6.RS和Director要在同一个物理网络
7.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
8.不支持端口映射(端口不能修改)
9.RS可使用大多数OS系统
3.DR模式数据逻辑
1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC
3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC
4.DR模式实验详解
1.Director服务器采用双IP桥接网络,一个是VPP,一个DIP
2.Web服务器采用和DIP相同的网段和Director连接
3.每个Web服务器配置VIP
4.每个web服务器可以出外网
Ⅰ、实验环境
主机名 | ip | vip | 角色 |
---|---|---|---|
client | 172.25.254.10 vmware NAT | null | 测试主机 |
router | NAT-eth0:172.25.254.100,仅主机eth1:192.168.0.10 | null | 路由器 |
lvs | 192.168.0.200,GW 192.168.0.10 仅主机 | lo:192.168.0.100 | 调度器 |
webserver1 | 192.168.0.101,GW 192.168.0.10 仅主机 | lo:192.168.0.100 | web服务器1 |
webserver2 | 192.168.0.102, GW 192.168.0.10 仅主机 | lo:192.168.0.100 | web服务器2 |
Ⅱ、配置实验环境
#在客户端主机中为nat模式网卡
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.10/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@client ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.2 0.0.0.0 UG 100 0 0 eth0
172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
#在路由主机中设定双网卡,eth0为nat网卡,eth1为仅主机网卡
[root@router ~]# cat /etc/NetworkManager/system-connections/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@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.10/24
method=manual
[root@router ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.2 0.0.0.0 UG 100 0 0 eth0
172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1
#对于dr调度器设定网卡为仅主机模式
[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.200/24,192.168.0.10
method=manual
[root@lvs ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1
#对于RS1 RS2的设定网卡为仅主机模式
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.101/24,192.168.0.10
method=manual
[root@webserver1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0---------------------------------------------------------------------------------------
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.102/24,192.168.0.10
method=manual
[root@webserver2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.10 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
Ⅲ、解决vip问题
DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1)在前端网关做静态绑定
(2)在各RS使用arptables
(3)在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别:arp_ignore
- 0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
- 1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别:arp_announce
- 0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
- 1:尽量避免将接口信息向非直接连接网络进行通告
- 2:必须避免将接口信息向非本网络进行通告
Ⅳ、配置详情
1.在lvs 和 rs 中设定vip
[root@lvs ~]# ip addr add dev lo 192.168.0.100/32
[root@webserver1 ~]# ip addr add dev lo 192.168.0.100/32
[root@webserver2 ~]# ip addr add dev lo 192.168.0.100/32
2.在RS1和RS2中解决响应问题
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
3.在lvs中配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g -w 2
[root@lvs ~]# 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.100:80 wrr-> 192.168.0.101:80 Route 1 0 0 -> 192.168.0.102:80 Route 2 0 0
4.在client中测试效果
[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.100
> done
webserver1 192.168.0.101
webserver2 192.168.0.102
webserver2 192.168.0.102
webserver1 192.168.0.101
webserver2 192.168.0.102
webserver2 192.168.0.102
webserver1 192.168.0.101
webserver2 192.168.0.102
webserver2 192.168.0.102
webserver1 192.168.0.101
七、TUN模式
1.TUN模式介绍
LVS-TUN模式:它的连接调度和管理与VS/NAT中的一样,利用ip隧道技术的原理,即在原有的客户端请求包头中再加一层IP Tunnel的包头ip首部信息,不改变原来整个请求包信息,只是新增了一层ip首部信息,再利用路由原理将请求发给RS server,不过要求的是所有的server必须支持”IPTunneling”或者”IP Encapsulation”协议。
2.TUN模式数据逻辑
整个请求过程示意:
这里假设CIP的CIP地址为:202.10.1.100 ,DIR的Eth1的ip地址为:202.10.1.101, Eth0的ip地址为:192.168.1.100/24 ,RIP1的Eth0地址为:192.168.1.10/24,Eth1的ip地址为:10.10.10.10/24,下面的就讲讲请求细节:
① client向目标vip发出请求,DIR接收。此时IP包头及数据帧头信息如下:
src ip | src port | dst ip | dst port |
---|---|---|---|
202.10.1.10 | 10011 | 202.10.1.101 | 80 |
② DIR根据负载均衡算法选择一台active的RS(RIP1),利用ip tunnel技术将此RIP1所在网卡的ip地址作为目标ip地址,将DIP作为源地址重封装一层IP首部,并记录到hash表中,DIR将请求包发送给RIP1。此时IP包头及数据帧头信息如下:
src ip | dst ip | src ip | src port | dst ip | dst port |
---|---|---|---|---|---|
192.168.1.100 | 192.168.1.10 | 202.10.1.10 | 10011 | 202.10.1.101 | 80 |
③RIP1(192.168.1.10)收到DIR发过来的请求后,拆开后发现请求包中里面还有一层ip包头,并且该ip包头的目标IP(VIP)与本地loopback口地址匹配,于是处理这个报文。随后重新封装报文,通过自己的网关将响应报文发送给客户端,此时IP包头及数据帧头信息如下:
src ip | src port | dst ip | dst port |
---|---|---|---|
202.10.1.101 | 80 | 202.10.1.10 | 10011 |
LVS/TUN模式就是利用ip tunnel技术原理,在不改变原有的ip包头首部信息的基础上再封装一层ip首部信息,再利用路由的原理将请求转交给后端RS server,所以所有的server都必须支持ip tunnel隧道 ,相比LVS/DR模式,LVS/TUN对网络的消耗比较大,因为要支持ip tunnel的开销,所以这也是为什么DR模式是三种模式中效率最高的一种模式。
八、fullnat模式
fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3.请求和响应报文都经由Director
4.支持端口映射
注意:此类型kernel默认不支持
九、防护墙标签解决轮询错误问题
问题引出
以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题
当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上
在RS1和RS2中安装mod_ssl并重启apache
yum install mod_ssl -y
systemctl restart httpd
在lvs中设置调度,因为我们要调度80和443两个端口所以我们需要设定两组策略
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.101:80 -g[root@lvs ~]# 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.100:80 rr-> 192.168.0.101:80 Route 1 0 0 -> 192.168.0.102:80 Route 2 0 0
TCP 192.168.0.100:443 rr-> 192.168.0.101:443 Route 1 0 0 -> 192.168.0.102:443 Route 1 0 0
当我们使用client测试时发现两次连续访问会轮询到同一个服务器上
[root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
webserver2 192.168.0.102
webserver2 192.168.0.102
[root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
webserver1 192.168.0.101
webserver1 192.168.0.101
[root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
webserver2 192.168.0.102
webserver2 192.168.0.102
问题解决
MARK target 可用于给特定的报文打标记
其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服务:可将多个不同的应用使用同一个集群服务进行调度
实现方法:
1.在Director(lvs)主机打标记
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $portl,$port2,..-i MARK --set-mark NUMBER
2.ipvsadm使用 -f 基于火墙标记
ipvsadm -A -f NUMBER [options]
例:在lvs中设置端口标签,将80和443设为整体
[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 123
[root@lvs ~]# iptables -t mangle -nL #查看规则
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
MARK tcp -- 0.0.0.0/0 192.168.0.100 multiport dports 80,443 MARK set 0x7bChain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
再设置调度规则
[root@lvs ~]# ipvsadm -A -f 123 -s rr
[root@lvs ~]# ipvsadm -a -f 123 -r 192.168.0.101 -g
[root@lvs ~]# ipvsadm -a -f 123 -r 192.168.0.102 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 123 rr-> 192.168.0.101:0 Route 1 0 0 -> 192.168.0.102:0 Route 1 0 0
client测试
[root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
webserver2 192.168.0.102
webserver1 192.168.0.101
[root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
webserver2 192.168.0.102
webserver1 192.168.0.101
[root@client ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
webserver2 192.168.0.102
webserver1 192.168.0.101
十、ipvsadm命令常用选项
ipvsadm -A|E -t|u|f <集群服务地址> [-s <调度算法>] [-p <超时时间>] [-M <掩码>] [-b <标志>]ipvsadm -D -t|u|f <集群服务地址>ipvsadm -Cipvsadm -Ripvsadm -S [-n]ipvsadm -a|e -t|u|f <集群服务地址> -r <真实服务器地址> [选项]ipvsadm -d -t|u|f <集群服务地址> -r <真实服务器地址>ipvsadm -L|l [options]ipvsadm -Z [-t|u|f <集群服务地址>]ipvsadm --set <超时时间>ipvsadm --start-daemon <主或备> [--mcast-interface <组播接口>] [--syncid <SID>]ipvsadm --stop-daemon <主或备>ipvsadm -h--add-service -A 添加一个集群服务,需要使用选项--edit-service -E 编辑一个集群服务,需要使用选项--delete-service -D 删除指定集群服务,需要使用选项--clear -C 删除所有集群服务,包括真实服务器转发策略规则--restore -R 从标准输入中恢复策略规则--save -S 保存策略规则到标准输出--add-server -a 添加一个真实服务器,需要使用选项--edit-server -e 编辑一个真实服务器,需要使用选项--delete-server -d 删除一个真实服务器,需要使用选项--list -L|-l 查看集群服务列表,包括真实服务器转发策略规则--zero -Z 计数器清零。清除连接数、包转发等数量统计信息--tcp-service -t <集群服务地址> 允许集群服务使用的传输协议为TCP。<IP:Port>--udp-service -u <集群服务地址> 允许集群服务使用的传输协议为UDP。<IP:Port>--fwmark-service -f <防火墙标识> 使用一个整数值来防火墙标识集群服务,而不是地址、端口和协议使用它,我们可以通过结合IPtables将多个以调度器为目标的端口定义成一个防火墙标识,由ipvsdam通过此项关联标识,则可以实现对一个IP多端口调度,即实现后端服务器可以开放多个服务--scheduler -s scheduler 指定集群服务使用的调度算法:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认为wlc--persistent -p <超时时间> 开启持久化服务,开启它则表示在指定时间内,来自同一IP的请求都会转发到后端同一台真实服务器上--netmask -M <网络掩码> 使用网络掩码来屏蔽持久化来源IP的地址范围,默认值为255.255.255.255,即所有来源IP请求都会享受持久化服务--real-server -r <真实服务器地址> 指定真实服务器的主机IP与端口--gatewaying -g 指定真实服务器转发工作模式,使用DR模式,默认--ipip -i 指定真实服务器转发工作模式,使用TUN模式--masquerading -m 指定真实服务器转发工作模式,使用NAT模式--weight -w <权重值> 指定真实服务器的权重值
相关文章:
超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验
目录 前言系统性能扩展方式集群Cluster分布式集群与分布式 四层转发与七层转发的区别 LVS(Linux virual server)一、LVS介绍LVS相关概念 二、LVS集群结构体系1. 负载均衡层(Load Balancer)2. 服务器群组层(Server Pool…...
信息学奥赛一本通1259:【例9.3】求最长不下降序列
题目: 1259:【例9.3】求最长不下降序列 时间限制: 1000 ms 内存限制: 65536 KB 提交数:51218 通过数: 20928 Special Judge 【题目描述】 设有由n(1≤n≤200)n(1≤n≤200)个不相同的整数组成的数列,记为:b(1)、b(2)、……、…...
星露谷模组开发教程#3 事件
首发于Enaium的个人博客 SMAPI提供了一些事件,比如游戏的内容、显示、输入等事件。这些事件可以让我们在游戏中添加自己的逻辑。这一节我们就来看看如何使用这些事件。 注册一个事件 在SMAPI中,我们可以通过IModHelper的Events属性来注册事件。比如我们…...
C语言程序设计(初识C语言后部分)
愿天下无Bug,秀发常驻。 3)函数的参数 1.实际参数(实参): 真实传给函数的参数,叫实参。 实参可以是:常量、变量、表达式、函数等。 无论实参是何类型的量,在进行函数调用时&#…...
驱动基础开发
1、字符设备传统开发模板 字符设备驱动框架,首先我们需要去用module_init这个宏去修饰整个驱动的入口函数,用module_exit去修饰整个驱动的出口函数,然后还需要用MODULE_LICENSE用于声明模块的许可证类型。 在入口函数里面我们需要注册字符设…...
从苹果AppStore看AI开发者生态
从苹果 App Store 看 AI 开发者生态 在人工智能迅速发展的今天,我们不禁要问:未来的 AI 开发者生态将会是什么样子?为了回答这个问题,我们不妨回顾一下移动互联网时代最成功的开发者生态之一——苹果的 App Store。 通过分析 App …...
【Python学习-UI界面】PyQt5 小部件1-Label
QLabel 对象可用作显示不可编辑的文本、图像或动态GIF影片的占位符。 它还可以用作其他小部件的助记键。 标签可以显示普通文本、超链接或富文本。 1、普通文本 直接双击输入即可 2、添加超链接 选中对应Label,右键选择多信息文本,添加链接,…...
【Linux详解】进度条实现 Linux下git 的远程上传
📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 🚀前言 &#x…...
Android进阶之路 - res、raw、assets 资源解析、区别对比
那天遇到一个资源目录层级的问题,索性重新整理记录一下,希望能帮到如吾往昔之少年的你们,哈哈哈哈哈哈… 一脸茫然,越写越多,时间成本属实有点大,就当一起来基础扫盲吧 resdrawablemipmapvaluescolor asset…...
从数字化到数智化:消费零售企业如何实现门店数智化管理?
随着信息技术的飞速发展,数字化已成为企业转型的必经之路。然而,数字化本身并不是目的,而是通往数智化的桥梁。数智化,即数据智能化,是指企业通过数字化手段收集和分析数据,进而利用这些数据驱动决策和创新…...
Linux中ES的安装
文章目录 一、ES是什么1.1、ES概念介绍1.2、技术架构1.2.1、Lucene介绍 1.3、ES的工作原理1.4、ES的适用场景 二、安装前的配置2.1、创建普通用户2.2、调整文件描述符数量和虚拟内存2.3、设置shell会话的资源限制(软限制和硬限制)2.4、增加虚拟内存的设置…...
Redis远程字典服务器(5) —— hash类型详解
目录 一,hash基本情况 二,hash常用命令详解 2.1 hset,hget,hexists,hdel 2.2 hexists,hdel 2.3 hkeys,hvals 2.4 hgetall,hmget 2.5 hlen,hsetnx 2.6 hincrby&am…...
MySQL | 行锁——记录锁、间隙锁 、临键锁、插入意向锁
1、InnoDB中的行锁 行锁(Row Lock) 也称为记录锁,顾名思义,就是锁住某一行(某条记录row)。需要注意的是,MySQL服务器层并没有实现行锁机制,行级锁只在存储引擎层实现。 优点&#x…...
【网络编程】TCP通信基础模型实现
tcpSer.c #include <myhead.h> #define SER_IP "192.168.119.143" // 设置IP地址 #define SER_PORT 6666 // 设置端口号 int main(int argc, const char *argv[]) {// 1.创建socketint serfd socket(AF_INET, SOCK_STREAM, 0);// 参数1表示ipv4// 参数2表…...
css rem之2024
话题开始前 我们都知道1rem是等于html fontSize标签的字体大小的,我们主要用来做移动端网页设计稿等比例在手机上面的显示。 看到的问题 这个html fontsize的大小是通过js动态计算的,而这个js的运行时晚于html渲染的,所以会导致一个问题&am…...
python自动化笔记:pytest框架
目录 一、pytest介绍二、测试用例命名规则2.1、pytest命名规则2.2、python命名规范 三、pytest运行方式3.1、主函数方式3.2、命令行方式3.3、通过pytest.ini的配置文件运行(常用) 四、跳过测试用例4.1 无条件跳过4.2 有条件跳过 五、用例的前后置&#x…...
wpf 路径动画 举例
先,我们需要在XAML中定义一个Path,这个Path将定义动画的路线。然后,我们将使用DoubleAnimationUsingPath来沿着这个路径移动一个元素(比如一个矩形)。 <Window x:Class"WpfApp.MainWindow" xmlns"…...
【C++】classes and object 2.8 取地址及const取地址操作符重载
这两个默认成员函数一般不用重新定义 ,编译器默认会生成。 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; class Date { public:Date* operator&(){return this;}const Date* operator&()const{return this;} privat…...
milvus helm k8s开启监控
https://milvus.io/docs/monitor.md 文章写的很清晰 ,我这边做一下个人补充,初版可能只是配置,具体的grafana 监控报表后期补一下。 架构如下: values.yaml 配置 enabled: true 改为true metrics:enabled: trueserviceMonitor:…...
牛奶饮用学习笔记
1. 常见牛奶类型 1.1 蒙牛-每日鲜语-0脂肪鲜牛奶 项目每100mL NRV%能量146kJ 能量计算 250 mL 146 kJ / 100 mL 365 kJ 250\text{mL}\times146\text{kJ}/100\text{mL} 365\text{kJ} 250mL146kJ/100mL365kJ 1.2 伊利-舒化-高钙型无乳糖牛奶 项目每100mL NRV%能量269kJ …...
php防止页面重复刷新或者重复提交
2.核心代码 显示的逻辑: //获取防止刷新的唯一标识符,start $intFlag substr(md5(time()),6); $strFlag BAOXIAOSS_.$my_user_id.$intFlag; $smarty->assign(check_is_agin_post, $strFlag); //获取防止刷新的唯一标识符,end注意:前端页面提交加入…...
Springboot3 配置sql打印到控制台
一、pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>3.1.2</version></dependency> 二、application.yml com.lingyang.system # log4j2配…...
深入理解 GO 语言并发
1. 使用并发 在深入了解 Go 如何处理并发之前,先查看并发的概念。在计算机发展的早期阶段,计算机系统只有一个处理器负责执行所有指令。由于这种体系结构,计算机程序被编写成以串行的方式运行,在这种方式下,程序按照预定义的顺序逐个指令地执行。 随着计算机程序变得越来越…...
leetcode39组合总和
题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选…...
【JPCS独立出版,EI稳定检索】2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024,9月27-29)
2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024)将于2024年9月27-29日在中国成都举办。 此次会议将围绕工业机器人、机电技术、机械及制造等领域的最新研究成果展开讨论,并广泛邀请了国内外领域内的著名专家与学者。会议旨在搭建一个…...
Fal.ai Flux 1-Pro/Viva.ai/哩布哩布AI:AI绘图部分免费工具+原图提示词Prompt
目录 #1 找软件 #2 懂提示词 #3 更难的一步,会英文 我个人认为,想要玩文生图,你要会3个步骤: #1 找软件 主流文生图软件:Midjourney、Stable Diffusion、Dall-E 3 巧了,我用的都是小众、免费的画笔工…...
C++学习笔记----2、使用C++进行优雅编程(十)---- 格式化
许多人因为编程风格的问题被搞得焦头烂额,就因为对于在if中使用几个空格争论不休,导致友谊的小船说翻就翻。如果公司有相应的编程规范,只能说你比较幸运。因为有可能你不喜欢这些规范,但做为一个正常人来讲,至少有规范…...
双指针| Java | (hot100) 力扣283, 11, 15, 42做题总结
leetcode 11 盛最多水的容器 双层for循环暴力 超出时间限制 class Solution {public int maxArea(int[] height) {int h0;int v0;for(int i0; i<height.length; i) {for(int ji1; j<height.length; j) {h Math.min(height[i],height[j]);v Math.max(v, h*(j-i));}}…...
matlab求解方程
【MATLAB】求解含有三角函数的方程_matlab求解三角函数方程-CSDN博客 Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别_matlab root-CSDN博客 非线性方程(组):MATLAB内置函数 solve, vpasolve, fsolve, fzero, roots [MATLAB] - GentleMin - …...
MySQL基础--视图,存储过程
介绍 视图是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的 SQL 逻辑,不保存查询结果,所以我…...
推广一个网站周期/针对大学生推广引流
https://blog.csdn.net/qq_15230053/article/details/82720282...
wordpress在线播放电影/短链接购买
这本书中我最感兴趣的一个章节是软件测试,因为寒假的时候我帮助我邻居测试他的软件运行情况,我用他设计的软件,然后提出问题,当我的问题提出后,然后提出应该怎样做用户会比较方便,感觉当时特别有成就感。曾…...
做网站需要实名认证吗/关键词排名优化技巧
导出bcp dbname.tbname out c:\data.sql -T -c导入bcp dbname.tbname inc:\data.sql -T -c转载于:https://www.cnblogs.com/joe-yang/archive/2009/07/20/1527004.html...
淮滨网站建设公司/seo sem是指什么意思
让我们看一下ES2017中引入的一些新语法,以帮助组织有关promise的代码。 在许多情况下,这种新语法(即async和await关键字)将帮助您编写更具可读性和可维护性的异步代码,但这并非没有缺点。 我们将首先研究如何使用async…...
哈尔滨免费建站模板/个人网站注册平台
一.角色以及入口: 角色:系统管理员,开发人员 入口:服务管理--修改服务 二.页面元素检查: 对页面初始化的检查,即页面打开后,对页面不做任何操作时的元素检查。(破页;js错;demo对比等…...
网站死循环/免费网站推广网站破解版
自学部分学习能力强并且有自制力的人还是可以学习成功的,那么如何自学Web前端开发? 我们首先得知道Web前端开发工程师是什么?工作内容有哪些?百度一下就可以知道,Web前端开发主要进行网站开发,优化…...