负载均衡,
Load Balancing
,就是将对请求的处理分摊到多个操作单元上进行。这个均
衡是指在大批量访问前提下的一种基本均衡,并非是绝对的平均。
对于
Web
工程中的负载均衡,就是将相同的
Web
应用部署到多个不同的
Web
服务器
上,形成多个
Web
应用服务器。当请求到来时,由负载均衡服务器负责将请求按照事先设
定好的比例向
Web
应用服务器进行分发,从而增加系统的整体吞吐量。
负载均衡分类
(
1
) 软硬件分类
负载均衡可以通过负载均衡软件实现,也可通过硬件负载均衡器实现
A
、硬件负载均衡
硬件负载均衡器的性能稳定,且有生产厂商作为专业的服务团队。但其成本很高,一台
硬件负载均衡器的价格一般都在十几万到几十万,甚至上百万。知名的负载均衡器有
F5
、
Array
、深信服、梭子鱼等。
B
、 软件负载均衡
软件负载均衡成本几乎为零,基本都是开源软件。例如,
LVS
、
HAProxy
、
Nginx
等。
(
2
) 负载均衡工作层分类
负载均衡就其所工作的
OSI
(开放系统互联模型)层次,在生产应用层面分为四类:
A
、七层负载均衡
L7
七层负载均衡,即应用层负载均衡,基于
HTTP
协议的负载均衡。其是通过虚拟的
URL
,
将请求分配到真实的服务器。其一般应用于基于
HTTP
协议的
B/S
架构系统。
Nginx
提供的就
是七层负载均衡功能。
B
、 四层负载均衡
L4
四层负载均衡,即传输层负载均衡,基于
TCP
协议的负载均衡。其是通过虚拟
IP+
端口
号的形式,将请求分配到真实的服务器。其一般应用于
C/S
架构的内部
ERP
系统。
LVS
(
Linux
Virtual Server
,一种软负载均衡器)和
F5
(一种硬件负载均衡设备)提供的就是四层负载均
衡。当然,
Nginx Plus
(
Nginx
的商业授权版)提供了四层负载均衡功能。有些
DNS
提供的也
是四层负载均衡。
C
、 三层负载均衡
L3
三层负载均衡,即网络层负载均衡,基于
IP
协议的负载均衡。其是通过虚拟
IP
的形式,
将请求分配到真实的
IP
。有些
DNS
提供的是三层负载均衡。
D
、二层负载均衡
L2
二层负载均衡,即链路层负载均衡。其是通过虚拟
MAC
地址的形式,将请求分配到真
实
MAC
地址。生产环境中也可以为
DNS
配置二层负载均衡。
负载均衡的实现
(
1
) 总体规划
该机群包含一台
Nginx
服务器,两台
Tomcat
服务器。将前面打过包的
web
工程直接部
署到两台
Tomcat
主机上。然后,在
Nginx
服务器上设置对这两台
Tomcat
主机的负载均衡。
(
2
) 配置
Nginx
主机
A
、修改
Nginx
主机的
hosts
文件
B
、 修改
Nginx
配置文件
Nginx
负载均衡策略
Nginx
内置了三种负载均衡策略,另外,其还支持第三方的负载均衡。而每种负载均衡
主机根据负载均衡策略的不同,又可设置很多性能相关的属性
(
1
) 轮询
默认的负载均衡策略,其是按照各个主机的权重比例依次进行请求分配的。该策略适用
的场景是:根据主机性能设置不同权重。
对于每台主机,除了像
weight
一样可以设置的属性外,还可以设置如下属性。
fail_ timeout
:表示当前主机被
Nginx
认定为停机的最长失联时间,默认为
10
秒。常与
max_fails
联合使用。
max_fails
:表示在
fail_timeout
时间内最多允许的失败次数。即
Nginx
在
fail_timeout
时
间内向当前主机所发出的所有请求,超过了
max_fails
次请求失败,则认为当前主机已
经停机,即使没有到达
fail_timeout
时限。默认值为
1
。
fail_timeout
与
max_fails
的关系
类似于汽车保养时间间隔与公里数的关系,谁先到达以谁为准。
backup
:表示当前服务器为备用服务器。当运行服务器发生停止服务状况时,备用服务
器会自动补上。原来停止服务的服务器又开始服务时,其会自动转为备用机,暂停服务。
down
:表示当前服务器永久停机。
(
2
)
ip_hash
指定负载均衡器按照基于客户端
IP
的分配方式,该策略确保了相同的客户端的请求一
直发送到相同的服务器,以保证
session
会话,解决了
session
不能跨服务器的问题。
对于该策略需要注意以下几点:
此策略适合有状态服务,比如
session
。
在
nginx1.3.1
版本之前,该策略中不能指定
weight
属性。
该策略不能与
backup
同时使用。
当有服务器宕机,必须手动指定
down
属性,否则请求仍是会落到该服务器
(
3
)
least_conn
把请求转发给连接数最少的服务器。
Nginx Plux
的四层负载均衡实现
Nginx Plus
是
Nginx
的商业版,其官网是:
https://nginx.com
同样是修改
nginx.conf
文件,添加一个
stream
模块,其与
events
、
http
等模块同级。在
其中配置
upstream{}
与
server{}
模块。此时需要注意,通行代理配置在
server{}
中(前面的是
配置在
server
模块的
location
模块中),且不能再是
http://
开头的了,因为其为四层负载均
衡,负载均衡协议不再是
HTTP
协议了。