背景
不管是否很大型的系统,采用负载均衡的意义都是相当滴重要。
如果是大型系统,毫无疑问当系统负载能力达到一个服务所能承受的极限时,用多个服务来分摊用户请求的压力是非常合理的想法。这就好比汽车站刚开始只有一辆汽车,当人实在是太多时,最简单拓展运输能力的方式就是再来一辆汽车。
如果是小型系统,负载均衡也是相当重要,最基本的需求,当你的代码需要升级时,要求系统运行不能停止,如果只有一个服务在跑,那就没办法了。但是如果有负载均衡,完全可以在负载比较低时,一台一台的更新。
综上所述,无论你是大神架构师,还是虾米程序员,都应该对负载均衡有些了解。
这其中,nginx实现负载均衡那是相当简单,而且高效,厉害了。
原理
原理灰常简单,nginx监听一个80端口,然后将请求转发到不同服务去处理即可。
注意此处不同服务可能是一台服务器上的不同端口的web服务,也可以是不同服务器上的各个端口的web服务,都可以。
原理如此简单,实现也很容易,详细说下。
搭建实践环境
无非是安装一个nginx,用来监听请求,安装两个tomcat,用来测试是否实现了负载均衡。
具体安装nginx和两个tomcat的过程此处不再一一细讲,前面的章节说的很明白了。
我们要的效果是nginx在80端口如图:
两个tomcat分别在8012和8022端口服务,注意为了区分是哪个tomcat上的网页,我首页改了下(位置在tomcat/webapps/ROOT/index.jsp)
配置nginx负载均衡
很简单,如下,我感觉都无需解释了:
首先nginx server监听80端口,然后将请求转发到mytomcats。
mytomcats这个upstream有两个权重一样的服务器负责接收请求,也就是如果有100个请求,那这老哥俩一人500个请求呗。这哥俩就是8012端口和8022端口的服务。
当然如果你想负载均衡到别的机器上,可以将127.0.0.1改成别的IP或者域名。
重新加载下nginx,命令为:nginx -s reload,然后看效果,就会发现请求同一个地址,有时候是tomcat1响应,有时候是tomcat2响应。当然不是严格的第一次tomcat1响应,第二次就tomcat2响应,毕竟咱们的请求来自同一台计算机,nginx肯定有比较复杂的考量以提高效率,比如IP相似的机器的请求优先安排同一台服务器响应。
总结与展望
本篇简明但不算扼要的说了nginx如何实现负载均衡,当然nginx负载均衡有很多策略,单独说策略没有意思,下篇还是结合实际场景说下如何来设置具体策略。