5分钟带你走近:LVS负载均衡(lvs知识点+实验配置)

news2024/12/29 11:04:10

集群和分布式简介

1、系统性能扩展方式

Scale UP:向上扩展,增强
Scale Out:向外扩展,增加设备,调度分配问题,Cluster

2、集群Cluster

Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统
Cluster常见的三种类型:
 
1)LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问

2)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来进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施,而运维,最主要的目标就

是达成这种服务水平。停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注

计划外停机时间

3)HPC:High-performance computing(高性能计算,国家战略资源,不在课程范围内)

3、分布式

分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

4、集群和分布式

集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据

和代码都是一样的

分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式

中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起

来,才是完整的业务

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数

来提升效率,

对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器

完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决

定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,

都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败

LVS(Linux virual server)运行原理

1、LVS简介

        LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,因此性能较高。

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

2、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

3、lvs集群体系结构

工作原理:

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

4、lvs集群的类型

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

4.1nat模式

Ivs-nat:

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

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的调度机容易阻塞
客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通 过PREROUTING后被ipvs结果并作nat转发
因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工 作。所以在做lvs时要把iptables的火墙策略全清理掉。

4.2 DR模式

DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
 4.2.1.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.2.2DR模式特点
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_announce
4.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
5.RIP的网关不能指向DIP,以确保响应报文不会经由Director
6.RS和Director要在同一个物理网络
7.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
8.不支持端口映射(端口不能修败)
9.RS可使用大多数OS系统

4.3TUN模式(了解)

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个
IP首部 (源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源
IP是VIP,目标IP 是CIP)
4.3.1  TUN模式数据传输过程

1.客户端发送请求数据包,包内有源IP+vip+dport
2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含 TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP) +port,响应数据包通过网络直接回传给client
 4.3.2 .TUN模式特点
1.DIP, VIP, RIP都应该是公网地址
2.RS的网关一般不能指向DIP
3.请求报文要经由Director,但响应不能经由Director
4.不支持端口映射
5.RS的OS须支持隧道功能

4.4 fullnet模式(了解)

fullnat :通过同时修改请求报文的源 IP 地址和目标 IP 地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP 是公网地址, RIP DIP 是私网地址,且通常不在同一 IP 网络;因此, RIP 的网关一般不会指向 DIP
2.RS 收到的请求报文源地址是 DIP ,因此,只需响应给 DIP ;但 Director 还要将其发往 Client
3. 请求和响应报文都经由 Director
4. 支持端口映射

4.5 LVS工作模式总结

NAT模式TUN模式DR模式
RS操作系统
不限支持隧道禁用arp
调度器和服务器网络
可跨网络可跨网络不可跨网络
调度服务器数量服务器数量
RS服务器网关
指向到调度器DIP
指向到路由
指向到路由
  • lvs-natlvs-fullnat:请求和响应报文都经由Director
  • lvs-natRIP的网关要指向DIP
  • lvs-fullnatRIPDIP未必在同一IP网络,但要能通信
  • lvs-drlvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
  • lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
  • lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

5、lvs的调度算法

5.1 lvs调度算法类型

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

5.2 lvs静态调度算法

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

5.3 lvs动态调度算法

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

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

5.4 4.15版本内核以后新增调度算法

1.FO(Weighted Fai Over) 调度算法:常用作灰度发布
在此 FO 算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载 ( 未设置
IP_VS_DEST_FOVERLOAD标志 ) 的且权重最高的真实服务器,进行调度
当服务器承接大量链接,我们可以对此服务器进行过载标记( IP_VS_DEST_F
OVERLOAD),那么 vs 调度器就不会把链接调度到有过载标记的主机中。
2.OVF(Overflow-connection) 调度算法
基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,
直到其活动 连接数量超过权重值,之后调度到下一个权重值最高的真实服务器, 在此 OVF 算法
中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用
的真实服务器需要同时满足以下条件:
  • 未过载(未设置IP_VS_DEST_F OVERLOAD标志)
  • 真实服务器当前的活动连接数量小于其权重值
  • 其权重值不为零

6、lvs软件相关信息

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

ipvsadm命令

核心功能:
  • 集群服务管理:增、删、改
  • 集群服务的RS管理:增、删、改
  • 查看

1、命令参数

管理集群服务
ipvsadm -A|E -t tcp |u udp |f (防护墙标签) \
service-address( 集群地址 ) \
[-s scheduler( 调度算法 )] \
[-p [timeout]] \
[-M netmask] \
[--pepersistence_engine] \
[-b sched-flags]
ipvsadm -D -t|u|f service-address  删除
ipvsadm –C  清空
ipvsadm –R  重载
ipvsadm -S [-n]  保存
管理集群中的 real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m]( 工作模式 ) [-w
weight]( 权重 )
ipvsadm -d -t|u|f service-address -r server-address 删除 RS
ipvsadm -L|l [options] 查看 rs
ipvsadm -Z [-t|u|f service-address] 清楚计数器

2、lvs集群中的增删改

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

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-A # 添加      -E #修改
-t  #tcp服务  -u #udp服务
-s # 指定调度算法,默认为 WLC
-p # 设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一
Realserver
-f #firewall mask 火墙标记,是一个数字
# 增加
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000
# 修改
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
# 删除
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80
[root@DR-server ~]# ipvsadm -D -f 66

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

ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
-a # 添加 realserver
-e # 更改 realserver
-t #tcp 协议
-u #udp 协议
-f # 火墙 标签
-r #realserver 地址
-g # 直连路由模式
-i #ipip 隧道模式
-m #nat 模式
-w # 设定权重
-Z # 清空计数器
-C # 清空 lvs 策略
-L # 查看 lvs 策略
-n # 不做解析
--rate :输出速率信息
# 添加
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2
# 更改
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1
# 删除
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
[root@DR-server ~]# ipvsadm -Ln
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.100:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0
[root@DR-server ~]# ipvsadm -C
[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80
[root@DR-server ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 172.25.254.20:80 0 0 0 0 0
-> 192.168.0.30:80 0 0 0 0 0
-> 192.168.0.40:80 0 0 0 0 0
pvs 规则: /proc/net/ip_vs
ipvs 连接: /proc/net/ip_vs_conn

2、ipvsadm参数详解

选项    作用
-A        添加一个虚拟服务,使用IP地址、端口号、协议来唯一定义一个虚拟服务
-E        编辑一个虚拟服务
-D        删除一个虚拟服务
-C       清空虚拟服务表
-R       从标准输入中还原虚拟服务规则
-S        保存虚拟服务规则值标准输出,输出的规则可以使用-R导入还原
-a        在虚拟服务中添加一台真实服务器
-e        在虚拟服务中编辑一台真实服务器
-d        在虚拟服务中减少一台真实服务器
-L        显示虚拟服务列表
-t         使用TCP服务,该参数后需要跟主机与端口信息

-u        使用UDP服务,该参数会需要跟主机与端口信息
-s        指定LVS所采用的的调度算法

-r        设置真实服务器IP地址与端口信息
-g       设置LVS工作模式为DR直连路由模式
-i        设置LVS工作模式为TUN隧道模式
-m      设置LVS工作模式为NAT地址转换模式
-w      设置指定服务器的权重
-c       连接状态,需要配合-L使用
-n        数字格式输出

实验部分

一、LVS的NAT模式

NAT的LVS模式负载均衡实验拓扑图

1、实验环境

主机名ipVIP角色
lvs192.168.0.100172.25.254.100调度器
webserver1192.168.0.10,网关192.168.0.100null
真实服务器( RS
webserver2192.168.0.20,网关192.168.0.100null
真实服务器( RS

2、配置命令

 1)webserver1、2

  ip配置

  [root@webserver1 boot]#vmset.sh eth0 192.168.0.100 webserver1.hyl.org

  [root@webserver1 boot]# vim /etc/NetworkManager/system-

connections/eth0.nmconnection

[root@webserver1 boot]# nmcli connection reload

[root@webserver1 boot]# nmcli connection up eth0

[root@webserver1 boot]# 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                 eth0

192.168.0.0    0.0.0.0        255.255.255.0      U 100 0 0                   eth0

配置httpd服务

[root@webserver1 boot]# yum install httpd -y

[root@webserver1 boot]# echo webserver - 192.168.0.10 > /var/www/html/index.html

[root@webserver boot]# systemctl enable  --now httpd

[root@webserver2 boot]#  echo webserver2 - 192.168.0.20 > /var/www/html/index.html

[root@webserver2 boot]# systemctl enable  --now httpd

 2)lvs调度器

配置ip

[root@lvs boot]# vmset.sh eth0 172.25.254.100 lvs.hyl.org

[root@lvs boot]# vmset.sh eth1 192.168.0.100  lvs.hyl.org

连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/5)

[root@lvs boot]# vim /etc/NetworkManager/system-connections/eth1.nmconnection

[root@lvs boot]# nmcli connection reload

[root@lvs boot]# nmcli connection up eth1

启用内核路由功能
[root@lvs boot]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@lvs boot]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs boot]# sysctl -p
net.ipv4.ip_forward = 1
关闭火墙

[root@lvs boot]# systemctl stop firewalld.service

测试httpd服务

[root@lvs boot]# curl 192.168.0.10
webserver - 192.168.0.10

[root@lvs boot]# curl 192.168.0.20
webserver2 - 192.168.0.20

安装ipvsadm

[root@lvs boot]# yum install ipvsadm -y

添加调度策略

[root@lvs boot]# ipvsadm -A -t 172.25.254.100:80 -s rr

[root@lvs boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m

[root@lvs boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m

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

保存规则
[root@lvs boot]# ipvsadm-save -n  > /etc/sysconfig/ipvsadm
 
[root@lvs boot]# 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
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
[root@lvs boot]# ipvsadm -C
 
[root@lvs boot]# ipvsadm-restore < /etc/sysconfig/ipvsadm
 
[root@lvs boot]# 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
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
删除所有规则
[root@lvs boot]# ipvsadm -C
[root@lvs boot]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
重新加载规则
[root@lvs boot]# ipvsadm -R < /etc/sysconfig/ipvsadm-config
[root@lvs boot]# 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.101:80 Masq 1 0 0
-> 192.168.0.102:80 Masq 1 0 0

3、测试

[root@lvs boot]# for i in {1..10}; do curl 172.25.254.100; done

webserver2 - 192.168.0.20

webserver - 192.168.0.10

webserver2 - 192.168.0.20

webserver - 192.168.0.10

webserver2 - 192.168.0.20

webserver - 192.168.0.10

webserver2 - 192.168.0.20

webserver - 192.168.0.10

webserver2 - 192.168.0.20

webserver - 192.168.0.10

二、LVS的DR模式

DR的LVS模式负载均衡实验拓扑图

1、实验环境

主机名ipVIP角色
clientnat:172.25.254.200  网关:172.25.254.100null客户端
router

nat:172.25.254.100     仅主机:192.168.0.100

null路由器
lvs

仅主机:192.168.0.50   网关:192.168.0.100

lo:192.168.0.200

调度器

webserver1

仅主机:192.168.0.10  网关:192.168.0.100

lo:192.168.0.200RS1
webserver2

仅主机:192.168.0.20  网关:192.168.0.100

lo:192.168.0.200RS2

2、实验配置

1)webserver1、2

ip配置

server1、2一样

[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 ~]# 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 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

rs主机中使vip不对外响应

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

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

查看

[root@webserver boot]#  sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 1

[root@webserver2 boot]# sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 1

在server设定vip

[root@webserver boot]#  ip a a 192.168.0.200/32 dev lo
[root@webserver2 boot]# ip a a 192.168.0.200/32 dev lo

2)client

ip配置

[root@client ~]# vmset.sh eth0 172.25.254.200 client.hyl.org

3)router

ip配置

[root@router ~]# vmset.sh eth0 172.25.254.100 router.hyl.org

[root@router ~]# vmset.sh eth1 192.168.0.100 router.hyl.org

[root@router ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnect ion
[root@router ~]# nmcli connection reload
[root@router ~]# nmcli  connection  up reth1
####eth0为nat网卡#######

[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;

#####eth1为仅主机网卡#######
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnec         tion
[connection]
id=eth1
type=ethernet
interface-name=eth1

[ipv4]
address1=192.168.0.100/24
method=manual

启用内核路由功能

[root@router ~]# sysctl -a | grep ip_forward

net.ipv4.ip_forward = 0

net.ipv4.ip_forward_update_priority = 1

net.ipv4.ip_forward_use_pmtu = 0

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

[root@router ~]# sysctl -p

net.ipv4.ip_forward = 1

4)lvs

ip配置
[root@lvs boot]# vmset.sh eth1 192.168.0.50 lvs.hyl.org
[root@lvs boot]#vim /etc/NetworkManager/system-connections/eth1.nmconnect ion
[root@lvs boot]# nmcli connection reload
[root@lvs boot]#nmcli  connection  up reth1

在Ivs主机中添加vip

[root@lvs ~]# nmcli connection reload

[root@lvs ~]# nmcli connection up lo
配置策略

[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.0.200:80 -s wrr

[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 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.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   2      0          0

3、实验测试

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

webserver2 - 192.168.0.20
webserver - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20

三、LVS的火墙标记

1、轮询规则遇到错误

[root@lvs ~]# ipvsadm -E -t 192.168.0.200:80 -s rr
[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          1

######RS安装mod ssl模块 让rs支持https#########

[root@webserver ~]# yum install mod_ssl -y

[root@webserver ~]# systemctl restart httpd

######查看httpd端口
[root@webserver ~]# netstat -ntulp | grep httpd
tcp6       0      0 :::443                  :::*               LISTEN      34138/httpd
tcp6       0      0 :::80                   :::*               LISTEN      34138/httpd

当访问vip时两次调度都到了  测试错误
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20

2、LVS主机中为端口做标记

#####在vs调度器中设定端口标签,人为80和443是一个整体
[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       6    --  0.0.0.0/0            192.168.0.200        multiport dports 80,443 MARK set 0x42
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

3、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.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

4、测试

[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver - 192.168.0.10

5、lvs持久链接

在lvs调度器中设定

[root@lvs ~]# ipvsadm -E -f 66 -s rr -p

[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 persistent 360
  -> 192.168.0.10:0               Route   1      0          0
  -> 192.168.0.20:0               Route   1      0          0

测试

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

webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20

更改时间

[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 persistent 1

  -> 192.168.0.10:0 Route 1 0 2

  -> 192.168.0.20:0 Route 1 0 0

[root@lvs ~]# ipvsadm -E -f 66 -s rr

[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 2

  -> 192.168.0.20:0 Route 1 0 0

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF扫描?用lookscanned就好了【送源码】

日常工作&#xff0c;我们有时会需要把电子文档转换成看起来像是用扫描仪扫描出来的PDF文件&#xff0c;满足某些特定的需求&#xff0c;你懂的~~ 有时候身边没有打印机或者打印纸&#xff0c;或者打印不方便&#xff0c;总不至于每天都背着吧&#xff1f; 今天要跟大家聊聊一…

SX_错误声明定义了两个以上的数据类型BUG解决_14

具体报错&#xff1a; In file included from perfmon_priv.h:32,from perfmond.c:21: perfmon_api.h:7:18: 错误: 声明指定了两个以上的数据类型7 | #define uint8_t unsigned char perfmon_api.h:7:27: 错误: 声明指定了两个以上的数据类型7 | #define uint8_t unsigned cha…

《人工智能算力资源池技术规范》团体标准正式发布!

由趋动科技提出、中关村新兴科技服务业产业联盟牵头、联合行业专家单位参与&#xff0c;遵循标准制定流程&#xff0c;经过批准起草小组会议讨论、广泛征求意见、委员会草案投票等流程的《人工智能算力资源池技术规范》团体标准&#xff08;标准编号为T/STSI 43—2023&#xff…

洛谷 P1433 吃奶酪

原题https://www.luogu.com.cn/problem/P1433 Description 房间里放着 n 块奶酪。一只小老鼠要把它们都吃掉&#xff0c;问至少要跑多少距离&#xff1f;老鼠一开始在 (0,0)点处。 Input 第一行有一个整数&#xff0c;表示奶酪的数量 n。 第 2 到第(n1) 行&#xff0c;每行…

短视频SDK,支持Flutter跨平台框架,加速产品上线进程

在数字内容爆炸式增长的今天&#xff0c;短视频已成为连接用户、传递情感、展现创意的重要桥梁。为助力开发者快速融入这股潮流&#xff0c;美摄科技匠心打造了一款专为Flutter框架优化的短视频SDK解决方案&#xff0c;旨在降低技术门槛&#xff0c;加速产品迭代&#xff0c;让…

商标直接注册初审通过提高的注意!

近日下了一批商标注册申请初步审定公告通知书&#xff0c;普推知产商标老杨发现其实许多商标名称申请在前&#xff0c;经过专业检索查重&#xff0c;基本上就知道通过率如何&#xff0c;虽然是一个预判&#xff0c;但是对于有经验的商标代理人员来说&#xff0c;预估七成基本判…

HTML - 简易版打字练习

1. 赛博朋克风格的视觉设计 颜色与渐变&#xff1a;通过linear-gradient设置了背景的颜色渐变&#xff0c;使用高饱和度的霓虹色彩&#xff08;如橙色、绿色和蓝色&#xff09;来营造赛博朋克的视觉效果。这种配色方案是赛博朋克风格的典型元素。 立体感和阴影&#xff1a;使用…

春秋云镜CVE-2023-38836

打开靶场环境 点击发现一个登陆框&#xff0c;弱口令试一下 发现账号密码为admin,password 随便点击点击 Media发现这里可以上传文件上传木马试试 <?php eval($_POST["wjq"]); ?> 发现不能上传php文件 php内容 修改他的格式 抓包绕过一下 302就可以其实已经…

绘制echarts-liquidfill水球图

文章目录 一、效果图二、步骤1.安装插件2.引入2.主要代码2.素材图片 总结 一、效果图 二、步骤 1.安装插件 npm install echarts npm install echarts-liquidfillecharts5的版本与echarts-liquidfill3兼容&#xff0c;echarts4的版本与echarts-liquidfill2兼容,安装的时候需要…

Spring I

1. IoC & DI ⼊⻔ 1.1 Spring 是什么&#xff1f; 通过前⾯的学习, 我们知道了Spring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场 景, 有着活跃⽽庞⼤的社区, 这也是Spring能够⻓久不衰的原因. 但是这个概念相对来说, 还是⽐较抽象. 我们⽤⼀句更具体的…

C++中的搜索二叉树模拟实现代码

包含的功能&#xff1a;插入、删除、查找、中序遍历&#xff08;排列大小&#xff09; 代码&#xff1a;

Linux 内核源码分析---proc 文件系统

proc文件系统 进程数据文件系统&#xff08;process data filesystem, procfs&#xff09;装载在 /proc&#xff0c;缩写为 procFS。 proc 文件系统是一种虚拟文件系统&#xff0c;其信息不能从块设备读取。只有在读取文件内容时才动态生成相应的信息。使用proc文件系统&…

WPF篇(7)- Control基类+ContentControl类(内容控件)+ButtonBase基类

前面给大家介绍完了WPF所有的布局控件&#xff0c;属性以及使用案例&#xff0c;从这里咱们就开始学下内容控件。 Control基类 Control是许多控件的基类。比如最常见的按钮&#xff08;Button&#xff09;、单选(RadioButton)、复选&#xff08;CheckBox&#xff09;、文本框…

【JavaEE初阶】JUC(java.uitl.concurrent)的常见类

&#x1f334;Callable 接口 之前讲到Runnable接口&#xff0c;用于描述一个任务&#xff0c;通过Runnable中的run方法来体现的&#xff0c;但是描述的任务没有返回值&#xff08;run方法是返回void&#xff09;&#xff0c;此处的Callable接口与Runnable接口类似&#xff0c;C…

LLVM理论篇之编译器前端

1、简述 LLVM前端通过对源程序的预处理&#xff0c;构成源程序的字符流扫描与分解&#xff0c;将单词序列提取为各类语法短语&#xff0c;生成抽象语法树&#xff0c;最终转换为中间代码。编译器前端包含的这几个过程如下&#xff1a; &#xff08;1&#xff09;预编译 &…

【python】实现对文件夹中的图像连续重命名方法

import os import shutildef rename_images(input_folder):# 获取输入文件夹下的所有图片文件&#xff08;假设都是.jpg格式&#xff09;image_files [f for f in os.listdir(input_folder) if os.path.isfile(os.path.join(input_folder, f)) and f.endswith(".jpg"…

性能测试工具LoadRunner

前言&#x1f440;~ 上一章我们介绍了性能测试的一些基本概念&#xff0c;重要的是性能测试的各项指标&#xff0c;今天我们使用性能测试工具LoadRunner简单的完成一次性能测试 性能测试Load Runner LoadRunner是什么&#xff1f; LoadRunner安装 LoadRunner脚本录制 1.录…

振弦式钢筋计的主要应用领域有哪些?

在现代工程建设中&#xff0c;钢筋作为重要的结构材料&#xff0c;其应力状态直接关系到工程结构的安全性和稳定性。因此&#xff0c;对钢筋应力的实时监测成为了保障工程质量的关键环节。振弦式钢筋计作为一种高精度、稳定性好的应力监测仪器&#xff0c;在桥梁、建筑、隧道等…

pg一些常用语句记录

查看数据库大小 pg_size_pretty:将数据库用量展示为KB、MB、GB等样式,查看更直观查看具体某个数据库的大小 select pg_size_pretty(pg_database_size(postgres)); 查看所有数据库的大小 select pg_database.datname, pg_size_pretty (pg_database_size(pg_database.datnam…

Sqli-labs-master靶场--布尔盲注

目录 1、布尔盲注 2、布尔盲注的流程&#xff08;以靶场less-8为例&#xff09; 2.1输入id尝试是否存在注入点 2.1.1通过以上尝试&#xff0c;联想到可能是布尔盲注 2.2猜测数据库长度 2.3获取数据库名 2.3.1python脚本获取 代码&#xff1a; 获取结果为&#xff1a; …