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

LVS详解

目录

一、LVS简介

LVS 官网:

 二、LVS 负载均衡模式

2.1 LVS-NAT模式:

2.1.1 简介

2.1.2 工作流程图:

 2.1.3 说明:

2.1.4 LVS-NAT的优缺点:

2.2 LVS-DR模式:

2.2.1 简介

2.2.2 工作原理:

2.2.3 工作流程图:

2.2.4 说明:

2.2.5 DR模式的特点:

2.3 LVS-UN模式:

2.3.1 简介

2.3.2 工作步骤:

2.4 LVS-FULLNET 模式

2.4.1 简介

2.4.2 工作流程图:

2.4.3 说明:

2.4.4 LVS-FULLNET模式的优缺点:

2.5 各种模式的区别:

三、调度算法

3.1 LVS调度算法类型:

3.2 LVS静态调度算法:

3.3 LVS动态调度算法:

四、ipvsadm管理工具的使用

4.1 LVS软件相关信息

4.2 用法以及参数:

五、实验案例

5.1 部署NAT模式集群案例

5.1.1 实验环境

5.1.2 配置命令

5.1.2.1 所有主机都进行操作:

5.1.2.2 在client主机上操作:

5.1.2.3 在LVS主机上操作:

5.1.2.4 在webserver.com主机上操作:

5.1.2.5 在webserver2.com主机上操作:

5.1.2.6 测试:

5.1.2.6.1 修改LVS主机上的策略:

5.1.2.6.2 再次测试:

5.2 部署DR模式集群案例

5.2.1 实验环境

5.2.2 配置命令

5.2.2.1 所有主机都进行操作:

5.2.2.2 在client主机上操作:

5.2.2.3 在router主机上操作:

5.2.2.4 在lvs主机上操作:

5.2.2.5 在webserver.com主机上操作:

5.2.2.6 在webserver2.com主机上操作:

5.3 LVS火墙标记实验

5.3.1 配置命令

5.3.1.1 在webserver.com主机上操作:

5.3.1.2 在webserver2.com主机上操作:

5.3.1.3 在lvs主机上添加443策略:

5.3.2 测试:


一、LVS简介

LVS 官网:

http://www.linuxvirtualserver.org/

LVS:Linux Virtual Server(Linux虚拟服务器 ),负载调度器,内核集成。
创始人前阿里云首席科学家章文嵩博士(现已经在滴滴) ,是阿里的四层SLB(Server LoadBalance) 是基于LVS+keepalived 实现。
LVS 相关术语
VS: Virtual Server ,负责调度
RS:RealServer ,负责真正提供服务

 二、LVS 负载均衡模式

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

2.1 LVS-NAT模式:

2.1.1 简介

        NAT模式称为全称Virtualserver via Network address translation(VS/NAT),是通过网络地址转换的方法来实现调度的。首先调度器(Director)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为DS服务器。)把响应后的数据包发送给DS,DS再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

2.1.2 工作流程图:

 2.1.3 说明:

(1)当用户请求到达DirectorServer,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。

(2) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。

(3) IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP ,在这个过程完成了目标IP的转换(DNAT)。

(4) POSTROUTING链通过选路,将数据包发送给Real Server。

(5) Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP 。

(6) Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址(SNAT),然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。 

2.1.4 LVS-NAT的优缺点:

        (1)NAT技术将请求的报文和响应的报文都需要通过DS进行地址改写,因此网站访问量比较大的时候DS负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点。

        (2)节省IP,只需要在DS上配置一个公网IP地址就可以了。

        (3)每台内部的节点服务器的网关地址必须是调度器LB的内网地址。

        (4)NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。

2.2 LVS-DR模式:

2.2.1 简介

        全称:Virtual Server via Direct Routing(VS-DR),也叫直接路由模式,用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此方法,控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。

2.2.2 工作原理:

        DS和RS都使用同一个IP对外服务。但只有DS对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默(对ARP请求不做响应),也就是说,网关会把对这个服务IP的请求全部定向给DS,而DS收到数据包后根据调度算法,找出对应的 RS,把目的MAC地址改为RS的MAC并发给这台RS。这时RS收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DS要对二层包头进行改换,所以DS和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。

2.2.3 工作流程图:

2.2.4 说明:

(1)当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP;

(2)PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;

(3)IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;

(4)由于DS和RS在同一个网络中,所以是通过二层,数据链路层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server;

(5)RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP;

(6)响应报文最终送达至客户端。

2.2.5 DR模式的特点:

  1. 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server
  2. 在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在网卡接口的别名上,并限制其不能响应对VIP地址解析请求。
  3. RS可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;
  4. RS的网关一定不能指向DIP;
  5. 因为DR模式是通过MAC地址改写机制实现转发,RS跟Dirctory要在同一物理网络内(不能由路由器分隔);
  6. 请求报文经过Directory,但响应报文一定不经过Director
  7. 不支持端口映射;
  8. RS可以使用大多数的操作系统;
  9. RS上的lo接口配置VIP的IP地址; 

2.3 LVS-UN模式:

2.3.1 简介

  在VS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数 Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直 接返回给客户,将极大地提高整个集群系统的吞吐量。

    IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技 术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。

    在TUN模式下,利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择 一台服务器,将请求报文封装和转发给选出的服务器。

2.3.2 工作步骤:

  1. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
  2. 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
  3. RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。注意:需要设置lo接口的VIP不能在共网上出现

2.4 LVS-FULLNET 模式

2.4.1 简介

        FULL-NAT模式可以实际上是根据LVS-NAT模式的一种扩展。在NAT模式下DS需要先对请求进行目的地址转换(DNAT),然后对响应包进行源地址转换(SNAT),先后进行两次NAT,而 FULL-NAT则分别对请求进行和响应进行DNAT和SNAT,进行4次NAT,当然这样多次数的NAT会对性能大大削减,但是由于对请求报文的目的地址和源地址都进行了转换,后端的RS可以不在同一个VLAN下。 

2.4.2 工作流程图:

2.4.3 说明:

  1. 首先client 发送请求package给VIP;
  2. VIP 收到package后,会根据LVS设置的LB算法选择一个合适的RS,然后把package 的目地址修改为RS的ip地址,把源地址改成DS的ip地址;
  3. RS收到这个package后发现目标地址是自己,就处理这个package ,处理完后把这个包发送给DS;
  4. DS收到这个package 后把源地址改成VIP的IP,目的地址改成CIP(客户端ip),然后发送给客户端;

2.4.4 LVS-FULLNET模式的优缺点:

  1. RIP,DIP可以使用私有地址;
  2. RIP和DIP可以不再同一个网络中,且RIP的网关未必需要指向DIP;
  3. 支持端口映射;
  4. RS的OS可以使用任意类型;
  5. 请求报文经由Director,响应报文也经由Director;
  6. FULL-NAT因为要经过4次NAT,所以性能比NAT还要低;
  7. 由于做了源地址转换,RS无法获取到客户端的真实IP;

2.5 各种模式的区别:

llvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client

     lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发

     lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

vs-nat与lvs-fullnat:请求和响应报文都经由Director

     lvs-nat:RIP的网关要指向DIP

     lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

三、调度算法

3.1 LVS调度算法类型:

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

3.2 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 ,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

3.3 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

四、ipvsadm管理工具的使用

4.1 LVS软件相关信息

        ipvsadm是LVS的管理工具,ipvsadm工作在用户空间,通过ipvsadm命令编写负载均衡规则。

程序包: ipvsadm
下载: yum install ipvsadm -y
Unit File: ipvsadm.service
主程序: /usr/sbin/ipvsadm
规则保存工具: /usr/sbin/ipvsadm-save
规则重载工具: /usr/sbin/ipvsadm-restore
配置文件: /etc/sysconfig/ipvsadm-config
ipvs 调度规则文件: /etc/sysconfig/ipvsadm

4.2 用法以及参数:

-A:增加LVS的VIP记录
-a:增加real server记录
-E:修改LVS记录
-e:修改real server列表信息
-D:删除一条LVS记录
-d:删除real server列表信息
-R:恢复虚拟服务器规则
-S:保存虚拟服务器规则,或者server  ipvsadm  save,和iptables一样
ipvsadm -Sn > /root/lvsrules.txt  #保存规则
cat /root/lvsrules.txt | ipvsadm -R  #恢复规则
-C:清除虚拟服务器列表所有记录
-L:显示列表信息,和iptables一样
-t | u:指定LVS提供tcp或者是udp服务,后面常跟选项 real-server-ip:port或者virtual-server-ip:port
-s:指定LVS的负载调度算法,后面接详细的调度算法,如-s  rr | wrr | lc | wlc,不指定的话默认是wlc
-p  [timeout]:指定一个服务持续时间,用于会话保持,当同个用户重复请求时,给同一个real server处理,默认是300秒
-r:指定real server的ip地址
-i:LVS工作在隧道模式下
-m:LVS工作在NAT模式下
-g:LVS工作在DR模式下
-w:指定real server的权重
-n:不进行dns解析

五、实验案例

5.1 部署NAT模式集群案例

5.1.1 实验环境

主机名ipvip角色
client192.168.10.140测试机
LVS

192.168.94.130

192.168.10.130调度器(LVS)
webserver.com192.168.94.132null真实服务器(RS)
webserver2.com192.168.94.140null真实服务器(RS)

5.1.2 配置命令

5.1.2.1 所有主机都进行操作:

[root@webserver html]# systemctl stop firewalld        #关闭防火墙

[root@webserver html]# setenforce 0         #关闭selinux

5.1.2.2 在client主机上操作:

[root@client ~]# vmset.sh eth0 192.168.10.140 client.com        #用脚本给eth0添加ip和在/etc/hosts添加ip和主机名

[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection      #查看eth0配置   
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.10.140/24,192.168.10.2
method=manual
dns=114.114.114.114;

[root@client ~]# cat /bin/vmset.sh         #查看脚本,这个脚本适用每个主机
#!/bin/bash
rm -fr /etc/NetworkManager/system-connections/$1.nmconnection
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1

[ipv4]
address1=$2/24,192.168.10.2
method=manual
dns=114.114.114.114;
EOF

chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1

hostnamectl hostname $3

cat > /etc/hosts <<EOF
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
$2    $3
EOF

5.1.2.3 在LVS主机上操作:

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection         #查看eth0配置   
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.10.130/24,192.168.10.2
method=manual
dns=114.114.114.114;


[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection         #查看eth1配置   
[connection]
id=eth1
type=ethernet
interface-name=eth1

[ipv4]
address1=192.168.94.130/24
method=manual

[root@lvs ~]# sysctl -a | grep ip_forward        #查看ip_forward打开内核路由功能
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0


[root@lvs ~]# 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


[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
 

[root@lvs ~]# yum install ipvsadm -y        #下载lvs软件

[root@lvs ~]# ipvsadm -A -t 192.168.10.130:80 -s rr        

[root@lvs ~]# ipvsadm -a -t 192.168.10.130:80 -r 192.168.94.132:80 -m
[root@lvs ~]# ipvsadm -a -t 192.168.10.130:80 -r 192.168.94.140: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  192.168.10.130:80 rr
  -> 192.168.94.132:80            Masq    1      0          0         
  -> 192.168.94.140:80            Masq    1      0          0         
[root@lvs ~]# 
 

5.1.2.4 在webserver.com主机上操作:

[root@webserver ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置   
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.94.132/24,192.168.94.130
method=manual

[root@webserver ~]# route -n        #查看网关
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.94.130  0.0.0.0         UG    100    0        0 eth0
192.168.94.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
[root@webserver ~]# yum install httpd -y        #下载httpd服务
[root@webserver ~]# systemctl enable --now httpd        #开启和自启动httpd服务

[root@webserver html]# echo webserver - 192.168.94.132 > /var/www/html/index.html         #在httpd服务默认的路径下给一个文档并编写内容,内容可以更改

5.1.2.5 在webserver2.com主机上操作:

[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection         #查看eth0配置   
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.94.140/24,192.168.94.130
method=manual

[root@server2 ~]# route -n          #查看网关
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.94.130  0.0.0.0         UG    100    0        0 eth0
192.168.94.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0

[root@webserver2~]# yum install httpd -y        #下载httpd服务
[root@webserver2 ~]# systemctl enable --now httpd        #开启和自启动httpd服务

[root@webserver2 html]# echo webserver2 - 192.168.94.140 > /var/www/html/index.html         #在httpd服务默认的路径下给一个文档并编写内容,内容可以更改

5.1.2.6 测试:

[root@client ~]# for i in {1..10}
> do 
> curl 192.168.10.130
> done

5.1.2.6.1 修改LVS主机上的策略:

[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 -t 192.168.10.130:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.10.130:80 -r 192.168.94.132:80 -m -w 2       
[root@lvs ~]# ipvsadm -a -t 192.168.10.130:80 -r 192.168.94.140:80 -m -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.10.130:80 wrr
  -> 192.168.94.132:80            Masq    2      0          0         
  -> 192.168.94.140:80            Masq    1      0          0         
[root@lvs ~]# 

5.1.2.6.2 再次测试:

[root@client ~]# for i in {1..10}; do  curl 192.168.10.130; done

5.2 部署DR模式集群案例

5.2.1 实验环境

主机名ipvip角色
clientnat:192.168.10.200null测试主机
routernat:192.168.10.100,仅主机:192.168.94.100null路由器
lvs仅主机:192.168.94.130,GW:192.168.94.100lo:192.168.94.200/32调度器
webserver.com仅主机:192.168.94.132,GW:192.168.94.100lo:192.168.94.200/32真实服务器(RS)
webserver2.com仅主机:192.168.94.140,GW:192.168.94.100lo:192.168.94.200/32真实服务器(RS)

5.2.2 配置命令

5.2.2.1 所有主机都进行操作:

[root@webserver html]# systemctl stop firewalld        #关闭防火墙

[root@webserver html]# setenforce 0         #关闭selinux

5.2.2.2 在client主机上操作:

[root@client ~]# vmset.sh eth0 192.168.10.200 client.com        #用脚本给eth0添加ip和在/etc/hosts添加ip和主机名

[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection      #查看eth0配置   
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.10.200/24,192.168.10.100
method=manual
dns=114.114.114.114;

[root@client ~]# nmcli connection reload 
[root@client ~]# nmcli connection up eth0 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.10.100  0.0.0.0         UG    100    0        0 eth0
192.168.10.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
 

[root@client ~]# cat /bin/vmset.sh         #查看脚本,这个脚本适用每个主机
#!/bin/bash
rm -fr /etc/NetworkManager/system-connections/$1.nmconnection
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1

[ipv4]
address1=$2/24,192.168.10.2
method=manual
dns=114.114.114.114;
EOF

chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1

hostnamectl hostname $3

cat > /etc/hosts <<EOF
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
$2    $3
EOF

5.2.2.3 在router主机上操作:

[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.10.100/24,192.168.10.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.94.100/24
method=manual
[root@router ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1                        #开启内核路由功能
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0

5.2.2.4 在lvs主机上操作:

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-name=eth1

[ipv4]
address1=192.168.94.130/24,192.168.94.100
method=manual

[root@lvs ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.94.100  0.0.0.0         UG    100    0        0 eth1
192.168.94.0    0.0.0.0         255.255.255.0   U     100    0        0 eth1

[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 -t 192.168.94.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:80 -r 192.168.94.132:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:80 -r 192.168.94.140: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.94.200:80 rr
  -> 192.168.94.132:80            Route   1      0          0         
  -> 192.168.94.140:80            Route   2      0          0         
[root@lvs ~]# 

5.2.2.5 在webserver.com主机上操作:

[root@webserver ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection #查看eth0配置   
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.94.132/24,192.168.94.100
method=manual

[root@webserver ~]# route -n        #查看网关
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.94.100  0.0.0.0         UG    100    0        0 eth0
192.168.94.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
[root@webserver ~]# yum install httpd -y        #下载httpd服务
[root@webserver ~]# systemctl enable --now httpd        #开启和自启动httpd服务

[root@webserver html]# echo webserver - 192.168.94.132 > /var/www/html/index.html         #在httpd服务默认的路径下给一个文档并编写内容,内容可以更改

#使用vip不对外响应

[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore         
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 

[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

5.2.2.6 在webserver2.com主机上操作:

[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection         #查看eth0配置   
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.94.140/24,192.168.94.100
method=manual

[root@server2 ~]# route -n          #查看网关
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.94.100  0.0.0.0         UG    100    0        0 eth0
192.168.94.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0

[root@webserver2~]# yum install httpd -y        #下载httpd服务
[root@webserver2 ~]# systemctl enable --now httpd        #开启和自启动httpd服务

[root@webserver2 html]# echo webserver2 - 192.168.94.140 > /var/www/html/index.html         #在httpd服务默认的路径下给一个文档并编写内容,内容可以更改

#使用vip不对外响应

[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

 5.2.2.7 测试:

[root@client ~]# for i in {1..10}
> do 
> curl 192.168.94.200
> done

5.3 LVS火墙标记实验

在上个实验完成的基础上,完成下面配置。

5.3.1 配置命令

5.3.1.1 在webserver.com主机上操作:

[root@webserver ~]# yum install mod_ssl -y  #安装mod_ssl模块让其支持https

[root@webserver ~]# systemctl restart httpd
 

5.3.1.2 在webserver2.com主机上操作:

[root@webserver2 ~]# yum install mod_ssl -y  #安装mod_ssl模块让其支持https

[root@webserver2 ~]# systemctl restart httpd
 

5.3.1.3 在lvs主机上添加443策略:

[root@lvs ~]# ipvsadm -A -t 192.168.94.200:443 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:443 -r 192.168.94.132:443 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.94.200:443 -r 192.168.94.140:443 -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.94.200:80 wrr
  -> 192.168.94.132:80            Route   1      0          0         
  -> 192.168.94.140:80            Route   2      0          0         
TCP  192.168.94.200:443 wrr
  -> 192.168.94.132:443           Route   1      0          0         
  -> 192.168.94.140:443           Route   2      0          0         
[root@lvs ~]# 

测试问题:

[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver2 - 192.168.94.140
webserver2 - 192.168.94.140
[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver2 - 192.168.94.140
webserver2 - 192.168.94.140
[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver - 192.168.94.132
webserver - 192.168.94.132
当访问vip时两次调度都到了


解决办法:

[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.94.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66        #lvs主机中为端口做标记

[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.94.132 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.94.140 -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.94.132:0             Route   1      0          0         
  -> 192.168.94.140:0             Route   1      0          0         
[root@lvs ~]# 

5.3.2 测试:

[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver2 - 192.168.94.140
webserver - 192.168.94.132
[root@client ~]# curl 192.168.94.200;curl -k https://192.168.94.200
webserver2 - 192.168.94.140
webserver - 192.168.94.132

相关文章:

LVS详解

目录 一、LVS简介 LVS 官网: 二、LVS 负载均衡模式 2.1 LVS-NAT模式&#xff1a; 2.1.1 简介 2.1.2 工作流程图&#xff1a; 2.1.3 说明&#xff1a; 2.1.4 LVS-NAT的优缺点&#xff1a; 2.2 LVS-DR模式&#xff1a; 2.2.1 简介 2.2.2 工作原理&#xff1a; 2.2.3 工作…...

Yolo-World初步使用

Yolo v8目前已经支持Yolo-World&#xff0c;整理一下初步使用步骤。 使用步骤 1 先下载Yolo-World的pt文件&#xff0c;下载地址&#xff1a;GitHub - AILab-CVC/YOLO-World: [CVPR 2024] Real-Time Open-Vocabulary Object Detection 官网应该是点这里&#xff08;有个笑脸…...

Navicat Premium使用

文章目录 Navicat Premium 16的使用连接MySQL建立数据库并构建表导入数据 Navicat Premium 16是一款功能强大的数据库管理工具&#xff0c;它允许用户从单一应用程序中同时连接多种数据库&#xff0c;提供了极其便捷和高效的管理和开发环境&#xff0c;对于 MySQL 用户来说&…...

LLC数字控制TMS320F28034,4-DSP的epwm配置介绍

LLC数字控制TMS320F28034&#xff0c;4-DSP的epwm配置介绍 1 TMS320F280341.1 概述1.2 PWM详细介绍 2 TMS320F28034 PWM功能框图2.1 ePWM功能模块2.2 ePWM功能寄存器框图 3 TMS320F28034 PWM初始化流程4 结合项目设计5 代码设计5.1 PWM初始化程序5.2 工程代码 6 总结 配套代码示…...

MongoDB学习记录

1、初识Mongo 概述&#xff1a;与关系型数据库不同&#xff0c;MongoDB 的数据以类似于 JSON 格式的二进制文档存储&#xff0c;通常称这种格式为Bson&#xff0c;Bson不仅支持JSON中已有的数据类型&#xff0c;还增加了一些额外的数据类型&#xff0c;例如日期和二进制数据&a…...

vlunstack-2(复现红日安全-ATT CK实战)

环境搭建 配置信息 DC IP&#xff1a;10.10.10.10 OS&#xff1a;Windows 2012(64) 应用&#xff1a;AD域 WEB IP1&#xff1a;10.10.10.80 IP2&#xff1a;192.168.47.131 OS&#xff1a;Windows 2008(64) 应用&#xff1a;Weblogic 10.3.6MSSQL 2008 PC IP1&#xff1a;10.10…...

【生信入门】预览快速体验Linux-重生之小明闯Linux

生信少走弯路,快试试生信云专用服务器。新用户注册免费体验5小时。https://www.tebteb.cc 一.故事 小明的Linux冒险 在一片混沌的黑暗中&#xff0c;小明睁开了眼睛。他感到头痛欲裂&#xff0c;四周一片漆黑&#xff0c;只有一行闪烁的字符映入眼帘&#xff1a; [xiaomingu…...

用.net core简易搭建webapi托管到IIS

1、从官网下载.NET Core 托管捆绑包 https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?viewaspnetcore-8.0&tabsvisual-studio 2、新建ASP.NET Core WEB API项目 新建控制器TestController并生成GetInfo方法 3、发布 目标路径选择 2)显示所有…...

【计算机网络---OSI七层模型】

一、OSI的基本概念及原则 OSI是Open System Interconnect的缩写&#xff0c;意为开放式系统互联。各个层次的划分遵循以下原则&#xff1a; 1. 同一层的各网络节点都有相同的层次结构&#xff0c;具有同样的功能&#xff1b; 2. 同一节点的内相邻层之间通过接口进行通信&…...

Error updating database. Cause: org.apache.shiro.UnavailableSecurity

mybtisplus查看MetaObjectHandler是否有自定义获取用户信息填充用户的方法...

【网络安全】本地文件包含及远程文件包含漏洞详解

一、文件包含漏洞概述 1.1 什么是文件包含 开发人员将需要重复调用的函数写入一个文件&#xff0c;对该文件进行包含时产生的操作。这样编写代码能减少冗余&#xff0c;降低代码后期维护难度。 保证网站整体风格统一&#xff1a;导航栏、底部footer栏等&#xff0c;把这些不…...

redis启动的三种方式

默认启动&#xff1a; # 默认的启动指令 redis-server 默认启动属于前台启动&#xff0c;会阻塞整个会话窗口&#xff0c;窗口关闭或者按下CTRL C则Redis停止。不推荐使用。 //查看云服务器是否安装过redis redis-server -v//检查安装目录 which redis-server//查看redis进…...

手机怎么远程控制电脑屏幕?手机远程控制电脑方法分享

手机与电脑之间的互联互通变得越来越便捷。 无论是工作还是学习&#xff0c;有时我们需要在手机上远程控制电脑屏幕&#xff0c;以完成一些复杂的操作或查看电脑上的文件。 本文将详细介绍几种实用的手机远程控制电脑屏幕的方法&#xff0c;帮助读者轻松实现这一目标。 一、使…...

NET的全称、主要功能以及在计算机网络中的作用?

.NET是一个广泛的、全方位的平台&#xff0c;应用于开发网站、应用程式、网页应用程式和网络服务。以下是.NET的全称、主要功能以及在计算机网络中的作用&#xff1a; .NET的全称 .NET的全称实际上是Microsoft .NET Framework。它是微软公司推出的一种面向网络的开发框架&…...

LLM - 使用 HuggingFace + Ollama 部署最新大模型 (GGUF 格式 与 Llama 3.1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/141028040 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Ollama…...

如何实现Redis和Mysql中数据双写一致性

在我们的实际开发中&#xff0c;我们用到了redis缓存一些常用的数据&#xff08;如热点数据&#xff09;用来提高系统的吞吐量。 但是不可以避免的出现了数据的修改场景&#xff0c;这就导致了数据库中的数据和Redis中出现不一致性的情况。如何保证数据一致性就显得非常重要了&…...

three.js 模型高亮效果实现说明(结合react)

three.js react 实现鼠标移入模型高亮选中效果 使用EffectComposer和其附加的渲染效果Passes&#xff08;如RenderPass和OutlinePass&#xff09;来实现高级渲染效果。首先创建EffectComposer实例&#xff0c;并添加RenderPass和OutlinePass&#xff0c;最后在渲染循环中调用…...

入营测评题解

第一题&#xff1a;first 第二题&#xff1a;chengji 打擂台&#xff0c;每个数跟当前最大、最小值比较&#xff0c;维护当前最值即可。 #include<bits/stdc.h> using lllong long; using namespace std;const int N1e610;int n; int x;//1e9, ll最大9e18 ll maxn0,minn…...

制造知识普及(十)-- 常见的工业软件介绍

「 1. ERP」 企业资源计划&#xff08;enterprise resource planning&#xff0c;ERP&#xff09;是制造企业的核心管理软件。ERP系统的基本思想是以销定产&#xff0c;协同管控企业的产、供、销、人、财、物等资源&#xff0c;帮助企业按照销售订单&#xff0c;基于产品的制造…...

Windows系统设置网络IPv4和IPv6优先访问级

Windows系统设置网络IPv4和IPv6优先访问级 资源宝整理分享&#xff1a;www.httple.net 在数字化的世界中&#xff0c;我们离不开互联网&#xff0c;而互联网协议&#xff08;IP协议&#xff09;则扮演着至关重要的角色。IPv4曾是互联网的主要标准&#xff0c;但随着IP地址枯竭问…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

rknn toolkit2搭建和推理

安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 &#xff0c;不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源&#xff08;最常用&#xff09; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...

代理服务器-LVS的3种模式与调度算法

作者介绍&#xff1a;简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器&#xff0c;其中以Nginx为主&#xff0c;本章我们来讲解几个代理软件&#xff1a…...

rk3506上移植lvgl应用

本文档介绍如何在开发板上运行以及移植LVGL。 1. 移植准备 硬件环境:开发板及其配套屏幕 开发板镜像 主机环境:Ubuntu 22.04.5 2. LVGL启动 ​ 出厂系统默认配置了 LVGL,并且上电之后默认会启动 一个LVGL应用 。 LVGL 的启动脚本为/etc/init.d/pre_init/S00-lv_demo,…...

Vue3 hooks

export default function(){ let name; function getName(){ return name; } return {name,getName} } use it ----------------------------------------------- import useName from hooks/useName const {name,getName} useName(); 这段代码展示了一个自定义 Vue3钩…...