什么是负载均衡?
通俗来讲,负载均衡是将集群中每台机器在运算能力
所支持的范围内,尽可能最大限度
的提供服务。
举例说明
现在有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;
}