#nginx4--负载均衡

明确一点,什么是负载均衡呢?我们可以通过下面的场景来理解负载均衡,普通web应用部署到多台应用服务器上,客户端通过访问应用服务器发送请求,最简单的就是n对1模式,n个客户端访问同一个应用服务器,这种情况当并发量大了,就无法应对,而且,如果只有一台服务器时,这个服务器挂了,那么对于网站来说是个灾难.;解决方案便可以横向扩充n台应用服务器,并且客户端访问与应用服务器中间加上负载均衡配置,负载均衡能实现的效果主要有三个:
在这里插入图片描述
1)转发功能:按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
2)故障移除:通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
3)恢复添加:如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。
以上就是负载均衡的概念。通过上面的理解,我们了解到负载均衡的作用就是减轻单个服务器的压力,提高系统的并发量。例如,现在同时发出50000个用户的请求,我们知道tomcat最大的请求并发数为250,因此能维持系统稳定所需的横向扩展tomcat服务器为200个,但是如何将50000个用户的请求均匀地分配到每一个tomcat服务器上来呢?这就属于负载均衡的范畴了。

(8)负载均衡的实现
我们先来看一下反向代理实现tomcat集群的方式(将同一个war包置于tomcat的webapp中,假设服务的端口分别为8082和8083):
server {
listen 8088;
server_name 192.168.154.4 yzh.com.cn;
#location / {
# root D:\software_package\nginx-1.7.7\html;
# root E:/hphg/tempFile;
# index index.html index.htm;
#}

    error_page   500 502 503 504  /50x.html;
	
    location = /50x.html {
        root   html;
    }
	
	location /yx-web/ {
		proxy_pass http://192.168.154.4:8080/yx-web/;
	}
	
	location /yx-web2/ {
		proxy_pass http://192.168.154.4:8080/yx-web/;
	}
	
	location /test/ {
		proxy_pass http://192.168.154.4:8080/test/;
	}
	
	location /test2/ {
		proxy_pass http://192.168.154.4:8082/test/;
	}
	
	location /test3/ {
		proxy_pass http://192.168.154.4:8083/test/;
	}
	
	#引入js静态资源
	location ~ \.(js)$ {
        root D:/nginx_static_resources/test/js;
	}
	#引入css静态资源
	location ~ \.(css)$ {
        root D:/nginx_static_resources/test/css;
	}
}

使用反向代理能够实现tomcat集群,但是无法解决并发请求的问题,这就需要用到nginx的负载均衡。nginx目前负载的upstream分发策略有如下几种方式。

1)、轮询 ——1:1 轮流处理请求(默认)
每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。
注:轮询算法是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

2)、权重 ——you can you up
通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
3)、ip_哈希算法
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。
现在我们来看看负载均衡的代码配置(在conf.xml中配置):
第一步:在http节点里添加:
#定义负载均衡设备的 Ip及设备状态
upstream tomcatserver {
server 192.168.154.4:8082 weight=3;
server 192.168.154.4:8083;
}
说明:
upstream 每个设备的状态:
down 表示单前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

第二步:在server节点下添加服务,服务名与upstream策略保持一致:
server {
listen 8088;
server_name 192.168.154.4 yzh.com.cn;
location /test/ {
proxy_pass http://tomcatserver;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

#引入js静态资源
location ~ .(js)$ {
root D:/nginx_static_resources/test/js;
}
#引入css静态资源
location ~ .(css)$ {
root D:/nginx_static_resources/test/css;
}
}

第三步,访问:通过http://yzh.com.cn:8088/test/index.jsp来进行访问。需要注意的是,由于我们采用的是权重upstream策略,weight 默认为1.weight越大,负载的权重就越大。 这句话我们可以理解为当weight 越大时,nginx代理的那台服务器的几率就越大,反之,则代理的几率就越小,这一点可从http://yzh.com.cn:8088/test/index.jsp访问来模拟。

注意:Nginx还支持多组的负载均衡,可以配置多个upstream 来服务于不同的Server。

猜你喜欢

转载自blog.csdn.net/yzh18373476791/article/details/83809515