超详LVS四层架构部署知识点汇总

LVS集群的类型

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

LVS-NAT

工作流程

可以理解nat模式为在vs上进行了目标IP和端口号的转换过程,

请求访问时将目标IP由VIP转换为RIP 响应访问时将源IP由RIP转为VIP

image-20240806181732916

部署NAT模式集群案例

网络拓扑如下

image-20240806214252133

注:
Client网关:192.168.84.100
RS1、RS2网关:172.25.254.100

基础网络IP配置略

DS配置
安装ipvsadm、设置调度规则
[root@lsv ~]# yum install -y ipvsadm
[root@lsv ~]# ipvsadm -A -t 172.25.254.50:80 -s rr
[root@lsv ~]# ipvsadm -a -t 172.25.254.50:80 -r 172.25.254.10:80 -m
[root@lsv ~]# ipvsadm -a -t 172.25.254.50:80 -r 172.25.254.20:80 -m
[root@lsv ~]# ipvsadm-save > /etc/sysconfig/ipvsadm

开启内核路由
[root@lsv ~]# vim /etc/sysctl.conf 
	net.ipv4.ip_forward = 1
[root@lsv~]# sysctl --systemctl
RS相关配置:
[root@web1 ~]# echo web1 10 > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd
Client进行测试:
[root@client ~]# for i in {1..10}; do curl 172.25.254.50; done

image-20240806214907616

LVS-DR(直连模式)

工作流程

直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变

LVS-DR模式的工作特点:
1、DS作为集群访问入口,但不作为网关
2、DS和RS需处于同一网络,RIP的网关不能指向DIP,以确保响应报文无需经过DS
3、为了响应整个集群的访问,DS和RS需配置相同的VIP
4、请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
5、主要基于数据链路层,不支持端口映射

image-20240806182609209

数据传输过程:
1、客户机发出服务请求
源IP:CIP 目IP:VIP 源MAC:CIP-MAC 目MAC:VIP-MAC
2、路由器作为网关接收到了客户机的请求,查看源目IP地址后,对照自身路由表,从与DS相对接的接口发出
源IP:CIP 目IP:VIP 源MAC:路由器MAC 目MAC:VIP-MAC
3、DS接收到数据请求后,查看内核空间(对比源目IP地址),目标IP地址为自己的VIP,随后IPVS对比数据包请求服务是否为集群服务
源IP:CIP 目IP:VIP 源MAC:DIP-MAC 目MAC:RIP-MAC
4、RS接收到数据报文,目MAC为自身,接收数据报文,后做出数据响应,重新封装数据包
源IP:VIP 目IP:CIP 源MAC:RIP-MAC 目MAC:CIP-MAC

注:
问题1:lvs集群中使用相同的vip地址,且在同一局域网内,会产生arp响应冲突
解决方法:只让负载均衡器(DS)进行arp响应,其余节点服务器(RS)不响应

问题2:返回报文时使用VIP作为源IP ,(网关设备原本VIP对应DS的MAC地址,现在要被更新为RS的MAC地址),导致网关设备ARP缓存表紊乱
解决方法:更改节点服务器(RS)内核参数,源IP地址更改为选择发送接口(物理网卡)的IP地址

部署DR模式集群案例

实验拓扑:

image-20240806194853875

基础网络配置跳过

注:
Client的网关为192.168.84.100
DS、RS1、RS2的网关为:172.25.254.100
注:DS、RS1、RS2的VIP地址相同将其配置在lo环回接口上,具体配置如下:
ip address add 172.25.254.50/32 dev lo 
RS1、RS2(方便后续实验效果展示)
[root@web1 ~]# echo web1 10 > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd

限制响应和通告
[root@web1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@web1 ~]# sysctl -p
DS上操作:安装ipvsadm,并配置ipvsadm调度规则
[root@lsv ~]# yum install -y ipvsadm
[root@lsv ~]# ipvsadm -A -t 172.25.254.50:80 -s wrr  #设置为加权轮询调度
[root@lsv ~]# ipvsadm -a -t 172.25.254.50:80 -r 172.25.254.10:80 -g -w 2
[root@lsv ~]# ipvsadm -a -t 172.25.254.50:80 -r 172.25.254.20:80 -g -w 1
[root@lsv ~]# ipvsadm-save > /etc/sysconfig/ipvsadm #将规则保存
router上操作:开启内核路由
[root@router1 ~]# vim /etc/sysctl.conf 
	net.ipv4.ip_forward = 1
[root@router1 ~]# sysctl --systemctl
client进行测试,效果如下图所示:
[root@client ~]# for i in {1..10}; do curl 172.25.254.50; done

image-20240806211822198

LVS-TUN(隧道模式)

image-20240808102045813

数据传输过程:

1、客户机向VS服务器发送数据请求

源IP:CIP 目IP:VIP

2、调度并修改请求报文,在源报文外新增隧道IP

Tun源IP:DIP Tun目IP:RIP 源IP:CIP 目IP:VIP

3、RV进行报文响应,拆除隧道IP报文头部

源IP:CIP 目IP:VIP

4、客户机接收报文相应

源IP:VIP 目IP:CIP

FULLNET

image-20240808103012156

如上图数据传输图可视,fullnat模式直接修改源目IP地址实现访问请求

LVS调度算法

静态算法

不考虑 R S 的状态、性能和负载情况,仅根据算法本身进行调度 不考虑RS的状态、性能和负载情况,仅根据算法本身进行调度 不考虑RS的状态、性能和负载情况,仅根据算法本身进行调度

  1. 轮询调度(RR)

    根据服务器RS的数量进行平均分配,不考虑性能等其余因素
    示例:后端有2台RS分别为RS1、RS2,进行RR调度时RS1发送一次服务请求,RS2发送一次服务请求

  2. 加权轮询(WRR)

    根据事先设定的权值进行轮询调度

    示例:RS1的权值为2,RS1的权值为1,进行调度时RS1每分配请求2次,RS1会分配请求一次

  3. 源IP地址哈希(SH)

    根据同一源IP地址进行识别调度

    示例: 对同一IP的请求,始终分配给第一次选中的RS,实现RS与C-IP之间的绑定

  4. 目标地址哈希(DH)

    根据同一目标地址进行识别调度

    示例:第一次轮询调度至RS,后续将发往同一目标地址的请求发往第一次挑中的RS

动态算法

  1. 最少链接调度(LS)

    根据当前RS的链接数进行请求分配,优先分配给链接数少的RS

    负载值=活动链接数x256+非活动链接数

  2. 加权最少链接调度(WLS)

    具有较高权重的服务器将接收较高的活动链接负载

    负载值=(活动链接数x256+非活动链接数)/weight

  3. 最短预期延迟调度(SED)

    优先选择预期延迟小的RS进行访问调度

    负载值=((活动链接数+1+非活动链接数)x256)/weight

  4. 不排队调度(NQ)

    开始时直接分配确保每个服务器都有数据访问请求,随后进行SED调度

  5. 基于局部最少链接调度(LBLC)

    优先选择和目标RS的局部性最高,且当前连接数最少的RS

  6. 带复制的基于局部最少链接调度(LBLCR)

    在LBLC调度基础上引入复制机制。当所选服务器负载过高或出现故障时,会将请求复制到其他具有相似局部性特征的服务器上处理。

新增调度算法

  1. FO调度

    常用作灰度发布

    FO算法中遍历虚拟服务器所关联的所有真实服务器链表,找到未过载且权重较高的服务器进行调度

    当服务器承载的链接数过多时,可对其进行过载标记,避免再次调用

    简言之:进行RS遍历,找到未过载且权重最高的服务器金牛星调度

  2. VOF

    基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动 连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,

防火墙标签解决轮询错误

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题 当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上

在RS1和RS2中安装mod_ssl并重启apache
[root@web1 ~]# yum install mod_ssl -y
[root@web1 ~]# systemctl restart httpd
在lvs中设置调度,因为我们要调度80和443两个端口所以我们需要设定两组策略

[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.84.100:80 rr
 -> 192.168.84.10:80             Route   1     0         0
 -> 192.168.84.20:80             Route   1     0         0
TCP 192.168.84.100:443 rr
 -> 192.168.84.10:443           Route   1     0         0
 -> 192.168.84.20:443           Route   1     0         0
测试问题
[root@node10 ~]# curl http://192.168.84.100;curl -k https://192.168.84.100
RS1 server - 192.168.84.10 
RS1 server - 192.168.84.10
当访问vip时两次调度都到了RS1

借助于防火墙标记来分类报文,而后基于标记定义集群服 务:可将多个不同的应用使用同一个集群服务进行调度

具体操作步骤

在vs调度器中设定端口标签,人为80和443是一个整体
[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.84.100 -p tcp -m multiport --dports 
80,443 -j MARK --set-mark 6666
设定调度规则
[root@lvs ~]# ipvsadm -A -f 6666 -s rr
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.101 -g
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.102 -g

测试结果

[root@node1 ~]# curl -k https://192.168.84.100
RS2 server - 192.168.84.20
[root@node1 ~]# curl -k https://192.168.84.100;curl 192.168.84.100
RS1 server - 192.168.84.10
RS2 server - 192.168.84.20
  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值