1. 负载均衡简介
- 负载均衡,英文名称为LoadBalance,其含义就是指将负载进行平衡、分摊到多个后端服务器运行,例如Web服务器、核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
- 这样做的优点就是减少后端单台服务器的压力,将单台服务器索要承受的访问量分给多台,提高项目的可用性。即使挂掉一台后端服务器,也不会影响项目的正常访问。
2. 负载均衡的分类
硬件负载均衡
硬件负载均衡:直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成网络请求转发的任务,独立于操作系统,整体性能高,负载均衡策略多样化,流量管理智能化。

软件负载均衡

软件负载均衡的主流产品有:Nginx、HAProxy、LVS
LVS 可以作为四层负载均衡器。其负载均衡的性能要优于Nginx。
HAProxy可以作为HTTP和TCP负载均衡器。
Nginx、HAProxy 可以作为四层或七层负载均衡器。

负载均衡通信分类

3. 主流负载均衡软件的使用
Nginx
Nginx (engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供IMAP/POP3/SMTP服务。
Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(文:PaMonep)开发的,第一个公开版本0.1.0发布于2004年10月4日。
以高稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。在连接高井发的情况下,Nginx是Apache服务不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000个并发连接数的响应。
Nginx官网提供了三个类型的版本。
Mainline version:Mainline 是Nginx目前主力在做的版本,可以说是开发版。
Stable version:最新稳定版,生产环境上建议使用的版本。
Legacy versions:遗留的老版本的稳定版。
下载地址:http://nginx.org/en/download.html

Nginx支持哪些负载均衡策略?
轮询 权重 ip_hash
负载均衡能实现什么
- 将多个服务器节点绑定在一起提供统一的服务入口。
- 故障转移,在意外发生的时候,可以增加一层保险,减少损失。
- 降低上线运维复杂度,实现平滑上线。
负载均衡就是将请求"均衡"地分配到多台业务节点服务器上。这里的"均衡"是依据实际场景和业务需要而定的。
对于Nginx来说,请求到达Nginx,Nginx作为反向代理服务器,有绝对的决策权,可以按照规则将请求分配给它知道的节点中的一个,通过这种分配,使得所有节点需要处理的请求量处于相对平均的状态,从而实现负载均衡。
Nginx的负载均衡策略
- round robin(轮询)
- random(随机)
- weight(权重)
- fair(按响应时长,三方插件)
- url_hash(url的hash值)ip_hash(ip的hash值least_conn(最少连接数)
第一类最佳实现
weight(权重)
random(随机)
最佳实践,其实就是最常见、最普通的默认配置,当然也是在一定程度上最好用的配置。不知道用什么方式的时候,就可以选择用这一类型。

第二类性能优先
weight(权重)
fair(按响应时长,三方插件)
least_conn(最少连接数)
让业务节点中性能更强的机器得到更多请求,这也是一个比较好的分配策略。
什么是性能更好的机器?这个问题也有很多的维度去考量。
从经验或硬件上分为高权重、低权重的机器。
按照节点请求的响应时长来决定是多分配请求,还是少分配请求。
按照保持的连接数。一般来说保持的连接数越多说明处理的任务越多,也是最繁忙的,可以将请求分配给其他机器处理。

第三类保持稳定
ip_hash
url_hash
很多请求都是有状态的,上一次请求到哪个业务节点,这次还要请求到哪台机器。比如常见的session就是这样一种有状态的业务。
这里Nginx提供了按照客户端ip的hash来作为用户的标示分配、url的hash作为分配标示的规则。本质上还是要找到用户的请求中不变的要素,抽离出来,这样就可以进行分配了。

HAProXy
HAProxy是法国开发者威利塔罗(Wily Tareau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。

haproxy支持哪些负载均衡策略?
1,roundrobin
2, leastconn
3,source
由Websoft9提供的HAProxy镜像环境,预装了HAProxy 2.4,可在云服务器上一键部署。HAProxy提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理,适用于负载特大的web站点。
- 开源,为基于TCP和HTTP的应用程序提供高可用性,负载平衡和代理
- HAProxy基于TCP和HTTP两种模式,支持丰富的负载均衡算法
- 支持SSL,可解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
- 支持HTTP重写与重定向
- 提供基于Web的信息统计,方便查看健康状态和流量数据
- Websoft9已经安装好了HAProxy,无任何安装即开即用

是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理

准备环节
在云控制台获取您的服务器公网IP地址
在云控制台安全组中,确保Inbound(入)规则下的TCP:1080端口已经开启
在服务器中查看HAProxy的默认账号和密码
若想用域名访问HAProxy,务必先完成域名五步设置过程
使用手册地址:https://support.websoft9.com/docs/haproxy
LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。在linux内存2.6中,它已经成为内核的一部分。
源代码地址:https://github.com/alibaba/LVS
Lvs实现负载均衡(以NAT模式为例)

Lvs支持哪些负载均衡策略?
1、rr轮询 2、wrr加权轮询 3、lc最小连接
客户请发送向负载均衡服务器发送请求。负载均衡器接受客户的请求,然后先是根据LVS的调度算法(8种)来决定要将这个请求发送给哪个节点服务器。然后依据自己的工作模式(3种)来看应该如何把这些客户的请求如何发送给节点服务器,节点服务器又应该如何来把响应数据包发回给客户端。
LVS的八种调度算法
LVS的调度算法决定了如何在集群节点之间分布工作负荷。
1)固定调度算法:rr,wrr,dh,sh
2)动态调度算法:wlc,Ic,Iblc,Iblcr
rr:轮询算法,它将请求依次分配给不同的rs节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况
Wrr:加权轮训调度,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
wlc:加权最小连接数调度,假设各台RS的全职依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS
dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS
sh:源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS
lc:最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS.
lblc:基于地址的最小连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。