介绍
负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服
务。负载均衡可 以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用
性。 负载均衡主要有如下几个功能点:
负载均衡服务通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台云服务器(Elastic
Compute Service,简称ECS)资源虚拟成一个高性能、高可用的应用服务池;根据应用指定的方
式,将来自客户端的网络请 求分发到云服务器池中。
负载均衡服务会检查云服务器池中ECS的健康状态,自动隔离异常状态的ECS,从而解决了单台ECS
的单点问题,同 时提高了应用的整体服务能力。在标准的负载均衡功能之外,负载均衡服务还具备
TCP与HTTP抗DDoS攻击的特 性,增强了应用服务器的防护能力。
负载均衡服务是ECS面向多机方案的一个配套服务,需要同ECS结合使用。
Nginx负载均衡
ngx_http_upstream_module模块
相关参数:
upstream:定义后端服务器组,会引入一个新的上下文
server:在upstream上下文中server成员,以及相关的参数
least_conn;:最少连接调度算法,当server拥有不同的权重时其为wlc
ip_hash;:源地址hash调度方法
hash :基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者的组
合
keepalive connections;:为每个worker进程保留的空闲的长连接数量;
weight=number # 权重,默认为1;
max_fails=number # 失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用;
fail_timeout=time # 设置将服务器标记为不可用状态的超时时长;
max_conns # 当前的服务器的最大并发连接数;
backup # 将服务器标记为“备用”,即所有服务器均不可用时此服务器才启用;
down # 标记为“不可用”
负载均衡算法
轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔
除故障系统,使 用户访问不受影响。
weight(轮询权值):weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均
衡的情况下。或 者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源
ip_hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,
并且可以有效解决 动态网页存在的session共享问题。
fair:比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智
能地进行负载均 衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。
Nginx本身不支持fair,如果需要这 种调度算法,则必须安装upstream_fair模块。
url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步
提高后端缓存服 务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装
Nginx的hash软件包。
七层负载均衡实验
四层负载均衡实验
七层负载均衡和四层负载均衡的区别:4 层负载均衡本质是转发,而 7 层负载本质是内容交换和代理
参考网址:https://blog.csdn.net/iKaChu/article/details/105977909
HAproxy负载均衡
介绍
HAProxy是一种免费的、非常快速且可靠的解决方案,它提供了高可用性、负载平衡和对TCP和基于http的应用程序的代理。它特别适用于非常高的流量网站,并为世界上访问量最大的网站提供了强大的力量。多年来,它已经成为事实上的标准的opensource负载平衡器,现在随大多数主流Linux发行版本一起发布,并且经常在云平台上默认部署。
项目地址:https://github.com/haproxy/haproxy
代理的作用:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器(将后端服务器的内容压缩后传输给client端)。
缓存的作用:减少冗余内容传输;节省带宽、缓解网络瓶颈;降低了对原始服务器的请求压力,降低了传输延迟。
说明:对于http协议的反向代理,并不提供缓存功能。
负载均衡算法
1 roundrobin,表示简单的轮询,负载均衡基础算法
2 static-rr,表示根据权重
3 leastconn,表示最少连接者先处理
4 source,表示根据请求源IP
5 uri,表示根据请求的URI;
6 url_param,表示根据请求的URl参数来进行调度
7 hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
8 rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求
安装部署
负载均衡配置:
LVS
介绍
LB集群原理:当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设
置好的调度算 法,智能均衡地分发到后端真正服务器(real server)上,为了保证用户请求数据一
致,需要共享存储。
LVS(Linux Virtual Server)Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,并且已
经是 Linux 内核标准的一部分。
LVS架构从逻辑上可分为调度层、Server集群层和共享存储。
官方网是 http://www.linuxvirtualserver.org
组成
ipvs(ip virtual server):工作在内核空间,是真正生效实现调度的代码。
ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实 的服务器(Real Server)
相关术语介绍
DS:Directory Server,前端负载均衡节点
RS:Real Server,后端真实工作服务器
VIP:用户请求目标的IP地址
DIP:内部主机通讯的IP地址
RIP:后端服务器的IP地址
CIP:客户端的IP地址
NAT模式
工作原理概述:
数据包通过VIP找到LVS,其中携带者客户端的CIP和VIP,当到达LVS后,LVS通过DNAT目标的地址转换技术将VIP转换成RIP使其可以找到后端的服务,当数据包到达RS后,其不知道CIP的地址,一般不在统一网段,通过在RS上配置LVS的内部网关来找到LVS,通过LVS的源地址转换技术转换为将RIP转换为VIP发送给客户端
特点:
1. 访问请求、响应数据都要经过调度器
2. 调度器VIP与客户端要在同一网络中,调度器DIP与Realserver需要在另一个网络中
3. 所有Real server的网关要指向DIP,可以使DIP通过调度器传送给客户端
4. 后端Real server操作系统也可以是任意类型
5. 调度器需要启用路由转发功能,是VIP到DIP
DR模式
工作原理概述:
客户端通过VIP进行访问LVS,到达LVS的是CIP和VIP 的数据包,LVS通过在该区域内通过ARP广播获取到后端RS的MAC地址,因此LVS必须和RS在同一网段,并通过调度算法将某个RS对应的MAC地址封装到CIP和VIP的数据包上,进而实现将数据包送达RS的目标,当数据包到达RS后,因为RS端配置了VIP 并启用了ARP抑制,因此数据包可以用过VIP和CIP 在数据包出去时直接和客户端进行对话,而不去要经过LVS调度器
特点:
1. 调度器、Realserver要在同一网络中
2. Realserver的网关要指向网络中的真实网关
3. 所有Real server要存在VIP且
arp_ignore:1 只响应针对物理网卡的ARP请求
arp_announce:2 以适当的IP地址响应数据
4. 后端Real server只能是linux
TUN模式
工作原理概述:
数据包在客户端是CIP:VIP ,当到达LVS之后,通过在其外面封装数据包头来达到其可以到达RS的目的,当到达RS后,RS需要解封装数据包头,提取出VIP和CIP,此时RS上需要有VIP,且开启ARP抑制,如此才能使得客户端的数据包在不经过LVS的情况下顺利返回客户端。
特点:
1.RIP、VIP、DIP全是公网地址
2.RS的网关不会也不可能指向DIP
3.所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
4.不支持端口映射 RS的系统必须支持隧道
LVS实验部署
LVS/NAT实践
环境准备
DS部署
RS部署
ipvsadm命令
LVS/DR实践
环境准备
DS部署
RS部署
调度算法
轮询调度
这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简 单。轮询算法假设 所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真 实服务器,不管后端 RS 配置和处理 能力,非常均衡地分发下去。
加权轮询调度
这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多, 权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台 服务器添加要给权值,如果服务 器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务 器A的2倍。权值越高的服务器,处理的请求越多
目标地址hash
根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可 用的且未超载, 将请求发送到该服务器,否则返回空。
源地址 hash
源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是 可用的且未超载,将请求发送到该服务器,否则返回空。
最少链接
这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求 就优先发给 RS1
加权最少链接
这个算法比 lc 多了一个权重的概念而已
最短延迟调度
在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状 态的数目+1来 实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺 陷:当权限过大的时候,会倒 置空闲服务器一直处于无连接状态。
NQ永不排队/最少队列调度
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个 主机很空间。在 SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考 虑非活动连接,才用NQ,SED要考 虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd 的处于保持状态的服务就需要考虑非活动连接给服务 器的压力。
基于局部性的最少链接
基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根 据请求的目标IP 地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发 送到该服务器;若服务器不存在, 或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的 原则选出一个可用的服务器,将请求发送到该服务器。
带复制的基于局部性最少连接
带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。 它与LBLC算法的 不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个 目标IP地址到一台服务器的映射。该 算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按” 最小连接”原则从服务器组中选出一台服务器,若服务 器没有超载,将请求发送到该服务器;若服务器超 载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加 入到服务器组中,将请求发送到 该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删 除,以降低复 制的程度。
三大主流软件
企业中到底如何选择?
1.需要四层负载且高并发(3万以上),选LVS,否则就选nginx或haproxy
2.nginx有web服务及缓存功能及4和7层负载功能,且配置简单(常规选Nginx)
3.haproxy仅专注于负载均衡,在负载算法和健康检查等好于nginx,但不足以让普通用户选择。
LVS、nginx、haproxy的区别
LVS优点:
1.基于四层负载,并通过【转发】请求给后端节点实现负载功能。
5万并发,真正的5万并发。
2.内核级转发,效率极高。
3.四种负载模式NAT,DR,TUN,FULLNAT,
其中DR\TUN模式实现单臂路由及数据包返回用户,不在经过负载均衡器本身。4.DR模式是其常用负载模式。
5.更完善的高可用支持( keepalived) 。
LVS缺点:
1.只支持四层负载转发,不能实现基于URL7层转发能功能。2.最常用的DR模式不支持端口转换功能。
nginx和haproxy优点
1.基于四层负载,并通过【代理】代替用户请求后端节点实现负载功能。
2.负载服务器占用双倍连接,并且数据返回依然会经过负载均衡器(收费站模式)3.既可以实现四层负载还可以实现7层负载。
4.还可以实现web服务及缓存功能(haproxy仅专注于负载)5.nginx作为web和7层负载更流行
nginx和haproxy缺点:
1.效率及并发能力不如LVS。
2.nginx四层负载太新(近几年才开发出来。)
3.haproxy做负载更专业,但没有nginx在web上使用更流行
四层负载均衡和七层负载均衡
什么是四层负载均衡?
所谓四层就是osI模型的传输层,
主要是基于tcp/ip的负载均衡模式,即基于ip和端口的方式实现将请求转发至后端节点,只做简单的请求支持高并发。
四层负载均衡的常用场景
1)实现tcp协议的负载均衡
例:对后端服务MySQL从库、以及Redis等服务的负载。
纯粹基于四层的web应用无法满足当下的负载均衡需求,中小企业直接会选择基于7层的负载均衡模式(nginx proxy)。见数据库集群架构
2)四层+七层负载均衡架构
在web前端的7层负载均衡之前,架设四层负载均衡以实现大规模高并发集群架构访问。
四层负载均衡专注于tcp请求的转发,把更复杂的调度(例如:动静分离、业务分离、根据来源设备调度等)交给7层负载均衡处理。
四层负载均衡优缺点:
1)基于tcp/ip,即IP+端口的负载均衡
2)四层更快:特别是lvs负载均衡,在内核空间处理,不用走用户空间。处理速度更快3)四层适合大型站点,处于网站接入层最前端,结合四层+七层使用
(四层放在最前面专注做数据转发,后面可以用七层来继续处理更复杂的业务。一般是结合使用)
4))目前主要应用在后端tcp业务的负载,例如mysql,redis,k8s集群,数据库集群,应用服务器集群。
什么是七层负载均衡?
七层就是基于URL等应用层信息的负载均衡。从第七层"应用层"开始,根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器,一般用于做复杂的请求转发,例如:请求某个商品页、请求首页等等比较复杂的,业务可以分离的。
七层负载均衡优缺点:
1)基于应用层http/https的负载均衡,实现开源软件有nginx、haproxy、F5(硬件)2)七层功能更多:经内核空间进入用户空间的应用层进行转发。
3)可以实现更复杂的负载均衡控制,比如基于url、session、动静分离等。4)会占用更多的CPU、内存资源,承载的并发比四层更少。
5)七层适合中小站点web服务,只使用七层负载均衡
Keepalived
简介
Keepalived是Linux下一个轻量级别的高可用解决方案,Keepalived起初是为LVS设计的,专门用
来监控集群系统 中各个服务节点的状态,如果某个服务器节点出现故障,Keepalived将检测到后
自动将节点从集群系统中剔除。
后来Keepalived又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗
余协议)出现的目 的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运
行,因此Keepalvied一方面具有服 务器状态检测和故障隔离功能,另外一方面也有HAcluster功
能。
健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,
icmp请求,http请 求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业
务的服务器)进行保活;而失败切换 主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主
备负载均衡器的心跳,当主负载均衡器出现问题时, 由备负载均衡器承载对应的业务,从而在最大
限度上减少流量损失,并提供服务的稳定性。
VRRP协议(一主 + 多备,共用同一个IP地址,但优先级不同)
1 VRRP 虚拟冗余路由协议,解决静态路由的单点故障
2 通过竞选机制将路由任务交给某台VRRP路由器
3 VRRP采用多播IP 及224.0.0.18 实现高可用之间的通信
4 工作时主节点发包,当备节点接收不到数据包时,通过竞选backup上升为主节点。
5 VRRP 使用了加密数据,但keepalived 官方希望使用明文用户名和密码
6 keepalived 高可用是通过VRRP实现的,keepalive在服务时,只有主节点是接受资源的,备节点是停滞状态、。当主节点恢复时,备用节点将自动将数据交给主节点。
keepalived 服务的三个重要功能
1 管理LVS负载均衡软件
2 实现对LVS集群节点的健康检查功能
3 作为系统网络服务的高可用功能
keeplived 实现高可用示意图
安装部署:
keepalived配置详解
配置文件可以分为三块:
**全局定义块:**对整个 Keepalive 配置生效的,不管是否使用 LVS;
**VRRP实际定义块:**是keepalived的核心;
1、 vrrp_sync_group VRRP同步组
同步组是相对于多个VRRP实例而言的,在多个VRRP实例的环境中,每个VRRP实例所对应的网络环境会有所不同,假设一个实例处于网段A,另一个实例处于网段B,而如果VRRP只配置了A网段的检测,那么当B网段主机出现故障时,VRRP会认为自己仍处于正常状态,不会进行主备节点切换,这样问题就出现了。而同步组会将所有VRRP实例都加入同步组中,这样任何一个实例出现问题,都会导致keepalived进行主备切换;
以实例组group至少包含一个vrrp实例。
2、Vrrp实例vrrp_instance。VRRP实例配置即keepalived的高可用功能
VRRP实例段主要用来配置节点角色(主从),实例绑定端口,节点间验证机制,集群服务IP等,如:
3、keepalived的LVS配置
LVS配置段以virtual_server为开始标识,此段分为两部分:real_server段和健康检测段