nginx负载均衡设置
nginx的upstream目前支持4种方式的分配
1)、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2)、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 2)、ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 3)、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 4)、url_hash(第三方)配置:
在http节点里添加: #定义负载均衡设备的 Ip及设备状态 upstream myServer { server 127.0.0.1:9090 down; server 127.0.0.1:8080 weight=2; server 127.0.0.1:6060 weight=1 max_fails=2 fail_timeout=30s; server 127.0.0.1:7070 backup; } 在需要使用负载的Server节点下添加 proxy_pass http://myServer; upstream 每个设备的状态: down 表示单前的server暂时不参与负载 weight 默认为1.weight越大,负载的权重就越大。 max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 fail_timeout:max_fails 次失败后,暂停的时间。 backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。 location /myhttp { index index.jsp; proxy_pass http://myServer/myhttp/; 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; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; }
处理session的情况
1)使用memcached或其它方式保存 2)ip_hash upstream backend { server 127.0.0.1:8001; server 127.0.0.1:8002; ip_hash; } 注意: (1)nginx不是最前端的服务器。ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash。譬如使用 的是squid为最前端,那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流是肯定错乱的。 (2)nginx的后端还有其它方式的负载均衡。假如nginx后端又有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一 台session应用服务器上。这么算起来,nginx后端只能直接指向应用服务器,或者再搭一个squid,然后指向应用服务器。最好的办法是用 location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去。 3) upstream_hash 解决ip_hash的问题,使用,nginx_upstream_jvm_route --add-module=/path/to/this/directoryEXAMPLE¶1.For resin upstream backend { server 192.168.0.100 srun_id=a; server 192.168.0.101 srun_id=b; server 192.168.0.102 srun_id=c; server 192.168.0.103 srun_id=d; jvm_route $cookie_JSESSIONID; //resion #jvm_route $cookie_JSESSIONID reverse;//tomcat } For all resin servers <server id="a" address="192.168.0.100" port="8080"> <http id="" port="80"/> </server> <server id="b" address="192.168.0.101" port="8080"> <http id="" port="80"/> </server> And start each resin instances like this: server a shell $> /usr/local/resin/bin/httpd.sh -server a start server b shell $> /usr/local/resin/bin/httpd.sh -server b start <server id="a" address="192.168.0.100" port="8080"> <http id="" port="80"/> </server> <server id="b" address="192.168.0.101" port="8080"> <http id="" port="80"/> </server> And start each resin instances like this: server a shell $> /usr/local/resin/bin/httpd.sh -server a start server b shell $> /usr/local/resin/bin/httpd.sh -server b start 具体参考: http://code.google.com/p/nginx-upstream-jvm-route/ http://apps.hi.baidu.com/share/detail/43299477 如何优化 http://www.yanghengfei.com/archives/326/
相关推荐
畅聊架构 2020-06-28
zllbirdonland 2020-06-16
swtIrene 2020-06-04
畅聊架构 2020-06-01
后厂村老司机 2020-04-19
azhuye 2020-11-12
liupengqwert 2020-10-28
YzhilongY 2020-08-31
crazyjingling 2020-08-16
swtIrene 2020-08-14
slovyz 2020-08-14
tinydu 2020-08-09
tinydu 2020-08-03
Studynutlee 2020-08-03
快乐de馒头 2020-07-29
yungame 2020-07-27
buaichidoufu 2020-07-28
wanjichun 2020-07-26