1. nginx反向代理配置
1.1 反向代理示意图
1.2 反向代理配置
http { upstream backend { server localhost:8080; } server { listen 80; server_name www.test.com; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 6000; proxy_buffer_size 16k; proxy_buffers 8 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; location / { proxy_pass http://backend; 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;
} } }
|
2. nginx负载均衡配置
2.1 负载均衡架构图
nginx负载均衡通过upstream模块支持,这是画的一个比较简单的模型图,通过nginx反向代理结合负载策略,选中后端tomcat集群中的一台进行实际业务请求处理。这里集群有一个session共享的问题,此处是采用外部缓存组件redis或memcache来解决,也有其他方案,例如,三方模块nginx-sticky-module(这个模块的作用是通过cookie黏贴的方式将来自同一个客户端(浏览器)的请求智能分发到同一个后端服务器上处理),或三方模块nginx_upstream_jvm_route(第一次请求分发到某个后端服务,以后的请求都会固定到该后端)
2.2 负载均衡配置
普通ip_hash和权重配置 upstream backend { ip_hash; server 192.168.1.1:8080 weight 2; server 192.168.1.2:8080 weight=1 max_fails=2 fail_timeout=30s ; server 192.168.1.3:8080 backup; } server { location / { proxy_pass http://backend; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; }
|
fair实现负载均衡配置 upstream backend { server 192.168.1.1:8080; server 192.168.1.2:8080; fair; }
|
sticky实现session共享配置 upstream backend { server 192.168.1.1:8080; server 192.168.1.2:8080; sticky; }
|
jvm_route实现session共享配置 upstream backend { server 192.168.1.1:8080 srun_id=p1; server 192.168.1.2:8080 srun_id=p2; jvm_route $cookie_JSESSIONID|sessionid reverse; } 修改tomcat的server.xml配置,jvmRoute值与nginx配置里的srun_id值一致 <Engine name="Catalina" defaultHost="localhost" jvmRoute="p1">
|
weight : 轮询权值可用在ip_hash,默认值为1,和命中率成正比
max_fails : 允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout : 有两层含义,一是在 30s 时间内最多容许 2 次失败;二是在经历了 2 次失败以后,30s时间内不分配请求到这台服务器。
backup:预留的备份机器。当其他所有的非backup机器出现故障的时候,才会请求backup机器,因此这台机器的压力最轻
max_conns: 限制同时连接到某台后端服务器的连接数,默认为0即无限制。因为queue指令是commercial,所以还是保持默认吧。
proxy_next_upstream : 这个指令属于 http_proxy模块的,指定后端返回什么样的异常响应时,使用另一个realserver
2.3 负载均衡策略
轮询(default): 每个请求按时间顺序逐一分配到不同的后端服务器
权重(weight): Weight 指定轮询权值,Weight值越大,分配到的访问机率越高
ip_hash: 每个请求按访问IP的hash结果分配
HttpUpstreamFairModule:将请求转发到响应最快的后端服务器,fair是三方模块,需编译进nginx