Nginx配置3-反向代理&负载均衡
部署架构
IP | 主机名 | 系统软件版本 | 描述 |
---|---|---|---|
10.24.1.16 | app-node1 | Tomcat & Nginx1.16.0 | app-node1应用服务器 |
10.24.1.17 | app-node2 | Tomcat | app-node2应用服务器 |
配置文件
#设定负载均衡的服务器列表
upstream app_cluster {
sticky;
server 10.24.1.16:7001; weight=10 down max_fails=3
server 10.24.1.17:7001; weight=5 backup max_conns=800;
}
# down:表示当前的server暂时不参与负载
# weight:默认为1,weight越大,负载的权重就越大。
# backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。
# max_conns=800 根据不同机器配置设置最大连接数,防止挂掉
# max_fails=3 失败3次认为是宕机然后会自动从负载中摘除
#虚拟服务器信息
server {
listen 80;
server_name 10.24.1.16; #IP模式服务器名称
......
#配置资源规则
location / {
#反向代理至weblogics服务器列表
proxy_pass http://app_cluster;
#反向代理的一些配置,将主机跟真实IP写入HTTP头中
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
......
}
}
调度策略
Nginx支持的负载均衡策略有很多,比如round robin(轮询)、random(随机)、weight(权重)、fair(按响应时长)、url_hash(url的hash值)、ip_hash(ip的hash值)、least_conn(最少连接数)等等,具体选用哪种策略要根据要达到的目标来选择。
常用配置
- 轮询(默认)
- weight权重
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
指定轮询几率weight和访问比率成正比,用于后端服务器性能不均的情况。
业务粘性优先
- ip_hash
- url_hash(第三方)
- sticky(nginx-sticky-module)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
通过访问url的hash来分配请求,使每个URL定向到同一个放置服务器,从而使服务器为缓存时比较有效。
与ip_hash算法无法共存,为后台各真实服务器设置一个唯一的route值,并通过cookie的方式返回到客户端,同一次 会话对应后台同一台真实物理机,cookie为默认为会话级,如果不设置expires过期时间那么关闭浏览器会话就失效。
性能优先
-
fair(nginx-upstream-fair)
-
least_conn(最少连接数)
-
weight
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
按照保持的连接数。一般来说保持的连接数越少处理的任务越少,资源越空闲,可以交由这台机器处理。
从经验或硬件上把性能好的机器设置的权重高一些。
健康检查
location /status {
check_status;
}