适用于各种高并发场景,抗并发能力特别强,LVS主要做的是四层(传输层)负载。
配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,大大减少了人为出错的几率;
应用范围比较广,不仅仅对web服务做负载均衡,还可以对其他应用(mysql)做负载均衡;
DR:直接路由模式
仅从性能上作比较:DR>TUN>NAT>FULLNAT
四种工作模式的详细介绍:
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。
TUN:隧道模式
客户端将访问vip报文发送给LVS服务器;
LVS服务器将请求报文重新封装,发送给后端真实服务器;
后端真实服务器将请求报文解封,在确认自身有vip之后进行请求处理;
后端真实服务器在处理完数据请求后,直接响应客户端。
此模式实现起来较为复杂。
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 的存在。
注意:
FULLNAT模式
无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关。
Full-NAT 相比 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 上将不再有任何限制,大大提高了运维部署的便利性。
均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
(2) 加权轮调 wrr
调度器可以自动问询真实服务器的负载情况,并动态调整权值
(3) 最少链接 lc
动态地将网络请求调度到已建立的连接数最少的服务器上
如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
(4) 加权最少链接 wlc
调度器可以自动问询真实服务器的负载情况,并动态调整权值
带权重的谁不干活就给谁分配,机器配置好的权重高
(5) 基于局部性的最少连接调度算法 lblc
这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
(6) 复杂的基于局部性最少的连接算法 lblcr
记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
(7) 目标地址散列调度算法 dh
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
(8) 源地址散列调度算法 sh
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
(9) 最少期望延迟 sed
不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
(10) 永不排队 nq
无需队列,如果有realserver的连接数为0就直接分配过去
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
(1)HAProxy是支持虚拟主机的,通过frontend指令来实现
(2)支持Session的保持,Cookie的引导等工作
(3)支持url检测后端的服务器出问题的检测会有很好的帮助。
(4)它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
(5)HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡
HAProxy的负载调度算法
(1)roundrobin 表示简单的轮询
(2)static-rr 表示根据权重进行轮询
(3)leastconn 表示最少连接者先处理
(4)source 表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解 决session问题的一种方法
(5)ri 表示根据请求的URI
(6)rl_param 表示根据请求的URl参数
(7)hdr(name) 表示根据HTTP请求头来锁定每一次HTTP请求
(8)rdp-cookie(name) 表示根据据cookie(name)来锁定并哈希每一次TCP请求
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等)、7层(HTTP)。在4层模式下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。(新的1.3之后的版本引入了frontend,backend指令;frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.)
以上是LVS和HAProxy的简介及详情,但上文只是陈述了它们的优秀的地方,下面让我们再来了解一下它们的不足,权衡利弊才能更好的帮我们进行选择。
LVS本身不支持正则表达式的处理,不能做动静分离
网站应用比较庞大时,LVS实现起来比较复杂,特别是后端存在Windows Server的机器时
不支持POP/SMTP协议
不支持SPDY协议
不支持HTTP cache功能
重载配置的功能需要重启进程
下图是对二者进行一个总结:
更多精彩干货分享
点击下方名片关注
IT那活儿
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129888.html
摘要:接入层作用一的聚合。接入层作用二服务发现与动态负载均衡既然统一的入口变为了接入层,则接入层就有责任自动的发现后端拆分,聚合,扩容,缩容的服务集群,当后端服务有所变化的时候,能够实现健康检查和动态的负载均衡。 此文已由作者刘超授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 这个系列是微服务高并发设计,所以我们先从最外层的接入层入手,看都有什么样的策略保证高并发。...
摘要:架设服务器均衡负载方式有多种,是目前使用最广泛的三种方案关于均衡负载架设服务器均衡负载方式有多种,是目前使用最广泛的三种方案。服务器集群环境接下来讲下想要搭的均衡负载环境。 http://homeway.me showImg(http://homeway.me/image/logo-nginx.png); 为jue.so架设一个服务器集群。 架设服务器均衡负载...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4100·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3597·2023-01-11 13:20