使用nginx进行负载均衡

0,基本信息
Tomcat8.0.37,JDK1.7.0_79-B15,Nginx1.9.13,CentOS7.0


1,需要实现的效果
需要实现的效果(单台服务器):
1,使用Nginx实现负载均衡
2,使用多个Tomcat作为应用服务器
3,静态资源从Tomcat中分离

Nginx的端口为8080,反向代理3个的Tomcat(8288,8289,8290)。

2,在Linux下安装Nginx
具体安装过程参见以下链接:
为知笔记外链:http://eb50b8cd.wiz03.com/share/s/3Hkbzd0PyQCq2jOfs72sb82h3zbU-m2V54m02QzChs37ClBa
CSDN博文链接:https://blog.csdn.net / u012383839 /条/信息/ 72875063

nginx安装路径:/ usr / local / nginx
3,在Linux下安装Tomcat及配置单个
Tomcat的安装过程:
#解压注意:不要使用windows版的tomcat复制到Linux下运行,否则会有你想不到的事情!! !
tar -zxf apache-tomcat-8.0.37.tar.gz
#给sh文件添加可执行权限
cd apache-tomcat-8.0.37 / bin
chmod x + * .sh
#启动tomcat
./startup.sh
安装后的Tomcat信息:

     tomcat1 tomcat2 tomcat3
版本8.0.37 8.0.37 8.0.37
安装路径/ home / software / tomcat1 / home / software / tomcat2 / home / software / tomcat3
端口信息SHUTDOWN 8005
HTTP 8288
AJP 8009 SHUTDOWN 8006
HTTP 8289
AJP 8010 SHUTDOWN 8007
HTTP 8290
AJP 8011
管理账号admin / admin @ woyi1 admin / admin @ woyi2 admin / admin @ woyi3
Tomcat性能优化配置(server.xml):

<! - 启用APR生命周期监听器,且不使用SSL - >
<Listener className =“org.apache.catalina.core.AprLifecycleListener”SSLEngine =“off”/>  
 
<! - 创建执行器(线程池),指定线程数量 - >
<Executor name =“tomcatThreadPool”namePrefix =“catalina-
    exec- ” maxThreads =“1000”minSpareThreads =“100” 
    maxIdleTime =“60000”/>
 
<! - Connector中使用线程池 - - >
<Connector executor =“tomcatThreadPool”
    port =“8290”protocol =“org.apache.coyote.http11.Http11AprProtocol”
    connectionTimeout =“30000”redirectPort =“8443”URIEncoding =“UTF-8”enableLookups =“false” 
    connectionUploadTimeout =“150000”acceptCount =“300“keepAliveTimeout =”120000“/>
注意:这里Tomcat配置了APR模式,Tomcat配置APR模式详细配置过程参见以下链接:
CSDN博客链接:https://blog.csdn.net/u012383839/article/details/79741569
为知笔记外链:http://eb50b8cd.wiz03.com/share/s/3Hkbzd0PyQCq2jOfs72sb82h2vV5lf3Ak4qZ2k-H4Z3ztuRR
3,Nginx负载均衡配置
这里以公司移动门户项目为例(登录时验证码放在会话里面,登录后才能进入到首页)。
在http节点下配置如下:
#使用默认策略,轮询
上游ydzwV3 {
    #下面介绍几种负载均衡策略,其中轮询,重量,ip_hash是nginx内置的,可以直接使用.fair和url_hash需要第三方支持才可以使用。
    #1,轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down down,能自动剔除.server
    localhost:8288;
    server localhost:8289;
    server localhost:8290;

    #2,weight:指定权重,按照权重进行请求的分配.wight和访问比例成正比,适合后端服务器性能不均的情况。
    #下面的配置就会经常访问8288的服务。如果后端服务器8288 down掉,能够立刻切换到8299或者8290.如果8288再次启动,则又能回到原有的权重配置上.8288可以继续提供服务。
    #server localhost:8288 weight = 10;
    #server localhost:8289 weight = 1;
    #server localhost:8290 weight = 1;

    #3,ip_hash:每个请求按照ip的hash结果进行分配,这样的话每个访客固定请求一个后端服务器,可以解决会话没共享的问题。
    #如果8288 down掉,则依然可以访问,可能会缓存8289或者8290.如果8288启动,则会从8289或8290切换到8288.
    #ip_hash; 
    #server localhost:8288;
    #server localhost:8289;
    #server localhost:8290;

    #4,fair(第三方):后端服务器响应时间短的优先分配。
    #fair; 
    #server localhost:8288;
    #server localhost:8289;
    #server localhost:8290;

    #5,url_hash(第三方):按访问的URL的哈希结果来分配请求,这样相同的URL会分配到相同的后端服务器适合后端服务器有缓存的情况
    #$哈希REQUEST_URI; 
    #hash_method crc32; 
    #server localhost:8288;
    #server localhost:8289;
    #server localhost:8290;
}
在服务器节点下配置如下:
听8080;
server_name 192.168.1.233; #这里是服务器的IP或者
域名location / ydzwV3 {
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    proxy_pass http:// ydzwV3;
}
所以结果是怎样呢?
访问http://192.168.1.233:8080/ydzwV3实际上会把负载分摊到后面的3个的Tomcat服务器,也就是说访问http://192.168.1.233:8080/ydzwV3可能是HTTP://本地主机:8288 / ydzwV3对于http://本地主机:8289 / ydzwV3或HTTP://本地主机:8290 / ydzwV3给与的响应。

存在的问题:会话共享没有
一个解词的情况:假设进入登录页面是tomcat1基于的响应,所以验证码也会存储在tomcat1的会话中现在输入完用户名,密码和验证码,单击提交,很大可能会提示“验证码错误”,这是因为执行登录请求可能访问的是tomcat2或者tomcat3。所以需要去做会话共享(当然也可以使用ip_hash策略来解决这个问题)
。4,Tomcat Session共享配置
这一块单独编写,请参考如下链接:
为知笔记外链:http://eb50b8cd.wiz03.com/share/s/3Hkbzd0PyQCq2jOfs72sb82h0vuhmr3Z5AhD2JPRqe1RIj4i
CSDN博客链接:https://blog.csdn.net/u012383839/article/details/ 79756368
5,结果
经过上述配置后,访问tomcat1后,将tomcat1关闭,然后刷新页面,项目依然能就够切换到其它tomcat上,并且当前用户的会话信息仍然保留
.6,一些想法
1,实际应该采用何种负载均衡策略?
重方式适合后端服务器性能不 的情况轮询与ip_hash相比,个人偏向于使用ip_hash这种方式,固定访问后端服务器。
参考
参考1:Nginx的+ Tomcat的实现负载均衡(https://blog.csdn.net/dylanzr/article/细节/ 52135196)
参考2:Nginx的简单介绍以及Linux的下使用的Nginx进行负载均衡的搭建(https://blog.csdn.net/liboyang71/article/details/77371595)
参考3:使用nginx的搭建集群tomcat8,r​​edis的实现会话共享,文件共享问题(https://blog.csdn.net/hua1586981/article/details/78132710)
参考4:Nginx + Tomcat搭建集群,Spring Session + Redis实现Session共享(https://blog.csdn.net/u012702547/ article / details / 72991283?utm_source = tuicool&utm_medium = referral)
--------------------- 
转载:https://blog.csdn.net/u012383839/article/details/79801105

猜你喜欢

转载自blog.csdn.net/w960514/article/details/85053144