目录
一、描述
二、nginx 五种分配方式
1.轮询(默认)
2.weight
3.ip_hash
4.fair(第三方)
5.url_hash(第三方)
三、参数描述
四、cookie分流
五、Nginx 其他参考
一、描述
公司最近有个项目在运行时,用户频繁请求,用户量过多,导致socket连接拒绝及超时等等。又无法紧急修改该项目。所以想到使用nginx进行 解决,部署多服务。但是这样一来又有一个问题,就是同一用户 的 session 和 cookie 如果使用 nginx 的轮询,会导致 很多问题,cookie与session不存在。又考虑到 使用 ip_hash ,但是 ip_hash有一个弊端,就是 ip_hash的算法机制,导致 同一局域网所在的 用户都会分配到 同一服务上,又看了 服务日志,发现 有好多请求的地址 前三位相同。所以 研究决定使用 cookie分流。
nginx 的作用及基本使用不在这里介绍了。
二、nginx 五种分配方式
1.轮询(默认)
每个请求按照时间顺序,按照顺序分配到不同服务器。如果 服务器 down(挂)掉,能自动清除。
upstream xxx {
server 192.168.0.101:8808;
server 192.168.0.108:8808;
}
2.weight
几率查询,和你 weight 指定的比例相关,和访问比率成正比。大多用于后端服务性能不均的情况下。
这里 weight 比例为 1:2,所以101的压力基本上是108的两倍。
upstream xxx {
server 192.168.0.101:8808 weight=1;
server 192.168.0.108:8808 weight=2;
}
3.ip_hash
每个请求按照访问ip的hash结果进行固定访问。可以解决session和cookie共享问题。
upstream xxx {
ip_hash;
server 192.168.0.101:8808;
server 192.168.0.108:8808;
}
注意:
这里会产生一种问题:Nginx和客户端处于同一个局域网,使用ip_hash负载均衡策略,不同客户端的请求全部都分发到同一个后台服务器。
原因:主要原因就是,局域网前三段ip相同,这样Nginx在ip_hash(hash值计算)的时候,就将该类所有ip都转发到一个后端了。
4.fair(第三方)
官网:
The Nginx fair proxy balancer enhances the standard round-robin load balancer provided
with Nginx so that it will track busy back end servers (e.g. Thin, Ebb, Mongrel)
and balance the load to non-busy server processes.
简单翻译一下,fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。
upstream backserver {
fair;
server 192.168.0.14;
server 192.168.0.15;
}
5.url_hash(第三方)
按访问url的hash结果来分配请求, 使每个url定向到同一个后端服务器, 后端服务器为缓存时比较有效.
upstream xxx { server 192.168.0.101:8808; server 192.168.0.108:8808; hash $request_uri; }
三、参数描述
-
down
表示单前的server暂时不参与负载 -
weight
默认为1.weight越大, 负载的权重就越大. -
max_fails
许请求失败的次数默认为1.当超过最大次数时, 返回proxy_next_upstream 模块定义的错误 -
fail_timeout:max_fails
max_fails 次失败后, 暂停的时间. -
backup
其它所有的非backup机器down或者忙的时候, 请求backup机器. 所以这台机器压力会最轻.
nginx支持同时设置多组的负载均衡, 用来给不用的server来使用. -
client_body_in_file_only
设置为On 可以讲client post过来的数据记录到文件中用来做debug -
client_body_temp_path
设置记录文件的目录 可以设置最多3层目录 -
location
对URL进行匹配.可以进行重定向或者进行新的代理负载均衡 - worker_connections 连接数(使用epoll的I/O模型):默认为1024
- worker_processes 工作进程(nginx启动后有多少个worker处理http请求): 一般是你的cpu数,或者2倍
四、cookie分流
这里使用正则匹配 ip地址后缀,使用不同的服务,实现分流。
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#root ;
#pid logs/nginx.pid; events {
worker_connections 10240;
} http {
map $COOKIE_ickey $group { # 分配规则
~*[1-5]$ apache001; # cookie 0-5结尾走apache001
#~*[6-9]$ apache002; # cookie 6-9 结尾走apache002
default apache002; #默认
}
upstream apache001 {
server 192.168.0.101:7707 weight=1 max_fails=1 fail_timeout=30s;
} upstream apache002 {
server 192.168.0.101:8808 weight=1 max_fails=1 fail_timeout=30s;
}
upstream root {
server 192.168.0.101:8808 weight=1 max_fails=1 fail_timeout=30s;
}
server {
listen 192.168.0.101:8090;# 监听 地址及端口
server_name test.test.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
index index.html index.htm;
proxy_pass http://$group;
}
}}
五、Nginx 其他参考
nginx ftp 图片服务器搭建之后使用http访问进行配置文件的修改
Linux 下 配置 Nginx 图片服务器
Linux 搭建nginx 添加服务常用命令 及开机自启
nginx 反向代理去除前缀