基于红帽九系统的LVS超详解析!!

一、LVS集群类型

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

二、LVS-NAT模式

1.本质是多目标 IP DNAT ,通过将请求报文中的目标地址和目标端口修改为某挑出的 RS RIP
PORT 实现转发
2.RIP DIP 应在同一个 IP 网络,且应使用私网地址 ;RS 的网关要指向 DIP
3.请求报文和响应报文都必须经由 Director 转发, Director 易于成为系统瓶颈
4.支持端口映射,可修改请求报文的目标 PORT
5.VS 必须是 Linux 系统, RS 可以是任意 OS 系统
nat模式数据逻辑
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 的调度机容易阻塞
实验环境的部署:
下图是LVS(调度器)的网卡和网络配置环境
编写配置文件将net.ipv4.ip_forward = 1填入文件中,打开lvs中的内核路由功能
webserver1的网卡和网络配置
webserver2的网卡和网络环境配置
最终效果检测,lvs上能够访问到两台主机说明环境ok
用ipvsadm进行部署以及最后的测试结果

三、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、主要基于数据链路层,不支持端口映射

四、LVS-TUN(隧道模式)

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

五、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 ,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
动态调度算法
主要根据 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
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 标志 )
真实服务器当前的活动连接数量小于其权重值
其权重值不为零

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

轮询规则中可能会遇到的错误
http https 为例,当我们在 RS 中同时开放 80 443 端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题
当我第一次访问 80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1
在RS1和RS2中安装mod_ssl并重启apache
]# yum install mod_ssl -y
]# systemctl restart httpd
在lvs中设置调度,因为我们要调度80和443两个端口所以我们需要设定两组策略
]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.101:80 -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
TCP 192.168.0.100:80 rr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 1 0 0
TCP 192.168.0.100:443 rr
-> 192.168.0.101:443 Route 1 0 0
-> 192.168.0.102:443 Route 1 0 0
测试问题
[root@node10 ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
RS1 server - 192.168.0.101
RS1 server - 192.168.0.101
当访问vip时两次调度都到了
防火墙标记解决轮询调度问题
​
在vs调度器中设定端口标签,人为80和443是一个整体
]# iptables -t mangle -A PREROUTING -d 192.168.0.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@node10 ~]# curl -k https://192.168.0.100
RS2 server - 192.168.0.102
[root@node10 ~]# curl -k https://192.168.0.100;curl 192.168.0.100
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值