Nginx集群解决均衡负载及生产环境热部署,ID的持

日期:2019-11-04编辑作者:最快开奖计算机

平常的,假若三个顾客展开多个浏览器,服务器就能分配多个sessionid,通过session.getId()函数能够回来session的id;

像这种类型不只能解决高并发瓶颈难题,又能迎刃而解热陈设(不影响顾客使用的情景下平滑更新临盆服务器卡塔尔难题。

唯独借使只要关闭服务器后,再重启服务器,刷新页面,则服务器会重新分配一个新的sessionid;

因为项目是上下端分离的,所以本认为花销非常低,没悟出碰着了一应有尽有的坑,消释了2天才消除,开掘了重重不是集群而是项目本身的难点。

若果我们想要保留原来的id,则能够通过体系化方式保留sessionid。

本身是同贰个服务器下布署tomcat和nginx等,本文主要面向有早晚底蕴的读者,基本配置就不在本文累述了(底工难点得以留言恐怕发邮件卡塔 尔(阿拉伯语:قطر‎。

在conf/server.xml中,在Context即web项目中投入

0x0_1 服务器意况

[html]

服务器: CentOS 6.5

  1. <Context path="/test" docBase="F:JAVA WEB PracticetomcatProject" reloadable="true">  
  2.     <Manager className="org.apache.catalina.session.PersistentManager">  
  3.         debug=0     saveOnRestart="true"  
  4.         maxActiveSession="-1"   minIdleSwap="-1"  
  5.         maxIdleSwap="-1"        maxIdleBackup="-1"  
  6.         <Store className="org.apache.catalina.session.FileStore" directory="F:JAVA WEB PracticetomcatProjecttemp"/>  
  7.     </Manager>  
  8. </Context>  

web容器:Tomcat 7.0.25

表示把种类号存在F:JAVA WEB PracticetomcatProjecttemp下;

反向代理:Nginx 1.8

得以达成的据守是那样的:

java: jdk 1.7

1.开采一个网页,网页的目标是出口session id;

0x0_2 集群

2.关闭tomcat,则在temp文件夹下会并发叁个不经常文件;

作者是同贰个服务器安顿三个tomcat,所以地方是127.0.0.1 也能够换来别的服务器的ip

3.再度开动tomcat;

tomcat文件名 ip地址 端口 项目名
tomcat7-1 127.0.0.1 8080 borrow
tomcat7-2 127.0.0.1 8090 borrow

4.刷新页面,session id不改变;

0x1 tomcat集群配置

图片 1

修改tomcat的conf/server.xml 如下

tomcat7-1:

<Server port="8005" shutdown="SHUTDOWN"><Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

URIEncoding="UTF-8"

compression="on"

compressionMinSize="2048"

noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />123456789123456789

tomcat7-2:

<Server port="8015" shutdown="SHUTDOWN"><Connector port="8090" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

URIEncoding="UTF-8"

compression="on"

compressionMinSize="2048"

noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" /><Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />123456789123456789

如上配置,独有端口号(port卡塔 尔(英语:State of Qatar)是必备配置,别的按平日配置就可以,多少个tomcat就那样类推。

创建测验页面

友善独家在tomcat中成立测量试验页面,能够区分区别的tomcat服务器就可以

<table align="centre" border="1">

<tr>

<td>Tomcat7_1 Session ID</td>

<% session.setAttribute("www.zemo.com","www.zemo.com"); %>

<td><%= session.getId() %></td>

</tr>

<tr>

<td>Created on</td>

<td><%= session.getCreationTime() %></td>

</tr></table>12345678910111234567891011

启航2个tomcat,确认都运行了就能够。

0x2 nginx均衡负载配置

此处运用ip_hash 集群格局,尽量分流。不过只假如同叁个局域网下客商大量做客就从不用了,可是能够再追加其余的点子,举个例子缓存session,因为此处最主就算为着消除表陈设难点, 所以都正常。

upstream borrow {

ip_hash;

server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=20s;

server 127.0.0.1:8090 weight=1 max_fails=3 fail_timeout=20s;

}

server {

listen 80;

server_name www.zemo.com;#其一是无论写的...不用拜见了

access_log /usr/local/var/log/nginx/borrow_access.log;

location / {

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

client_max_body_size 20m;

client_body_buffer_size 128k;

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 900;

proxy_buffer_size 4k;

proxy_buffers 4 32k;

proxy_busy_buffers_size 64k;

proxy_temp_file_write_size 64k;

proxy_pass ; #这里borrow 指向下边名称叫borrow的upstream

}

}123456789101112131415161718192021222324252627123456789101112131415161718192021222324252627

  • weight 访谈权重

  • max_fails 最大退步次数

  • fail_timeout 最大失利等待时间

测量试验配置是不是科学

zemochen:Program SuperZemo$ sudo nginx -t

nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok

nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful123123

重启nginx

zemochen:Program SuperZemo$ sudo nginx -s reload11

观察tomcat的session

  • 先探访以下www.zemo.com

  • 关闭tomcat7_1,只留tomcat7_2观察session id

  • 开启tomcat7_1,关闭tomcat7_2观察session id

您会发掘七个session id,上边解说tomcat 的session分享

0x3 tomcat session共享

0x3_1 server.xml配置

tomcat 有自带复制session作用,在server.xml中增加<Cluster> 配置就可以,不精晓写在何地的,找到server.xml中的<Cluster>讲解样例,写在底下就能够。基本上就是写在<Host></Host>当中最后就能够了。配置如下:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">

<Manager className="org.apache.catalina.ha.session.BackupManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"

mapSendOptions="6"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

<Membership className="org.apache.catalina.tribes.membership.McastService"

address="228.0.0.4"

port="45564"

frequency="500"

dropTime="3000"/>

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

address="127.0.0.1" <!--这里写本tomcat的IP地址 -->

port="5000"

selectorTimeout="100" /> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*.gif;.*.js;.*.jpg;.*.png;.*.htm;.*.html;.*.css;.*.txt;"/>

<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/></Cluster>12345678910111213141516171819202122232425262728293031321234567891011121314151617181920212223242526272829303132

修改server.xml 中的<Engine> 增加jvmRoute="tomcat7-1",配置如下:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat7-1">11

tomcat7-2同理,配置那五个。

0x3_2 web.xml配置

conf/web.xml中的<webapp></webapp> 中增加<distributable /> 小编的品类是j2ee项目,所以写在了品种的web.xml 里,项目中的web.xml事先级高于tomcat本人的。

配置代码块如下:

<web-app>

<!--其余布署省略,下边mime-mapping 也是与本问非亲非故,为了体现最上边所以带了生机勃勃部分-->

<mime-mapping>

<extension>apk</extension>

<mime-type>application/vnd.android.package-archive</mime-type>

</mime-mapping>

<distributable /></web-app>1234567812345678

0x4 注意:

此处要专一,Nginx只须求配置黄金年代份,而tomcat有多少个节点,server.xml 、web.xml就配置多少个:

  • shutdown端口都不可同日来说

  • Connect 的http端口都不如

  • Ajp 端口不一致

  • <Cluster> 中的<Receiver> 属性 address 指向改tomcat的IP地址

  • <Engine> 中的jvmRoute 名要与tomcat文件名雷同

0x5 结果截图

成套情状全都运行后, 访谈域名, 能够见到如下截图,作者的图能够看来,访谈到的是tomcat7-1,注意,作者的测验网页并未写tomcat7-1,而是本人加到session id里的,这里是自动增添jvmRoute的值,说明session复制作而成功…

图片 2

因为刚刚明确被代理到了tomcat7-1,大家用的是ip_hash的分配方式,所以大家平昔关闭tomcat7-1,再刷新页面,确认保障代理到另七个tomcat,效果图如下,能够看见独有后缀.tomcat7-2昨今分裂,至此三个平衡负载集群就能够了,既化解了热安顿难点,又化解了分担服务器压力,负载均衡难题。

图片 3

本文由今晚最快开奖现场直播发布于最快开奖计算机,转载请注明出处:Nginx集群解决均衡负载及生产环境热部署,ID的持

关键词:

实现指纹识别登录,在Ubuntu上安装fprint实现指纹

ThinkPad T420i 上 Ubuntu12.04 完毕指纹识别登入 实验室配的新计算机有指纹识别,才装好Ubuntu没二日,正好折腾了生气勃勃...

详细>>

Emacs24在Ubuntu 12.4 LTS 上编译

Emacs下载的地方最棒是接纳国内的镜像,那样速度会快捷,下载地址为 安卓6.0  lunch full_la68_A40-eng 编译(Ubuntu 12.046...

详细>>

Linux 中head 命令

Linux 中head命令是用来查看具体文件的前头几行的剧情,具体格式如下: head filename: 你能够经过head命令查看具体文件...

详细>>

及衍生版客户安装跨平台游戏

Minecraft是一款跨平台的游戏,可运行在Linux、windows、Mac上,这是一款高度自由的沙盘建造游戏,非官方中文译名为《...

详细>>