一、Nginx简介
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。
二、正向代理与反向代理
Nginx一般分为正向代理和反向代理。
反向代理:如果局域网向Internet提供资源服务,让Internet上的其他客户端来访问局域网内的资源,使它们必须通过一个代理服务器来进行访问,这种服务就称为反向代理。正向代理和反向代理逻辑正好相反。
正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
三、Nginx的负载均衡调度算法
1.轮询
默认。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
2.weight轮询
根据后端服务硬件配置,设置不同的权重值。用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大。
#设定负载均衡服务器列表
upstream roundrobin {
#后端服务器访问规则
server 192.168.1.100:8080 weight=1; #server1
server 192.168.1.101:8081 weight=4; #server2
server 192.168.1.102:8090 weight=5; #server3
}
server {
listen 80;
server_name 192.168.1.80;
location / {
proxy_pass http://roundrobin;
}
}
3.ip_hash
每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
#设定负载均衡服务器列表
upstream roundrobin {
#后端服务器访问规则
ip_hash; #添加参数支持哈希
server 192.168.1.100:8080 weight=1; #server1
server 192.168.1.101:8081 weight=1; #server2
server 192.168.1.102:8090 weight=1; #server3
}
}
server {
listen 80;
server_name 192.168.1.80;
location / {
proxy_pass http://roundrobin;
}
}
4.fair
智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了weight轮询和ip_hash优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,需要安装upstream_fair模块。
upstream backend {
server server1;
server server2;
fair;
}
5.url_hash
按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包。
配置示例一:
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法 。
配置示例二:
upstream bakend{ #定义负载均衡设备的Ip及设备状态
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。