负载均衡算法
upstream 支持4种负载均衡调度算法:
A、 轮询(默认) :每个请求按时间顺序逐一分配到不同的后端服务器;
B、 ip_hash :每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip 的请求被打到固定的机器上,可以解决session问题。
C、 url_hash :按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候 效率。
D、 fair :这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载 均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。 Nginx 本身是不支持 fair 的,如 果需要使用这种调度算法,必须下载Nginx的 upstream_fair 模块。
nginx负载均衡配置状态参数
down
,表示当前的server暂时不参与负载均衡。
backup
,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力轻。
max_fails
,允许请求失败的次数,默认为1。当超过大次数时,返回proxy_next_upstream 模块定义的错 误。
fail_timeout
,在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使 用。
upstream myweb {
server 172.17.14.2:8080 weight=2 max_fails=2 fail_timeout=2;
server 172.17.14.3:8080 weight=1 max_fails=2 fail_timeout=1;
}
配置
准备三台机器: 代理服务IP:10.0.105. --配置本地host解析域名;
后端服务器IP:
nginx-a :10.0.105.199
nginx-b:10.0.105.202
后端服务器将nginx服务启动
配置代理服务器的nginx配置文件
worker_processes 4;
worker_rlimit_nofile 102400;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
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;
keepalive_timeout 65;
gzip on;
upstream testweb {
ip_hash;
server 10.0.105.199:80 weight=2 max_fails=2 fail_timeout=2s;
server 10.0.105.202:80 weight=2 max_fails=2 fail_timeout=2s;
}
server {
listen 80;
server_name www.test.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
proxy_pass http://testweb;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
upstream testapp {
server 10.0.105.202:8081 weight=2 max_fails=2 fail_timeout=2s;
server 10.0.105.199:8081 weight=2 max_fails=2 fail_timeout=2s;
}
server {
listen 81;
server_name www.app.com;
charset utf-8;
#access_log logs/host.access.log main;
location / {
proxy_pass http://testapp;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
浏览器测试访问:
http://www.test.com/
http://www.app.com:81/