什么是负载均衡?
通俗来讲,负载均衡是将集群中每台机器在运算能力所支持的范围内,尽可能最大限度的提供服务。
举例说明
现在有A、B、C三台计算机,并且这三台计算机的配置不同(CPU、内存)这三台计算机的运算能力分别为:A->10、B->8、C->5。
| 主机名 | 运算能力 |
|---|---|
| A | 10 |
| B | 8 |
| C | 5 |
那么当流量(网络请求)过来了以后,该怎么去支配这三台机器呢?
- 平均分配
由于三台机器的计算能力不同,如果对流量进行平均分配,因为主机C的能力最小,但是却做了和主机A、B同等重量的活儿,主机C会不堪重负,轻则出现服务延迟,重则宕机,所以针对上述实例来说,流量平均分配是不可行的。 - 适量而行、按需分配
我们已知主机A、主机B、主机C的运算能力,我们可以根据他们各自的运算能力,对其分配流量。
分配策略如下:
为每个主机分配一个权重,主机的运算能力越大,权重越大。
| 主机名 | 权重 | 命中概率 |
|---|---|---|
| A | 10 | 10/(10+8+5) |
| B | 8 | 8/(10+8+5) |
| C | 5 | 5/(10+8+5) |
如果每个主机的运算能力相同,那就将每个主机的权重设为相同,除此之外,还可以随机挑选一个主机进行分配
负载均衡分类?
负载均衡分为七层负载均衡和四层负载均衡,七层、四层这两个概念是从计算机网络网络协议中得到的,七层就是应用层,四层就是运输层,运输层的核心协议是TCP、UDP,TCP和UDP的核心就是IP和端口号。
- 七层负载均衡
流量的分配策略主要是应用层协议,HTTP请求过来以后,会根据URL进行分配主机。 - 四层负载均衡
和七层负载均衡不一样的是,四层负载均衡不依赖HTTP请求的URL,直接由后端为通过分配策略为其分配流量。
用Nginx做负载均衡
Nginx的upstream模块简单使用
- 权重分配
如果weight不指定,默认都为1,weight越大,权重越大。
upstream linuxidc{
server 10.0.0.77 weight=5;
server 10.0.0.88 weight=10;
}
- 根据ip的hash值进行分配
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。
upstream resinserver{
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}