一、简介负载均衡
一般比较大的网站,流量比较大时容易造成服务器宕机,这时候就需要负载均衡来优化。Nginx就是web服务器最常用的负载均衡服务器
二、Nginx负载均衡常用算法
1、轮询(nginx默认的算法)
每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。 注意此算法不理会后端服务器的实际压力。
Nginx配置示例
http {
include mime.types;
default_type application/octet-stream;
#是在http里面的, 已有http, 不是在server里,在server外面
upstream tomcats { #在http这个节下面配置一个叫upstream的,后面的名字可以随意取,但是要和location下的proxy_pass http://后的保持一致。
server 192.168.126.101:81; ##指定后端服务器IP地址或域名
server 192.168.126.102;
server 192.168.126.103:81;
}
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcats; #要与upstream保持一致
}
2、权重算法
在轮询的算法中upstream中设置的地址或域名后面可以再设置weight(权重)参数,weight值与访问值成正比。可以将性能好的服务器weight设置大一点
示例:
upstream tomcats {
server 192.168.126.101:81 weight=2;
server 192.168.126.102 weigth=4;
server 192.168.126.103:81 weigth=1;
}
3、IP哈希算法(不推荐,如果想共享session建议用缓存数据库,如:redis)
每个请求按访问ip的hash结果分配,这样每个访客都固定访问一个应用服务器除非该服务器不可用,可以解决session共享的问题。
示例
upstream tomcats {
ip_hash;
server 192.168.126.101:81;
server 192.168.126.102;
server 192.168.126.103:81;
}
三、nginx的负载均衡参数说明
server | 负载均衡后端服务的IP或者域名,端口不写的话默认为80。高并发场景用域名,再通过DNS进行负载均衡 |
weight | 权重,默认为1,权重越大接收的请求越多 |
max_fails | 最大尝试的失败次数,默认为1,0表示禁止失败尝试 |
fail_timeout | 失败超时时间,默认是10秒,通常3s左右比较合适 |
backup | 热备配置,前面所有服务都出现问题后会自动上线backup服务器 |
down | 标志服务器不可用,这个参数通常配合IP_HASH使用 |