负载均衡简介
负载均衡就是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。
负载均衡方案:
- 硬件负载均衡:F5等
- 软件负载均衡:
1、基于DNS的负载均衡
由于在DNS服务器中,可以为多个不同的地址配置相同的名字,最终查询这个名字的客户机将在解析这个名字时得到其中一个地址,所以这种代理方式是通过DNS服务中的随机名字解析域名和IP来实现负载均衡。
2、反向代理负载均衡(如Apache+JK2+Tomcat这种组合)
该种代理方式与普通的代理方式不同,标准代理方式是客户使用代理访问多个外部Web服务器,之所以被称为反向代理模式是因为这种代理方式是多个客户使用它访问内部Web服务器,而非访问外部服务器。
3、基于NAT(Network Address Translation)的负载均衡技术(如Linux VirtualServer,简称LVS)
该技术通过一个地址转换网关将每个外部连接均匀转换为不同的内部服务器地址,因此外部网络中的计算机就各自与自己转换得到的地址上的服务器进行通信,从而达到负载均衡的目的。其中网络地址转换网关位于外部地址和内部地址之间,不仅可以实现当外部客户机访问转换网关的某一外部地址时可以转发到某一映射的内部的地址上,还可使内部地址的计算机能访问外部网络。
Nginx负载均衡配置
通过Nginx的upstream指令可以实现负载均衡,在该指令中,能够配置负载均衡服务器组。目前负载均衡有四种典型的配置方式,分别为轮询方时,权重方式,ip_hash方式以及利用第三方模块的方式。
- 轮询方式
负载均衡默认设置方式,每个请求按照时间顺序逐一分配到不同的后端服务器进行处理,如果有服务器宕机,会自动剔除
- 权重方式
利用weight指定轮询的权重比率,与访问率成正比,用于后端服务器性能不均的情况
- ip_hash方式
每个请求按访问的IP的hash结果分配,这样可以使每个访客固定访问一个后端服务器,可以解决Session共享问题
- 第三方模块
第三方模块采用fair时,按照每台服务器的响应时间来分配请求,响应时间短的优先分配
第三方模块采用url_hash时,按照url的hash值来分配
在upstream指定的服务器组中,若每个服务器的权重都设置为1(默认),表示当前的负载均衡是一般轮询方式。另外,Nginx本身不包含第三方模块的实现方式,在使用时必须下载对应的upstream_fair模块或安装hash软件包。
upstream server_group {
server 59.110.171.154 weight=1;
server 94.191.112.250 weight=2;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#
#access_log logs/host.access.log main;
location / {
proxy_pass http://server_group;
}
修改配置文件如上,设置权重分别为1,2.
访问即可发现每次请求转发至对应服务器,比例大致为1:2,如果不配置权重,默认1:1,即轮询。
除了weight参数外,还可以配以下参数:
- max_fails:允许请求失败的次数,默认为1.当超过最大次数时,返回proxy_next_upstream指令定义的错误
- fail_timeout:在经历了max-fails次失败后,暂停服务时间
- backup:预留的备份机器,只有别的机器全部坏了才会提供服务
- down:表示当前服务器不参与负载均衡