一、 lvs简介
LVS:Linux Virtual Server
,负载调度器,内核集成,章文嵩,阿里的四层
SLB(Server LoadBalance)
是基
于
LVS+keepalived
实现
LVS
官网
:
http://www.linuxvirtualserver.org/
LVS
相关术语
VS: Virtual Server
,负责调度
RS:RealServer
,负责真正提供服务
3.2
二、 lvs集群体系结构
工作原理:
VS
根据请求报文的目标
IP
和目标协议及端口将其调度转发至某
RS
,根据调度算法来挑选
RS
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
三、lvs集群的类型
lvs-nat:修改请求报文的目标
IP,
多目标
IP
的
DNAT
lvs-dr
:操纵封装新的
MAC
地址
lvs-tun:在原请求
IP
报文之外新加一个
IP
首部
lvs-fullnat
:修改请求报文的源和目标
IP
3.1nat模式
lvs-nat:
本质是多目标IP的
DNAT
,通过将请求报文中的目标地址和目标端口修改为某挑出的
RS
的
RIP
和
PORT
实现转发
RIP
和
DIP
应在同一个
IP
网络,且应使用私网地址
;RS
的网关要指向
DIP
请求报文和响应报文都必须经由
Director
转发,
Director
易于成为系统瓶颈
支持端口映射,可修改请求报文的目标
PORT
VS
必须是
Linux
系统,
RS
可以是任意
OS
系统
3.2.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 的调度机容易阻塞
客户请求到达 vip 后进入 PREROUTING, 在没有 ipvs 的时候因该进入本机 INPUT, 当 IPVS 存在后访问请求在通过 PREROUTING 后被 ipvs 结果并作 nat 转发因为 ipvs 的作用点是在 PREROUTING 和 INPUT 链之间,所以如果在 prerouting 中设定规则会干扰 ipvs 的工作。所以在做 lvs 时要把 iptables 的火墙策略全清理掉。
3.3.DR模式
在
DR
模式中,
RS
接收到访问请求后不需要回传给
VS
调度器,直接把回传数据发送给
client
,所以
RS
和
vs上都要有vip
3.3.1DR模式数据传输过程
1. 客户端发送数据帧给 vs 调度主机帧中内容为客户端 IP+ 客户端的 MAC+VIP+VIP 的 MAC2.VS 调度主机接收到数据帧后把帧中的 VIP 的 MAC 该为 RS1 的 MAC ,此时帧中的数据为客户端 IP+ 客户端的 MAC+VIP+RS1 的 MAC3.RS1 得到 2 中的数据包做出响应回传数据包,数据包中的内容为 VIP+RS1 的 MAC+ 客户端 IP+ 客户端 IP 的MAC
3.3.2.DR模式的特点
1.Director
和各
RS
都配置有
VIP
2.
确保前端路由器将目标
IP
为
VIP
的请求报文发往
Director
3.
在前端网关做静态绑定
VIP
和
Director
的
MAC
地址
3.4LVS工作模式总结
lvs-nat
与
lvs-fullnat
:请求和响应报文都经由
Director
lvs-nat
:
RIP
的网关要指向
DIP
lvs-fullnat
:
RIP
和
DIP
未必在同一
IP
网络,但要能通信
lvs-dr
与
lvs-tun
:请求报文要经由
Director
,但响应报文由
RS
直接发往
Client
lvs-dr
:通过封装新的
MAC
首部实现,通过
MAC
网络转发
lvs-tun
:通过在原
IP
报文外封装新
IP
头实现转发,支持远距离通信
3.5.lvs的调度算法
3.5.1.lvs调度算法类型
ipvs scheduler
:根据其调度时是否考虑各
RS
当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑
RS
的负载情况
动态方法:主要根据每
RS
当前的负载状态及调度算法进行调度
Overhead=value
较小的
RS
将被调度
3.5.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.5.2.lvs动态调度算法
主要根据 RS 当前的负载状态及调度算法进行调度 Overhead=value 较小的 RS 会被调度1 、 LC : least connections (最少链接发)适用于长连接应用 Overhead (负载值) =activeconns (活动链接数) x 256+inactiveconns (非活动链接数)2 、 WLC : Weighted LC (权重最少链接)默认调度方法 Overhead=(activeconns x 256+inactiveconns)/weight3 、 SED :Shortest Expection Delay, 初始连接高权重优先 Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当 node1 的权重为 1 , node2 的权重为 10 ,经过运算前几次的调度都会被 node2 承接4 、 NQ : Never Queue ,第一轮均匀分配,后续 SED5 、 LBLC : Locality-Based LC ,动态的 DH 算法,使用场景:根据负载状态实现正向代理6 、 LBLCR : LBLC with Replication ,带复制功能的 LBLC ,解决 LBLC 负载不均衡问题,从负载重的复制到负载轻的 RS
四.lvs部署命令介绍
4.1.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
4.2.ipvsadm命令
核心功能
:
集群服务管理
:
增、删、改
集群服务的
RS
管理
:
增、删、改
查看
命令参数
管理集群服务ipvsadm-A|E-t ( tcp ) |u ( udp ) |f (防护墙标签) \service-address( 集群地址 )\[-sscheduler( 调度算法 )]\[-p[timeout]]\[-Mnetmask]\[--pepersistence_engine]\[-bsched-flags]ipvsadm-D-t|u|fservice-address 删除ipvsadm–C 清空ipvsadm–R 重载ipvsadm-S[-n] 保存管理集群中的 realserveripvsadm-a|e-t|u|fservice-address-rserver-address[-g|-i|-m]( 工作模式 )[-wweight]( 权重 )ipvsadm-d-t|u|fservice-address-rserver-address 删除 RSipvsadm-Z[-t|u|fservice-address]清楚计数器
4.3.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
火墙标记,是一个数字
2.
管理集群中
RealServer
的曾增删改
五.LVS部署
5.1部署DR模式
5.1.1.实验环境
主机 | ip | vip | 角色 |
---|---|---|---|
R3 | 192.168.10.200 | null | 测试 |
R4 | 192.168.10.100 192.168.6.100 | null | 路由器 |
R8 | 192.168.6.50 GATEWAY:192.168.6.100 | lo:192.168.6.200 | 调度器 |
R9 | 192.168.6.102 | lo:192.168.6.200 | web1 |
R10 | 192.168.6.101 | lo:192.168.6.200 | web2 |
配置实验环境
#在客户端主机中为nat模式网卡
在路由主机中设定双网卡,
ens160
为
nat
网卡,
ens224
为仅主机网卡
ens160:
ens224:
对于
dr
调度器设定网卡为仅主机模式
对于
RS1
的设定网卡为仅主机模式
对于
RS2
的设定网卡为仅主机模式
5.1.2解决vip响应问题
DR
模型中各主机上均需要配置
VIP
,解决地址冲突的方式有三种:
(1)
在前端网关做静态绑定
(2)
在各
RS
使用
arptables
(3)
在各
RS
修改内核参数,来限制
arp
响应和通告的级别
限制响应级别
:arp_ignore
0:
默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:
仅在请求的目标
IP
配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别
:arp_announce
0:
默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:
尽量避免将接口信息向非直接连接网络进行通告
2:
必须避免将接口信息向非本网络进行通告
5.1.3.配置详情
配置要点
1.Director
服务器采用双
IP
桥接网络,一个是
VPP
,一个
DIP
2.Web
服务器采用和
DIP
相同的网段和
Director
连接
3.
每个
Web
服务器配置
VIP
4.
每个
web
服务器可以出外网
配置内容如下:
在
lvs
和
rs
中设定
vip
ip addr add dev lo 192.168.6.100/32
在
RS1
和
RS2
中解决响应问题
在
lvs
中配置策略
测试效果:
5.2部署NAT模式集群
1.Director
服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端
Web
服务器相连
2.Web
服务器采用仅主机网卡与
director
相连
3.Web
服务器网关指向
192.168.0.100
4.
后端
web
服务器不需要连接外网
5.2.1.
实验环境
主机 | ip | vip | 角色 |
---|---|---|---|
R3 | 192.168.10.200 | null | 测试 |
R4 | 192.168.6.100 | 192.168.10.100 | vs |
R9 | 192.168.6.102 GATEWAY:192.168.6.100 | null | web1 |
R10 | 192.168.6.101 GATEWAY:192.168.6.100 | null | web2 |
5.2.2.配置命令
1.
在
node1
中启用内核路由功能
2.
在R4
中添加调度策略
3.测试
六、总结
LVS - NAT(Network Address Translation)模式特点
- 工作原理:
- 在 NAT 模式下,客户端将请求发送到负载均衡器的公网 IP 地址。负载均衡器收到请求后,会改变请求数据包的目标 IP 地址(将其改为后端真实服务器的 IP 地址)和端口(如果需要的话),然后将数据包转发给后端真实服务器。真实服务器处理完请求后,将响应数据包发送回负载均衡器,负载均衡器再将响应数据包的源 IP 地址和端口转换回自己的公网 IP 地址和相应端口,最后将响应发送给客户端。
- 优点:
- 安全性较高:真实服务器的 IP 地址可以隐藏在负载均衡器之后,外部网络无法直接访问真实服务器,对真实服务器起到一定的保护作用。例如,在一些对服务器安全要求较高的场景中,如金融机构的内部服务系统,通过 NAT 模式可以减少真实服务器被直接攻击的风险。
- 对服务器的要求较低:真实服务器可以使用私有 IP 地址,无需配置公网 IP,这样可以节省公网 IP 资源,并且在服务器的网络配置上相对简单。
- 缺点:
- 性能瓶颈可能出现在负载均衡器上:因为所有的请求和响应数据包都需要经过负载均衡器进行地址转换,当请求流量较大时,负载均衡器的处理能力可能会成为系统的性能瓶颈。特别是在处理一些高并发的大数据量传输场景时,如视频流服务,可能会导致响应延迟增加。
- 不支持某些应用层协议:一些应用层协议可能会在 NAT 过程中出现问题,因为这些协议可能会在数据包中嵌入 IP 地址或端口信息,经过 NAT 转换后,这些信息可能会变得不准确,导致协议无法正常工作。
LVS - DR(Direct Routing)模式特点
- 工作原理:
- DR 模式是通过改写请求报文的 MAC 地址,将请求直接发送到真实服务器。客户端的请求数据包到达负载均衡器后,负载均衡器会将数据包中的目标 MAC 地址修改为选定的真实服务器的 MAC 地址,然后将数据包直接发送给真实服务器。真实服务器收到数据包后,由于其网络接口配置了虚拟 IP(VIP),它会认为这个请求是发送给自己的,然后进行处理。真实服务器处理完请求后,直接将响应数据包发送回客户端,不需要经过负载均衡器。
- 优点:
- 高性能:由于响应数据包不需要经过负载均衡器,大大减轻了负载均衡器的负担,能够处理更高的并发请求。在处理大量的 Web 访问请求时,DR 模式可以快速地将请求分发到真实服务器,提高系统的整体响应速度。
- 支持所有的网络应用:因为没有像 NAT 模式那样对 IP 地址和端口进行复杂的转换,所以 DR 模式对各种应用层协议都有很好的支持,几乎不会出现因为协议特性导致的问题。
- 缺点:
- 配置相对复杂:DR 模式要求真实服务器和负载均衡器在同一个物理网段,并且真实服务器需要配置虚拟 IP 地址,还需要对服务器的网络接口进行特殊的配置(如设置 ARP 抑制等),以确保正确接收和处理请求。这在一定程度上增加了系统的配置和维护难度。
- 安全性相对较弱:与 NAT 模式相比,DR 模式下真实服务器的 IP 地址是暴露在网络中的,可能会受到直接的网络攻击。不过可以通过其他网络安全措施(如防火墙等)来加强防护。
LVS - NAT 和 DR 模式的不同点
- 数据包流向不同:
- NAT 模式下,请求和响应数据包都要经过负载均衡器进行地址转换。而 DR 模式下,请求数据包经过负载均衡器修改 MAC 地址后直接发送到真实服务器,响应数据包直接从真实服务器发送回客户端,不经过负载均衡器。
- 性能表现不同:
- DR 模式的性能通常优于 NAT 模式。因为 NAT 模式下负载均衡器承担了大量的地址转换工作,在高并发场景下容易出现性能瓶颈;而 DR 模式减少了负载均衡器的负担,能更好地应对高并发请求。
- 服务器配置不同:
- NAT 模式下,真实服务器可以使用私有 IP 地址,配置相对简单。DR 模式下,真实服务器需要和负载均衡器在同一网段,并且要配置虚拟 IP 地址,还需要进行一些特殊的网络配置,相对复杂。
- 安全性不同:
- NAT 模式安全性较高,能隐藏真实服务器 IP 地址。DR 模式安全性相对较弱,真实服务器 IP 地址暴露,但可以通过其他安全措施来弥补。