LVS集群
LVS
LVS概念
简介
LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统。
宗旨
- 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
- 很好的可伸缩性(Scalability)
- 很好的可靠性(Reliability)
- 很好的可管理性(Manageability)
运作流程
终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。
结构图:
相关名词
缩写 | 名称 |
---|---|
调度器 | director,dispatcher,balancer |
RS | Real Server(后端真实提供服务主机) |
CIP | Client IP(客户访问的IP) |
VIP | Director Virtual IP(提供外网访问的虚拟IP) |
DIP | Director IP(虚拟IP主机上的真实IP) |
RIP | Real Server IP(后端真实提供服务主机的IP) |
管理工具
- ipvsadm/ipvs(让用户定义规则)
- ipvsadm:用户空间的命令行工具,用于管理集群服务(即规则的增删查改)
支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议
LVS原理
LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的,IPVS 是 LVS集群系统的核心软件,它的主要作用是:安装在 Director Server 上,同时在 Director Server上虚拟出一个IP 地址,用户必须通过这个虚拟的 IP 地址访问服务器。这个虚拟 IP 一般称为 LVS 的VIP,即 Virtual IP。访问的请求首先经过 VIP 到达负载调度器,然后由负载调度器从Real Server 列表中选取一个服务节点响应用户的请求。 在用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的 Real Server 节点,而 Real Server节点如何返回数据给用户,是 IPVS 实现的重点技术。
LVS工作模式
可伸缩网络结构都与需要一个前端负载调度器负责分配。
基于NAT(网络地址转换)的负载均衡技术:
- VS/NAT路由转发模式(Virtual Server via Network Address Translation)
- VS/TUN IP隧道模式(Virtual Server via IP Tunneling)
- VS/DR直接路由模式(Virtual Server via Direct Routing)
- VS/FULLNAT
1.NAT:路由转发模式
- NAT(Network Address Translation)是一种外网和内网地址映射的技术。
- 多目标的DNAT(iptables)转换;它通过修改请求报文的目标IP地址(同时可能会修改目标端口)挑选出某Real Server的RIP地址实现转发; 在LVS负载均衡调度器上请求先发送给PREROUTING-->INPUT,然后经由监听在INPUT上的LVS程序强制将请求转发给 POSTROUTING
- NAT 模式下,网络报的进出都要经过 LVS 的处理。LVS 需要作为 RS 的网关。当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。
- RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。
这时 RS 的包通过网关(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。客户端无法感知到后端 RS 的存在。
注意
- RS的RIP和Director的DIP必须在同一IP网络
- RS和DIP应该使用私网地址,且RD的网关要指向DIP
- 真实服务器的网关必须设置为LVS的ip地址。
2.DR:直接路由模式
- 请求由 LVS 接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过 LVS
- DR 模式下需要 LVS 和绑定同一个 VIP(RS 通过将 VIP 绑定在 loopback 实现)。
- 一个请求过来时,LVS 只需要将网络帧的 MAC 地址修改为某一台 RS 的 MAC,该包就会被转发到相应的 RS 处理,注意此时的源 IP 和目标 IP 都没变,LVS 只是做了一下移花接木。
- RS 收到 LVS 转发来的包,链路层发现 MAC 是自己的,到上面的网络层,发现 IP 也是自己的,于是这个包被合法地接受,RS 感知不到前面有 LVS 的存在。
而当 RS 返回响应时,只要直接向源 IP(即用户的 IP)返回即可,不再经过 LVS。
DR 模式是性能最好的一种模式。
3.TUN:隧道模式
LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如图3所示。
其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。
注意
- TUNNEL 模式必须在所有的 realserver 机器上面绑定 VIP 的 IP 地址
- TUNNEL 模式的 vip ------>realserver 的包通信通过 TUNNEL 模式,不管是内网和外网都能通信,所以不需要 lvs vip 跟 realserver 在同一个网段内
- TUNNEL 模式 realserver 会把 packet 直接发给 client 不会给 lvs 了
- TUNNEL 模式走的隧道模式,一般不用。
- 需要设置lo接口的VIP不能在公网上出现
4.FULLNAT模式
引入:无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关
改进:相比NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另一种转换,转换过程如下:
- 在包从 LVS 转到 RS 的过程中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。
- 内网 IP 之间可以通过多个交换机跨 VLAN 通信。
- 当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。
- LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改为客户端的 IP。
Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性。
fullnat模式和nat模式相似,但是与nat不同的是nat模式只做了两次地址转换,fullnat模式却做了四次
LVS负载均衡的算法
-
轮叫调度 rr
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载 -
加权轮叫 wrr
调度器可以自动问询真实服务器的负载情况,并动态调整权值 -
最少链接 lc
动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡 -
加权最少链接 wlc
调度器可以自动问询真实服务器的负载情况,并动态调整权值
带权重的谁不干活就给谁分配,机器配置好的权重高 -
基于局部性的最少连接调度算法 lblc
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器 -
复杂的基于局部性最少的连接算法 lblcr
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。 -
目标地址散列调度算法 dh
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。 -
源地址散列调度算法 sh
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。 -
最少期望延迟 sed
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙 -
永不排队 nq
无需队列,如果有realserver的连接数为0就直接分配过去