负载均衡(Load Balance)在不同的领域有不同的概念。其基本概念是为了减轻某个或某些实体的负载,将任务通过某种策略分配到多个实体上去,实现负载在不同实体间的平衡。
负载均衡,意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的有效方案。
负载均衡分类
- 二层负载均衡:是通过一个虚拟 MAC 地址接收请求,然后再分配到真实的 MAC 地址
- 三层负载均衡:是通过一个虚拟IP地址,然后再分配到真实的IP。
- 四层负载均衡:是通过虚机的IP+端口接收请求,然后再分配到真实的服务器;
- 七层负载均衡:是通过虚机主机名或者URL接收请求,再根据一些规则分配到真实的服务器,常见的应用是nginx。
四层负载与七层负载
四层负载均衡本质是转发,而七层负载本质是内容交换和代理。
实现负载均衡工具
实现四层负载软件(硬件)有:F5、LVS、HAProxy、Nginx
实现七层负载软件有:HAProxy、Nginx、MySQL Proxy
Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件。
- LVS
LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。使用LVS技术要达到的目标是:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。LVS主要用来做四层负载均衡。 - Nginx
Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。Nginx主要用来做七层负载均衡。 - HAProxy
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。HAProxy主要用来做七层负载均衡。
负载均衡算法
静态负载均衡算法
轮询(Round Robin):服务器按照顺序循环接受请求。
随机(Random):随机选择一台服务器接受请求。
权重(Weight):给每个服务器分配一个权重值,根据权重来分发请求到不同的机器中。
IP哈希(IP Hash):根据客户端IP计算Hash值取模访问对应服务器。
URL哈希(URL Hash):根据请求的URL地址计算Hash值取模访问对应服务器。
一致性哈希(Consistent Hash ):采用一致性Hash算法,相同IP或URL请求总是发送到同一服务器。
动态负载均衡算法
最少连接数(Least Connection):将请求分配给最少连接处理的服务器。
最快响应(Fastest Response):将请求分配给响应时间最快的服务器。
观察(Observed):以连接数和响应时间的平衡为依据请求服务器。
预测(Predictive):收集分析当前服务器性能指标,预测下个时间段内性能最佳服务器。
动态性能分配(Dynamic Ratio-APM):收集服务器各项性能参数,动态调整流量分配。
服务质量(QoS):根据服务质量选择服务器。
服务类型(ToS): 根据服务类型选择服务器。