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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395464.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android----Depth Anything尝鲜 小米手机部署

题目要求&#xff1a;了解Depth Anything (以及Depth Anything v2)基本原理&#xff0c;创新点。 Depth Anything 论文&#xff1a;Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data 参考代码&#xff1a;Depth-Anything-Android GitHub 分析&#xff1a; …

应急响应:D盾的简单使用.

什么是应急响应. 一个组织为了 应对 各种网络安全 意外事件 的发生 所做的准备 以及在 事件发生后 所采取的措施 。说白了就是别人攻击你了&#xff0c;你怎么把这个攻击还原&#xff0c;看看别人是怎么攻击的&#xff0c;然后你如何去处理&#xff0c;这就是应急响应。 D盾功…

【算法】最短路径算法思路小结

一、基础&#xff1a;二叉树的遍历->图的遍历 提到搜索算法&#xff0c;就不得不说两个最基础的思想&#xff1a; BFS&#xff08;Breadth First Search&#xff09;广度优先搜索 DFS&#xff08;Depth First Search&#xff09;深度优先搜索 刚开始是在二叉树遍历中接触这…

【vue+mathjax】mathjax的使用

方法一、引用外网的地址 第一步&#xff1a;在public/index.html中引入地址 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1" /><metaname…

力扣刷题-环形链表判断是否有环

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 首先&#xff0c;我们先来看一下这段代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool …

延时队列与redis and rabbitmq

延时队列是什么 延时队列&#xff08;Delay Queue&#xff09;是一种特殊的消息队列&#xff0c;它允许你在添加消息时设置一个延时时间&#xff0c;消息只有在延时时间到达后才能被消费。这种机制在分布式系统中非常有用&#xff0c;常用于处理需要在指定时间后执行的任务&am…

力扣面试经典算法150题:多数元素

多数元素 今天的题目是力扣面试经典150题中的数组的简单题: 多数元素 题目链接&#xff1a;https://leetcode.cn/problems/majority-element/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个大小为 n 的数组 nums&#xff0c;其中包含 n 个…

算法 二

求中点 LR&#xff0c;可能溢出 除以2&#xff0c;等同于右移一位 递归、递归的时间复杂度 母问题的规模 子问题的规模&#xff0c;且都相等 调用次数 不用展开看&#xff0c;就看一层。 归并排序 时间复杂度降低的原因&#xff1a;没有浪费比较。比如选择排序&#xff…

财务会计与管理会计(一)

文章目录 销售业绩统计图表OFFSET函数在制作图表数据中的应用 自动计算分项合计1、IF函数2、SUM函数3、SUMPRODUCT函数 自动打印快递邮寄单OFFSET函数在逐行获取数据中的应用 销售业绩统计图表 OFFSET函数在制作图表数据中的应用 B150FFSET($A$2,$M$1,COLUMN(B1)-1) B150FFSE…

Netty技术全解析:LineBasedFrameDecoder类深度解析

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

NSSCTF练习记录:[SWPUCTF 2021 新生赛]include

题目&#xff1a; 随便传入一个file 因为存在include_once函数&#xff0c;可以使用php伪协议获取flag.php源码&#xff0c;再通过base64解码得到flag。 php:// 访问各个输入/输出流&#xff0c;常用php://filter和php://input&#xff0c;php://filter用于读取源码&#xff…

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 总结 配套代码示…

Linux/C 高级——shell脚本

1. shell脚本基础概念 1.1概念 shell使用方式&#xff1a;手动下命令和脚本 脚本本质是一个文件&#xff0c;文件里面存放的是特定格式的指令&#xff0c;系统可以使用脚本解析器翻译或解析指令并执行&#xff08;它不需要编译&#xff09;。 shell脚本本质&#xff1a;shell命…

中国信息学奥赛专用系统之----NOI Linux 2.0系统安装教程

1、下载NOI Linux 2.0系统&#xff0c;下载地址&#xff1a; https://noiresources.ccf.org.cn/ubuntu-noi-v2.0.iso 2、新建虚拟机 3、开机安装系统 下载插件&#xff0c;可能需要10分钟以上。 5、进系统看看 OK,NOI Linux 2.0系统安装完毕&#xff01;

【学习笔记】用线段树维护区间计数问题

前言 简单的区间计数问题可能直接推式子就行了。 但有些问题必须要数据结构维护。线段树就是一个比较好的处理区间的数据结构。 Gym102222L 思路 满足条件的区间特征&#xff1a; max ⁡ { a i } − min ⁡ { a i } 1 − c n t 0 \max\{a_i\}-\min\{a_i\}1-cnt0 max{ai​}…

解锁创意之门:如何使用DALL·E-3创作惊艳的图像

在这个视觉驱动的时代&#xff0c;图像已经成为表达创意和传递信息的重要媒介。最近&#xff0c;OpenAI发布了新一代的图像生成模型——DALLE-3&#xff0c;它以其卓越的生成能力和细致的图像质量迅速成为了创意工作者的热门工具。今天&#xff0c;我将带你一步步了解如何使用D…

13.3 正则表达式的应用

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

2024年6月scratch图形化编程等级考试三级真题

202406 青少年软件编程等级考试Scratch三级真题 试卷总分数&#xff1a;100分 考试时长&#xff1a;60 分钟 第 1 题 运行程序后&#xff0c;角色的x坐标是&#xff1f;&#xff08; &#xff09; A&#xff1a;99 B&#xff1a;100 C&#xff1a;199 D&#xff1a;200 正…

矩阵的导数运算

1. 标量方程对向量的导数 一维方程f(y)求极值即求导,令 二维方程f(y1,y2)求极值即求偏导,令 如果一个标量方程f(y1,y2,...ym)有m个自变量,求取它的极值就需要求取m组的方程组。当然可以用一种简洁的方式来表达它,比如二维方程f(y1,y2)可以把其中的变量写成向量的形式,此…

指针基础知识(笔记)

文章目录 1. 概念理解2. 空指针和野指针3. 计算4. 小结5. size_t6. 案例一: 指针查找并返回指定元素索引7. 指针访问多维数组(涉及 int (*ptr)[3]解析)8. 指针数组9. 函数的值传递与地址引用传递① 函数的值传递(pass by value)② 地址传递(pass by reference) 10. 案例二&…