LVS集群实现四层负载均衡详解(以nat,dr模式为例)

embedded/2024/12/22 13:53:06/

目录

一、LVS集群的介绍

1、LVS 相关术语:

lvs%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86-toc" style="margin-left:40px;"> 2、lvs四层负载均衡工作原理

3、相关名词概念

lvs%E9%9B%86%E7%BE%A4%E7%9A%84%E7%B1%BB%E5%9E%8B-toc" style="margin-left:40px;"> 4、lvs集群的类型

lvs%E7%9A%84nat%E6%A8%A1%E5%BC%8F-toc" style="margin-left:0px;">二、lvs的nat模式

 1、介绍:

 2、数据逻辑:

3、nat实验部署 

环境搭建: 

lvs%E4%B8%AD%E8%A6%81%E5%8E%BB%E6%89%93%E5%BC%80%E5%86%85%E6%A0%B8%E8%B7%AF%E7%94%B1%E5%8A%9F%E8%83%BD%EF%BC%8C%E5%AE%9E%E7%8E%B0%E7%BD%91%E7%BB%9C%E4%BA%92%E8%81%94%E3%80%82-toc" style="margin-left:80px;">1、lvs中要去打开内核路由功能,实现网络互联。

2、在web1,web2上安装配置httpd服务

lvs%E4%B8%8A%E9%9D%A2%E9%85%8D%E7%BD%AEipvsadm-toc" style="margin-left:80px;">3、在lvs上面配置ipvsadm

4、用nat ip 172.25.254.100 进行测试

lvs%E7%9A%84dr%E6%A8%A1%E5%BC%8F-toc" style="margin-left:0px;">三、lvs的dr模式

1、详细介绍

2、dr的工作原理

3、dr模式部署 

环境准备:

1、网络配置:

2、下载需要的服务,并启动

3、设置VIP,并解决vip响应问题

lvs%E4%B8%8A%E9%85%8D%E7%BD%AEipvsadm%E7%AD%96%E7%95%A5%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1---%E7%9B%B4%E8%BF%9E%E8%B7%AF%E7%94%B1-toc" style="margin-left:80px;">3、在lvs上配置ipvsadm策略负载均衡---直连路由

测试

 四、防火墙标签解决轮询错误

1、出现的错误

1、web1,web2安装mod_ssl,配置https服务

2、添加ipvsadm的443端口策略, 

3、测试查看,就出现了问题,我们的轮询就没有起到作用。

2、使用防火墙标记来解决

添加一条防火墙标记规则:

最后在修改ipvsadm策略,使用该标记策略:

测试,然后我们现在就解决了轮询的问题了。

lvs%E7%9A%84%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95%C2%A0-toc" style="margin-left:0px;">五、lvs的调度算法 

lvs%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95%E7%B1%BB%E5%9E%8B%EF%BC%9A-toc" style="margin-left:40px;">lvs调度算法类型:

lvs%E9%9D%99%E6%80%81%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95-toc" style="margin-left:40px;"> 1、lvs静态调度算法

lvs%E5%8A%A8%E6%80%81%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95-toc" style="margin-left:40px;"> 2、lvs动态调度算法


一、LVS集群的介绍

集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据 和代码都是一样的 。
Cluster: 集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统
Cluster常见的三种类型:
LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
HA:High Availiablity(高可用)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(高性能计算,国家战略资源)

1、LVS 相关术语:

LVS:Linux Virtual Server,负载调度器,内核集成。

VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务

lvs%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86"> 2、lvs四层负载均衡工作原理

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

LVS(Linux Virtual Server)主要通过负载均衡技术,将来自客户端的请求转发给后端服务器,从而提供高性能、高可用的服务器集群服务。

LVS是Linux操作系统中一个优秀的负载均衡项目,它利用IP负载均衡技术,有效地将到达的请求分发到不同的服务器上,以实现高性能和高可用性。LVS的核心组件包括负载调度器(Load Balancer)、服务器池(Server Pool)和共享存储(Shared Storage)。请求首先到达负载调度器,然后根据预设的规则和算法,转发到服务器池中的某一台服务器进行处理。

3、相关名词概念

  • VSVirtual Server
  • RSReal Server
  • CIPClient IP
  • VIP: Virtual serve IP VS外网的IP
  • DIP: Director IP VS内网的IP
  • RIP: Real server IP
访问流程: CIP <--> VIP == DIP <--> RIP

lvs%E9%9B%86%E7%BE%A4%E7%9A%84%E7%B1%BB%E5%9E%8B"> 4、lvs集群的类型

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

下面我们来介绍一下lvs的nat模式。

lvs%E7%9A%84nat%E6%A8%A1%E5%BC%8F">二、lvs的nat模式

 1、介绍:

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

 2、工作原理

  • 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 的作用点是在 PREROUTING INPUT 链之间,所以如果在 prerouting 中设定规则会干扰 ipvs的工作。所以在做 lvs 时要把 iptables 的火墙策略全清理掉。

3、nat实验部署 

拓扑图

环境要求:

准备3台Linux虚拟机:

 一台作lvs调度器进行负载均衡策略,其中要有2个网卡,一个为nat模式,一个为仅主机模式。

其他两台都为仅主机模式提供httpd服务,最终要实现的时在lvs上实现通过172.25.254.100,进行nat模式实现负载均衡。

Web服务器网关指向192.168.0.100
后端web服务器不需要连接外网

环境搭建: 

主机名
ipvip角色
lvs192.168.0.100172.25.254.100
调度器( VS
web1192.168.0.10null
真实服务器 RS
web2192.168.0.20null
真实服务器 RS
node4172.25.254.130
测试机

注意:在进行lvs负载均衡部署时,环境一定要成功没问题。!!!!

lvs%E4%B8%AD%E8%A6%81%E5%8E%BB%E6%89%93%E5%BC%80%E5%86%85%E6%A0%B8%E8%B7%AF%E7%94%B1%E5%8A%9F%E8%83%BD%EF%BC%8C%E5%AE%9E%E7%8E%B0%E7%BD%91%E7%BB%9C%E4%BA%92%E8%81%94%E3%80%82">1、lvs中要去打开内核路由功能,实现网络互联。

[root@lvs ~]#vim /etc/sysctl.conf
#添加
net.ipv4.ip_forward = 1 
#查看
[root@lvs ~]#sysctl -p
net.ipv4.ip_forward = 1

2、在web1,web2上安装配置httpd服务

#web1上面,
[root@web1 ~]#dnf install httpd -y
[root@web1 ~]# echo web1 10 > /var/www/html/index.html
[root@web1 ~]# systemctl enable --now httpd#web2上面,
[root@web2 ~]#dnf install httpd -y
[root@web2 ~]# echo web2 20 > /var/www/html/index.html
[root@web2 ~]# systemctl enable --now httpd

lvs%E4%B8%8A%E9%9D%A2%E9%85%8D%E7%BD%AEipvsadm">3、在lvs上面配置ipvsadm

#下载服务
[root@lvs ~]#yum install ipvsadm -y
#-s 调度算法 rr 轮询 -t 使用tcp协议 ,添加策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -Ln
[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 -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 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs ~]# systemctl enable --now ipvsadm.service 

 ipvsadm 的详细用法将在后面介绍哦,现在先使用。

4、用nat ip 172.25.254.100 进行测试

以上就成功啦,实现简单的负载均衡,上面web服务写成不一样是为了实验结果明显,在企业中其内容一般都是一样的,这样就可以实现我们需要负载均衡的效果 。

但是这样就会导致中间lvs的压力过大,为了解决这个问题,就出现了dr模式,下面我们来介绍一下dr模式。

lvs%E7%9A%84dr%E6%A8%A1%E5%BC%8F">三、lvs的dr模式

1、详细介绍

DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变。
在LVS-DR模式下,数据包的流向是客户端向目标VIP发送请求,负载均衡器接收后选择后端真实服务器并改写MAC地址,将请求通过局域网发送给该服务器。这种模式中, Virtual Server 与Real Server需要在同一个网络中,并且都配置有VIP地址。由于所有的请求报文经由 Virtual Server 调度,而响应报文直接由Real Server发出,因此可以减轻 Virtual Server 的压力,提高系统的可扩展性和效率。
综上所述,就是在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs上都要有vip

2、dr的工作原理

工作原理:

① 客户端将请求发往负载均衡器,请求报文源地址是CIP,目标地址为VIP;

② 负载均衡器收到报文后,将客户端请求报文的源 MAC 地址改为自己 DIP 的 MAC 地址,目标 MAC 改为了 RIP 的 MAC 地址,并将此包发送给 RS;

③ RS 处理完请求报文后,将响应报文通过 lo 接口送给 路由器网关,直接发送给客户端。

数据流向:

  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。
特点:
1.Director 和各 RS 都配置有 VIP
2. 确保前端路由器将目标 IP VIP 的请求报文发往 Director
3. 在前端网关做静态绑定 VIP Director MAC 地址

4.RSRIP可以使用私网地址,也可以是公网地址;RIPDIP在同一IP网络;

5.RIP 的网关不能指向 DIP ,以确保响应报文不会经由 Director
6.RS Director 要在同一个物理网络
7. 请求报文要经由 Director ,但响应报文不经由 Director ,而由 RS 直接发往 Client
8. 不支持端口映射(端口不能修败)
9.RS 可使用大多数 OS 系统。

3、dr模式部署 

环境准备:

本次实验需要准备5台Linux虚拟机,分别作为client,router(路由器服务),lvs调度器,web1,web2.。其具体网卡,IP要求如下图表所示:除了=了具体每个虚拟机自己网卡的IP,其lvs,web1,web2要共同有一个虚拟IP(VIP)。还有就是网关都要指向路由器。

 那么现在在每台虚拟机上查看网络配置:

1、网络配置:

 client:查看网卡IP和路由

[root@client system-connections]# cat ens160.nmconnection 
[connection]
id=ens160
type=ethernet
interface-name=ens160[ipv4]
#IP和网关
address1=172.25.254.200/24,172.25.254.100
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.100  0.0.0.0         UG    100    0        0 ens160
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160

 router:查看网卡IP,并配置路由内核功能net.ipv4.ip_forward = 1

[root@router system-connections]# cat ens160.nmconnection 
[connection]
id=ens160
type=ethernet
interface-name=ens160[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@router system-connections]# cat ens224.nmconnection 
[connection]
id=ens224
type=ethernet
interface-name=ens224[ipv4]
address1=192.168.0.100/24
method=manual#路由内核功能添加net.ipv4.ip_forward = 1
[root@router ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1

 lvs:查看网卡IP和路由

[root@lvs system-connections]# cat ens224.nmconnection 
[connection]
id=ens224
type=ethernet
interface-name=ens224[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
dns=114.114.114.114;[root@lvs ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 ens224
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens224

web1:查看网卡IP和路由

[root@web1 system-connections]# cat ens224.nmconnection 
[connection]
id=ens224
type=ethernet
interface-name=ens224[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
dns=114.114.114.114;[root@web1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 ens224
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens224

web2:查看网卡IP和路由

[root@web2 system-connections]# cat ens224.nmconnection 
[connection]
id=ens224
type=ethernet
interface-name=ens224[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
dns=114.114.114.114;[root@web1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.100   0.0.0.0         UG    100    0        0 ens224
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens224

2、下载需要的服务,并启动

(1)在lvs上面下载 ipvsadm

#下载服务
[root@lvs ~]#yum install ipvsadm -y
[root@lvs ~]# systemctl enable --now ipvsadm.service 

(2)在web1,web2上安装配置httpd服务

#web1上面,
[root@web1 ~]#dnf install httpd -y
[root@web1 ~]# echo web1 10 > /var/www/html/index.html
[root@web1 ~]# systemctl enable --now httpd#web2上面,
[root@web2 ~]#dnf install httpd -y
[root@web2 ~]# echo web2 20 > /var/www/html/index.html
[root@web2 ~]# systemctl enable --now httpd

3、设置VIP,并解决vip响应问题

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
  • (1)在前端网关做静态绑定
  • (2)在各RS使用arptables
  • (3)在各RS修改内核参数,来限制arp响应和通告的级别

 本次实验是通过限制arp来实现:

限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告

 先在lvs,web1,web2上设置环回网卡的虚拟IP(vip)

[root@lvs ~]# ip a a 192.168.0.200/32 dev lo
[root@web1 ~]# ip a a 192.168.0.200/32 dev lo
[root@web2 ~]# ip a a 192.168.0.200/32 dev lo[root@lvs ~]# ip ad
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

配置arp限制来解决VIP响应的问题:

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

lvs%E4%B8%8A%E9%85%8D%E7%BD%AEipvsadm%E7%AD%96%E7%95%A5%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1---%E7%9B%B4%E8%BF%9E%E8%B7%AF%E7%94%B1">3、在lvs上配置ipvsadm策略负载均衡---直连路由

lvs中配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 1
[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.200:80 rr
-> 192.168.0.10:80 Route 1 0 0
-> 192.168.0.20:80 Route 1 0 0

然后我们的dr的策略就做好了,然后我们测试看看

测试

在client上进行测试,,以下就是我们测试成功的页面,但是不能具体看到其mac地址的变化,具体我们可以是使用wireshark进行抓包分析。并且通过抓包可以看出全程源目IP并没有发生变化,只有mac地址在不断变化,mac地址都是通过路由器进行转发。

 四、防火墙标签解决轮询错误

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题当我第一次访问80被轮询到RS1,然后下次访问443仍然可能还被轮询到RS1上。这样我们设置的轮询就没有作用了,为了解决这个问题我们可以使用防火墙标签来解决,将80和443端口一起合并为一个服务来进行轮询。
下面我们来看一下在实验中其轮询出现的错误:

1、出现的错误

实验环境就用上面lvs的dr模式的5个Linux虚拟机,只需要在web1,web2上添加配置https,并在lvs上面添加443端口的策略。

1、web1,web2安装mod_ssl,配置https服务

#安装
[root@web1 ~]# dnf install mod_ssl -y
[root@web2 ~]# dnf install mod_ssl -y#重启查看服务
[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# netstat -lntup | grep httpd
tcp6       0      0 :::443                  :::*                    LISTEN      3202/httpd          
tcp6       0      0 :::80                   :::*                    LISTEN      3202/httpd
#重启查看服务
[root@web2 ~]# systemctl restart httpd
[root@web2 ~]# netstat -lntup | grep httpd
tcp6       0      0 :::443                  :::*                    LISTEN      3261/httpd          
tcp6       0      0 :::80                   :::*                    LISTEN      3261/httpd

2、添加ipvsadm的443端口策略, 

#添加443端口的策略,80我们在上面已经写过了这里就可以直接使用
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g -w 1
[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.200:80 rr-> 192.168.0.10:80              Route   1      0          0         -> 192.168.0.20:80              Route   2      0          0         
TCP  192.168.0.200:443 rr-> 192.168.0.10:443             Route   1      0          0         -> 192.168.0.20:443             Route   1      0          0  

3、测试查看,就出现了问题,我们的轮询就没有起到作用。

#使用 -k访问https,可以忽略加密
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web2 20
web2 20
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
web2 20
web2 20

2、使用防火墙标记来解决

主要是在lvs调度器上配置,让80和443成为一个整体。

语法:
iptables  -t  mangle  -A  PREROUTING  -d  $vip  -p  $proto  -m  multiport  --dports 
$portl ,$port2 ,.. -i  MARK  --set-mark   NUMBER

 我们可以先查看一下 mangle表的规则如下:

[root@lvs ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         Chain 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 

添加一条防火墙标记规则:

#443和80一起,MARK target 可用于给特定的报文打标记,--set-mark value
[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
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
MARK       tcp  --  0.0.0.0/0            192.168.0.200        multiport dports 80,443 MARK set 0x42

最后在修改ipvsadm策略,使用该标记策略:

#清空之前的
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn#添加新的
[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.20 -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  66 rr-> 192.168.0.10:0               Route   1      0          0         -> 192.168.0.20:0               Route   1      0          0 

测试,然后我们现在就解决了轮询的问题了。

下面我们来介绍一下lvs的一些调度算法:

lvs%E7%9A%84%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95%C2%A0">五、lvs的调度算法 

lvs%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95%E7%B1%BB%E5%9E%8B%EF%BC%9A">lvs调度算法类型:

ipvs scheduler :根据其调度时是否考虑各 RS 当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑 RS 的负载情况
动态方法:主要根据每 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 将被调度

lvs%E9%9D%99%E6%80%81%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95"> 1、lvs静态调度算法

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

lvs%E5%8A%A8%E6%80%81%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95"> 2、lvs动态调度算法

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

  • 1LCleast connections(最少链接发)
   适用于长连接应用 Overhead (负载值) =activeconns (活动链接数) x 256+inactiveconns(非活动链接数)
  • 2WLCWeighted LC(权重最少链接)
             默认调度方法 Overhead=(activeconns x 256+inactiveconns)/weight
  • 3SEDShortest Expection Delay,
        初始连接高权重优先 Overhead=(activeconns+1+inactiveconns) x 256/weight
 但是,当 node1 的权重为 1 node2 的权重为 10 ,经过运算前几次的调度都会被 node2 承接
  • 4NQNever Queue,第一轮均匀分配,后续SED
  • 5LBLCLocality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
  • 6LBLCRLBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS


http://www.ppmy.cn/embedded/93742.html

相关文章

scrapy实战

免责声明 本文的爬虫知识仅用于合法和合理的数据收集&#xff0c;使用者需遵守相关法律法规及目标网站的爬取规则&#xff0c;尊重数据隐私&#xff0c;合理设置访问频率&#xff0c;不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失&#xff0c;由使用…

Git 常用命令指南:从入门到精通

文章目录 前言1. 初始化一个Git仓库2. 克隆远程仓库3. 查看仓库状态4. 添加文件到暂存区5. 提交代码6. 推送到远程仓库7. 拉取远程仓库的更改8. 分支管理9. 查看提交历史10. 回退到某个版本结语 前言 如果你是一位开发者或者对代码感兴趣&#xff0c;那么你一定听说过Git。Git…

10个html+css+js 绚丽按钮合集(1)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享10个htmlcssjs 绚丽按钮合集(1) 创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文章目录 10个htmlcssjs 绚丽按钮第1个&#xff1a;效果&#xff…

[Meachines] [Easy] SwagShop Magento SQLI+Magento 反序列化RCE+vi权限提升

信息收集 IP AddressOpenping Ports10.10.10.140TCP:22,80 $ nmap -p- 10.10.10.140 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 b6:55:2b:d2…

【ARM CoreLink 系列 4.1 -- NIC-400 控制器详细介绍】

请阅读【ARM AMBA 总线 文章专栏导读】 文章目录 QoS-400 Advanced Quality of Service可编程的 QoS 功能读写请求的调节配置化的 QoS 选项无额外周期的延迟QVN-400(QoS Virtual Networks)防止系统内的流量拥塞支持配置多达八个虚拟网络TLX-400 Thin LinksTLX 主要能特点上篇文…

FLUX.1 实测,堪比 Midjourney 的开源 AI 绘画模型,无需本地显卡,带你免费实战

要列举 AI 绘画开源界的几个关键贡献&#xff0c;一定少不了 Stable Diffusion。 还记否前不久刚推出的 Stable Diffusion 3&#xff1f; 其背后的团队 Stability AI&#xff0c;真的是一波三折&#xff0c;其核心成员出走&#xff0c;成立了一个新公司&#xff1a;Black For…

Docker学习概述:开启自动化运维之旅

目录 学习目标 为什么会出现Docker&#xff1f; 历史 作用 学习目标 Docker作为一个轻量级、可移植的容器化平台&#xff0c;它的学习目标主要集中在以下几个方面&#xff1a; 理解容器化的概念&#xff1a;掌握容器与虚拟机的区别&#xff0c;以及容器化带来的优势。掌握…

java学习记录

一、修改数据 1.当修改数据时&#xff0c;会先判断该属性是否存在或者是否为空串 <update id"editStaffItem">update staff<set><if testname!null and name!"">name#{name},</if><if test"salary!null">salary#…