Win7系统下搭建Nginx+Tomcat高性能负载均衡集群

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxd1435513775/article/details/81006438

引言

在工作中,为了响应高并发,经常会在Tomcat前面挡一层Nginx,用Nginx来转发请求,这种情况下,我们会在Nginx后面放置好多Tomcat,这就是所谓的集群,示意图如下。本文只是简单的搭建一个Nginx+Tomcat的集群框架。
这里写图片描述

环境工具

两个Tomcat
一个Nginx
这里写图片描述

修改Tomcat配置文件和页面文件,并启动

1、修改1号Tomcat的server.xml中的端口号,端口号改为18080,如下图:

这里写图片描述

2、修改2号Tomcat的server.xml中的端口号,端口号改为28080,如下图:

这里写图片描述

3、修改1号Tomcat中webapps下面ROOT下面的index.jsp文件,如下图:

这里写图片描述

4、修改2号Tomcat中webapps下面ROOT下面的index.jsp文件,如下图:

这里写图片描述

修改Nginx配置文件,并启动

这里写图片描述

实验结果

启动两个Tomcat和Nginx
这里写图片描述

在浏览器中输入:http://192.168.1.102
页面如下:
这里写图片描述

不断刷新,会看到两个tomcat的index.jsp页面会重复出现,如下页面:
这里写图片描述

上面页面交替出现的频率是由在Nginx的配置文件中设置的weight有关。


2018.7.30补充:负载均衡的策略

负载均衡架构图:
这里写图片描述
负载均衡策略 3 种方式:
(1)、Nginx 提供轮询(round robin)
(2)、用户IP哈希(client IP)
(3)、指定权重

负载均衡时Session的处理策略

Session是Tomcat服务器上的内存空间,如果一个用户发出多个请求,却发到了多个tomcat服务器中,那么就会出现Session不同步的问题。

解决方案1:

将一个用户的请求锁定到某一台服务器上,简单,但是缺乏容错性,一旦某个服务器发生故障,Session可能丢失,
(但是服务器发生故障是一个低概率事件,如果一个服务器经常挂掉,要么是硬件有问题,要么是应用有问题),
可以使用用户IP哈希实现。

解决方案2:

Session复制策略,基于网络的广播策略,一个节点Session变化,其他节点同步复制,具有容错性,
但节点多或复制量大时对网络负荷大,使网络效率低下,甚至阻塞:

(1)、 在/conf/server.xml文件中开启Session复制的选项,将<Cluster>注释去掉,7.0默认值以配置好,
        需要接收器<Receiver>绑定内网(一般服务器都有两块网卡)网卡地址,修改端口>。
(2)、在应用中指定应用是在分布式部署之下,在web.xml中添加<distributable/>选项

解决方案3:

额外创建一个共享的空间用来存放Session,所有服务器共享一个Session 

memcached缓存共享方案基本原理粘性Session与非粘性Session方式:(需要一些工具jar包,官网有目录和下载连接
在/conf/context.xml中进行配置,全局有效)
这里写图片描述

集群环境中应用代码应注意的问题

(1)、传递Session需要实体类序列化支持,实现可序列化接口,设置版本号
(2)、获取用户IP地址方法的变化,获取真实客户端ip而不是Nginx代理地址
(3)、动静分离结构的预规划, 一般高并发的网站上,资源类的文件,如js,css,图片通常是由静态服务器处理,Nginx处理静态文件效率就非常高,而Tomcat处理静态文件是它很大的一个弱势,tomcat只负责动态请求的处理。那么编码的时候就要考虑静态资源最后可能要被拿出去,地址会有变化,所以在开发的时候应该规划访问地址,保持最大灵活性。

猜你喜欢

转载自blog.csdn.net/zxd1435513775/article/details/81006438