负载均衡,顾名思义,就是讲用户的请求均衡的发给多个服务器。
负载均衡 ,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力,同时能够提高网络的灵活性和可用性。
负载均衡的好处
- 透明:对用户来说,不管背后有多少服务器集群,用户感知就像访问一台服务器一样。
- 高性能:三个臭皮匠赛过诸葛亮,人多力量大。
- 水平扩展:再多部署一台服务器很容易。
- 高可用:挂了一台,还有可以切换到其他的正常的服务器。
负载均衡的技术
最常用的有3种:
- Nginx:最最常用,毫无疑问国内使用最多的
- LVS:
- HAProxy:最近在用的
- F5:硬件负载均衡器,收费。
常用的使用方式:
- Web端:Nginx/HAProxy+Keepalived
- 后端:MySQL主从及读写分离,LVS+Keepalived
负载均衡的种类
有很多种负载均衡
- 二层负载均衡:基于MAC地址
- 通过一个虚拟的MAC地址接收请求,然后把请求分配到真实MAC地址
- 三层负载均衡:基于IP地址
- 通过一个虚拟的IP地址接收请求,然后把请求分配到真实IP地址
- 分析IP层和TCP/UDP层(传输层)
- 四层负载均衡:基于IP+端口
- 通过虚拟IP+端口接收请求,然后把真实请求分配到真实服务器
- 七层负载均衡:基于URL等应用层信息
- 通过虚拟的URL接收请求,然后把请求分配到真实的服务器
- 分析HTTP的URL或Cookie(应用层)
没有负载均衡
没有负载均衡时的Web应用通常如下图所示:
我们可以看到,用户是直连Web服务器的。简单是简单,但是可能会遇到以下问题:
- Web服务器挂了:用户就无法访问应用了
- 如果短时间内大量用户同时访问Web应用,服务器可能会响应变慢甚至挂了
4层负载均衡
实现多台服务器的负载均衡最简单的方式使用4层负载均衡。
4层负载均衡是基于IP+端口的负载均衡。
是传输层的负载均衡。
如下图所示:
7层负载均衡
7层负载均衡就是基于URL等应用层信息的负载均衡。
7层负载均衡是应用层负载均衡。
负载均衡算法
多个服务器,要选用哪一台,所以总得有个规则,这就是负载均衡的算法。
常用的算法有:
- roundrobin轮询:轮流选择,公平公正,这也是默认算法
- 最小连接:选最闲(当前连接数最少的)的服务器。长连接时可以考虑用这种。
- hash散列:根据IP地址做hash散列,这样就可以同一个IP的始终(除非重启了)访问同一台服务器。
高可用
High Availability,也就是HAProxy中的HA。
高可用,顾名思义就是高度可用,就算HAProxy挂掉了也还是可以用,应用服务不受影响,用户照样访问。
这样一台HAProxy肯定是不行的——这就是单点。
那么很简单,同时准备几台HAProxy呗,这样就消除单点了。高可用就是消除单点。比如数据库的高可用就几个数据库集群。
常见的HA高可用配置如下所示:
比较容易理解,一台HAProxy正常工作接收用户请求。
另一台是冗余,但它不是多余。它会周期检测工作的HAProxy的健康状态,当原来的状态异常时,就激活另一台HAProxy,接收用户请求。这就是failover机制,故障转移机制。