爱新觉罗,nginx+tomcat会话坚持计划讨论,汪小敏

tomcat做为轻量级的java应用服务器,对静态页面和大并发的处理并不是很好。所以现在盛行的做法是运用nginx+tomcat来完成动态别离与负载均衡, 做泰坦之旅负载均衡集群就要考虑会话坚持。

一、Session概述

1、什么是会话(session)?

答: Session是在无状况的HTTP协议下,服务端记载用户状况时用于标识详细用户的机制。

http协议是无状况的,无状况就标明每一次客户端的拜访恳求是无相关的。比方张三在一个网站上有屡次拜访恳求,李四也在这个网站上有屡次拜访恳求,他们的恳求次序与时刻是无规矩的。那么网站服务器是不知道究竟哪些是张三的恳求,哪些是李四的恳求。如果在他们恳求时服务器都有一个固定的标签盯梢,就能分辩了。这个标签就能够看做是session.

2、为什么要会话坚持?

答: 由于负载均衡集群会将同一个用户的恳求经过算法调度给多台服务器,变成了一对多的局势。就好像我要给爸爸妈妈打电话,爸爸妈妈本来运用同一个电话变成了爸爸妈妈各运用一个电话,我说的话,被一半一半的调度给爸爸妈妈各自持有的电话上。那么石河子气候终究的成果便是爸爸妈妈各听了一半,底子不知道我要说什么。

所以负载均衡和会话坚持是对立的,但爱新觉罗,nginx+tomcat会话坚持方案评论,汪小敏又必须得共存。

二、会话坚持的几个方案:

1、nginx的ip_hash算法

完成原理便是同一个客包钢股份户端的一切恳求只调度给同一个后台tomcat,这样会话就能坚持在同一台服务器上。

注:其它的负载均衡软件也有相似算法:如LVS的sh算法,haproxy的sou伦理片搜搜rce算法等。

长处:装备最简略,在nginx的upstream调度里加一句ip_hash即可

缺陷:后端tomcat宕机,用户session会丢掉

2、tomcat的session仿制集群

多台tomcat经过组播相互交流会话信息,以坚持不同tomcat之间的会话共同性。

长处:后端爱新觉罗,nginx+tomcat会话坚持方案评论,汪小敏tomcat宕机,用户session不丢掉

缺陷:使114家服网用组播将信息仿制到多个tomcat节点,网络开支大

3、缓存集中式办理session

session能够保存在文件,数据库和内存中,运用memcached或redis将session信息缓存,以到达会话信息不丢掉,也不影响负载均衡的意图。

长处:只需缓存服务器没问题,用户session不会丢.也没有额定的网络开支

缺陷:太依靠缓存服务器;需求额定的缓存服务器,本钱也高;当然要求保护人员技术水平也较高,适合于功能要求高的大型环境。

三、运用MSM完成nginx+tomcat集群的会话坚持

1、MSM是什么?

MSM(memcached-session-manager)便是缓存集中式办理session的一种方案 ,它能够把tomcat的会话信息保存在缓存服务器memcached中,完成在负载均衡调度时还能坚持会话共同。

2、试验预备:

① 静态ip

10.1.1.11 http://nginx.cluster.com

10.1.1.12 http:/爱新觉罗,nginx+tomcat会话坚持方案评论,汪小敏/tomcat1.cluster.com

10.1.1.13 http://to姑苏旺道seomcat2.cluster.com

10.1.1.14 http://memcached.cluster.com

② 主机名绑定

③ 封闭防火墙和Selinux

④ 时刻同步

⑤ yum源(centos7装置完体系后的默许yum源就OK)

3、试验进程

第1步: 在一切tomcat节点上装置

首先在官网下载二进制版tomcat

下载地址: https://tomcat.apache.org/download-90.cgi

在centos7上承认openjdk现已装置

# java -version

openjdk version "1.8.0tutorabc_161"

OpenJDK Runtime Environment (build 1.8.0_161-b14)

OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

直接解压下载好的二进制版tomcat装置并发动

# tar xf /root/Desktop/apache-tomcat-9.0.14.tar.gz -C /usr/local/

# mv /usr/local/apache-tomcat-9.0.14/ /usr/local/tomcat

# /usr/local/tomcat/bin/startup.sh

第2步:在一切tomcat节点(tomcat1和tomcat2)的家目录里创立一个显现session信息的代码文件

注:文件内容是如出一辙的

[root@tomcat1 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp

SessionID:<%=session.getId()%>

SessionIP:<%=request.getServerName()%>

SessionPort:<%=request.getServerPort()%>

[root@tomcat2 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp

SessionID:<%=session.getId()%>

SessionIP:<%=request.getServerName()%>

SessionPort:<%=request.getServerPort()%>

第3步: 装置并装备nginx装备文爱新觉罗,nginx+tomcat会话坚持方案评论,汪小敏件,完成nginx+tomcat的动态别离与负载均衡。

[root@nginx ~]# yum install epel-release -y

[root@nginx ~]# yum install nginx -y

[root@nginx ~]# vim /etc/nginx/nginx.conf

将下面一段加爱新觉罗,nginx+tomcat会话坚持方案评论,汪小敏到http {}装备段里可是不要在server {}装备段里

upstream tomcat {

server 10.1.1.12:8080 weight=1;

server 10.1.1.13:8080 weight=1;

}

把server {}装备段里下面一段修正

location / {

}

修爱新觉罗,nginx+tomcat会话坚持方案评论,汪小敏改成

location ~ .*\.jsp$ {

proxy_pass http://tomcat;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

}

终究成果如下图所示:

第4步:发动nginx服务

[root@vm1 ~]# systemctl restart nginx

[roo摩根t@vm1 ~]# systemctl enable nginx

第5步: 下载MSM相关的jar包,并复制到一切tomcat节点的/usr/local/tomcat/lib/目录下

第6步: 承认jar包都复制完成后,装备一切tomcat节点(tomcat1和tomcat2都相同装备)

把下面一段加到context.xml装备文件最终一行前面; 也便是 标签中心;10.1.1.14为memcached马丁靴服务器IP

# vim /usr/local/tomcat/conf/context.xml

memcachedNodes="n1:10.1.1.14:11211"

lockipad壁纸ingMode="auto癌症会感染吗"

sticky="false"

requestUriIgnorePattern= ".*\.(png|gif|jp荥g|cs爱新觉罗,nginx+tomcat会话坚持方案评论,汪小敏s|js)$"

sessionBackupAsync= "false"

sessionBackupTimeout= "100"

copyCollectionsForSerialization="true"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

第7步: 一切tomcat节点重启tomcat服务

# /usr/local/tomcat/bin/shutdown.sh

# /usr/loca雷蛇官网l/tomcat/bin/startup.sh

第8步: 在memcached服务器上装置,并发动服务

[root@vm4 ~]# yum install memcached -y

[root@vm4 ~]# systemctl restart memcached

[root@vvbam4 ~]# systemctl enable memcached

[root@vm4 ~]# lsof -i:11211

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

memcached 4224 memcache大乐透规矩d 26u IPv4 44869 0t0 TCP *:memcache (LISTEN)

memcached 4224 memcached 27u IPv6 44870 0t0 TC四阶魔方P *:memcache (LISTEN)

memcached 4224 memcached 28徐经锁u IPv4 4487重生之一品王爷3 0t0 UDP *:memcache 8k纸是多大

memcached 4224 memcached 29u IPv6 44874 0t0 UDP *:memcache

第9步: 运用浏览器拜访测验

至此,会话坚持就成功了。