搭建nginx+tomcat+memcached服务,验证session共享

来源:互联网 发布:淘宝网摩托车头盔 编辑:程序博客网 时间:2024/06/05 20:17

使用memcached 实现session共享:
session 会话:从打开网站开始到退出该网站的过程。
http协议是无状态连接协议 ,服务器不会记录终端访问过本服务器。第一次连接服务器时需要握手连接,同样的终端第二次连接服务器时不记得上一次的连接,还要握手连接。
web服务器往往多台使用集群技术,并使用第三方软件进行代理访问。由代理服务器决定每次访问哪一台web主机,也就会导致同一次session过程中,几次http请求会被分散到不同的web服务器。但是该session往往内部有很强的关联,这样被分散到不同的web服务器上后,容易数据丢失,产生错误。
例: 淘宝购物,选择完衣服,鞋子,书,最后去结账时,可能购物车只有衣服和书,鞋子在其他服务器上没找到。
http://www.taobao.com
cookies session_id 97
http://www.taobao.com
client 衣服 鞋子 书 去结账
|
nginx

       taobao_1      taobao_2          memcached     mem

使用session_id,第一次连接成功后回服务器生成记录session_id,并发给客户端,客户端将session_id存储在cookies文件中。客户端再次连接时,协议会携带cookies信息,memcached就识别出该连接 。web服务器虽然分发sessionID,但是web服务器并不记录sessionID

构建nginx+tomcat+memcached服务:
双tomcat网站服务,单memcached缓存服务,单nginx反向代理服务(默认不缓存数据)

               client                      |               1.1.1.254                nginx              192.168.0.254                  |tomcat_web_100        tomcat_web_101                主_mem_20       备_mem_30        200m           200m

网页文件时用java编写的时候,要搭建tomcat服务器:

service httpd stop#关闭其他版本的web服务chkconfig --level 35 httpd offyum -y   install   glibc.i686    glibc-devel.i686#库文件安装,系统预装x86版本glibc,安装i686版本glibcchmod  +x  jdk-6u27-linux-i586.bin#tomcat服务运行环境包,加执行权限即可使用./jdk-6u27-linux-i586.bin#执行安装,生成jdk1.6.0_27mv   jdk1.6.0_27    /usr/local/jdk#将目录移动到系统目录cd  /usr/local/jdk/[root@pc205 jdk]# bin/java   -version#查看版本信息java version "1.6.0_27"Java(TM) SE Runtime Environment (build 1.6.0_27-b07)Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)

编辑系统配置文件指定jdk程序的安装位置,配置环境变量:

[root@www ~]# vim   /etc/bashrcexport    JRE_HOME=/usr/local/jdkexport    JAVA_BIN=/usr/local/jdk/binexport    PATH=$JRE_HOME/bin:$PATHexport    CLASSPATH=.:$JRE_HOME/lib/dt.jar:$JRE_HOME/lib/tools.jarexport    JRE_HOME    JAVA_BIN    PATH    CLASSPATH[root@www ~]# source   /etc/bashrc#重新加载该文件[root@pc205 jdk]# echo   $JRE_HOME#查看环境变量/usr/local/jdk

安装tomcat:

tar   -zxvf   apache-tomcat-6.0.32.tar.gz  -C     /usr/local/#提供tomcat服务的软件包,解压即可用,免安装cd /usr/local/mv  apache-tomcat-6.0.32     tomcat#更改名字

cd tomcat
bin/startup.sh 启动服务命令
bin/shutdown.sh 停止服务命令
webapps/ROOT/ 网页目录
conf 配置文件存放目录,使用xml语言编写

[root@pc205 conf]# netstat  -untnalp | grep :8080#tomcat默认监听8080端口,检查该端口[root@pc205 conf]# /usr/local/tomcat/bin/startup.sh #启动服务脚本Using CATALINA_BASE:   /usr/local/tomcatUsing CATALINA_HOME:   /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME:        /usr/local/jdkUsing CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar[root@pc205 conf]# netstat  -untnalp | grep :8080#服务启动成功tcp        0      0 :::8080                     :::*                        LISTEN      26140/java          

http://localhost:8080报错401认证错误,默认有安全认证机制,需要添加登录管理页面认证用户才能登陆。

vim  /usr/local/tomcat/conf/tomcat-users.xml<tomcat-users>     <role rolename="manager-gui"  />#角色类型,有四种角色     <user  username="admin"    password="123456"    roles="manager-gui" /></tomcat-users> 

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh#重新启动tomcat服务
登陆http://localhost:8080,输入用户名密码

建立测试页面:

vim  /usr/local/tomcat/webapps/ROOT/test.jsp  1 <html>  2         <body bgcolor="green">  3             <center>  4                 <%=  request.getSession().getId()  %>#获取sessionID值  5                 <h1>tomcat 192.168.0.100</h1>  6             </center>  7         </body>  8 </html>

配置nginx 做反向代理,把自己接收到的请求以轮询的方式分发给tomcat服务器。

sed -i '/^$/d' nginx.confsed -i '/^#/d' nginx.conf#清除空行和注释vim /usr/local/nginx/nginx.conf worker_processes  1;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;    upstream "tomcatweb" {        server  192.168.0.100:8080;        server  192.168.0.101:8080;    }    server {        listen       80;        server_name  localhost;        location / {            proxy_pass    http://tomcatweb;        }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }}

访问http://1.1.1.254/test.jsp

在20 和 30 服务器上运行memcached 服务器 使用200M物理内存做数据缓存 :

/usr/local/bin/memcached  -u  root  -m  200M  -d

给tomcat服务器安装连接memcahced服务器的连接工具 (msm)

cd   sessioncp    *.jar     /usr/local/tomcat/lib/#将连接程序复制到tomcat的库中

tomcat编辑自己的配置文件,指定memcached服务器的ip地址:

vim    /usr/local/tomcat/conf/context.xml<Context>        <Manager   className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  memcachedNodes="mem20:192.168.0.20:11211 mem30:192.168.0.30:11211"  failoverNodes="mem30" #备用缓存服务器  requestUrilgnorePattern=".*\(ico|png|gif|jpg|css|js)$"  #不缓存的文件类型transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"  #连接memcached时调用的类                                   /></Context>

重新启动tomcat服务:

[root@pc205 conf]# /usr/local/tomcat/bin/shutdown.sh [root@pc205 conf]# /usr/local/tomcat/bin/startup.sh

实际结果,web服务还是一直轮询的,但是sessionID不会改变,除非memcached坏掉了。

0 0
原创粉丝点击