300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > razor 怎样使用session变量_Nginx负载均衡解决session一致性问题

razor 怎样使用session变量_Nginx负载均衡解决session一致性问题

时间:2020-01-28 03:44:15

相关推荐

razor 怎样使用session变量_Nginx负载均衡解决session一致性问题

【145】

前言:

http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你。 那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录邮箱后,接下来要收邮件、写邮件,总不能每次操作都让用户输入用户名和密码吧,为了解决这个问题,session的方案就被提了出来,事实上它并不是什么新技术,而且也不能脱离http协议以及任何现有的web技术

session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid时,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。 但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现

Session共享 首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?这个时候会话id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个时候就会出现取不到session数据的情况,于是session的共享就成了一个问题。

Session一致性解决方案

1、共享session 需要专门管理session的软件,memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session。

搭建步骤:

复现nginx负载均衡 会出现的session一致性问题:

准备三台机器 hadoop001(192.168.198.11) hadoop002(192.168.198.12) hadoop003(192.168.198.13) 安装tomcat jdk ngxin

1:每台安装tomcat 并安装jdk 配置jdk的环境变量,修改tomcat下webapps 下的ROOT下的index.jsp,记得备份index.jsp文件

index.jsp要修改的内容如下

2:安装nginx、tomcat 并分别启动服务后做下测试。

http://192.168.198.11 http://192.168.198.12 http://192.168.198.13 可以看到nginx启动成功http://192.168.198.11:8080/ http://192.168.198.12:8080/ http://192.168.198.13:8080/ 可以看到tomcat启动成功

3:在hadoop001机器上配置负载均衡

在浏览器下访问我们配置地址,http://192.168.198.11/oxox 会把我们的请求负载到12 13机器上。但是页面显示的session会不停的变化。

接下来我们就要用memcached和tomcat整合解决session不一致问题。(其实也可以用redis解决)

1:首先安装memcached yum install memcached -y (在001机器上)

2:启动memcached

memcached -d -m 128m -p 11211 -l 192.168.9.11 -u root -P /tmp/

-d:后台启动服务

-m:缓存大小

-p:端口

-l:IP

-P:服务器启动后的系统进程ID,存储的文件

-u:服务器启动是以哪个用户名作为管理用户

3.拷贝jar包到tomcat的lib下

4:

配置tomcat,每个tomcat里面的context.xml中加入

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:192.168.198.11:11211"sticky="false"lockingMode="auto"sessionBackupAsync="false"requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

重新启动每台tomcat和Nginx

http://192.168.198.11/oxox 负载均衡服务器 然后分发到12 13 机器上

可以看到session在其他两台机器上是一致的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。