天天看点

nginx+memcached+tomcat集群 session共享完整版

nginx+memcached+tomcat集群 session共享完整版

集群环境

1.nginx版本 nginx-1.6.2.tar.gz

2.jdk 版本 jdk-7u21-linux-x64.tar.gz

3.tomcat 版本  7.0.29

4.memcached 版本 memcached-1.4.22.tar.gz

5. CentOS 6.5 系统采用一台服务做测试

一、nginx安装

安装依赖包 yum -y install gcc gcc-c++

1.安装pcre库

tar zxvf pcre-8.36.tar.gz

cd pcre-8.36

./configure

make && make install

2.安装zlib库

tar zxvf zlib-1.2.8.tar.gz

cd zlib-1.2.8

3.安装openssl

wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz

tar zxvf openssl-1.0.1c.tar.gz

4.安装nginx 注意指定prce zlib openssl原码包位置

tar zxvf nginx-1.6.2.tar.gz

cd nginx-1.6.2

./configure --prefix=/usr/local/nginx \

 --with-http_ssl_module \

 --with-pcre=/root/pcre-8.36 \

 --with-zlib=/root/zlib-1.2.8  \

--with-openssl=/root/openssl-1.0.1c

5.安装成功后配置

vi /usr/local/nginx/conf/nginx.conf 修改配置文件

#user  nobody;

worker_processes  2;

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

worker_rlimit_nofile 65535;

events {

   use epoll;

    worker_connections  65535;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

    #                  '$status $body_bytes_sent "$http_referer" '

    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;

    #tcp_nopush     on;

    #keepalive_timeout  0;

    keepalive_timeout  150;

    fastcgi_connect_timeout 300;

         fastcgi_send_timeout 300;

         fastcgi_read_timeout 300;

    #gzip  on;

                    gzip  on;

           ##cache##

           client_max_body_size 10m;

           client_body_buffer_size 1m;

           proxy_connect_timeout 5;

           proxy_read_timeout 60;

           proxy_send_timeout 5;              

           proxy_buffer_size 64k;

           proxy_buffers 4 128k;

           proxy_busy_buffers_size 128k;

           proxy_temp_file_write_size 1m;

           proxy_temp_path /home/temp_dir;

           proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

           ##end##

    #server {

     #   listen       80;

     #   server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

      #  location / {

       #     root   html;

        #    index  index.html index.htm;

       # }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html

        #

        #error_page   500 502 503 504  /50x.html;

        #location = /50x.html {

         #   root   html;

        #}

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80

        #location ~ \.php$ {

        #    proxy_pass   http://127.0.0.1;

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #    root           html;

        #    fastcgi_pass   127.0.0.1:9000;

        #    fastcgi_index  index.php;

        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

        #    include        fastcgi_params;

        # deny access to .htaccess files, if Apache's document root

        # concurs with nginx's one

        #location ~ /\.ht {

        #    deny  all;

    #}

    # another virtual host using mix of IP-, name-, and port-based configuration

    #

    #    listen       8000;

    #    listen       somename:8080;

    #    server_name  somename  alias  another.alias;

    #    location / {

    #        root   html;

    #        index  index.html index.htm;

    #    }

    # HTTPS server

    #    listen       443;

    #    server_name  localhost;

    #    ssl                  on;

    #    ssl_certificate      cert.pem;

    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;

    #    ssl_prefer_server_ciphers   on;

                  upstream wazert.com {

            server 127.0.0.1:8080;  #tomcat1后面安装配置

                    server 127.0.0.1:8090;   #tomcat2

         }

        server {

       listen  80;

       server_name www.test1.com; #域名

       location / {

           root   html;

            index  index.html index.htm;

            proxy_pass http://wazert.com;

            #       proxy_set_header  X-Real-IP  $remote_addr;

                            proxy_set_header        Host $host;

            proxy_set_header        X-Real-IP $remote_addr;

            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

        }

        location ~ .*\.(gif|jpg|png|htm|html|css|ico|flv|swf)(.*) {

              proxy_pass http://wazert.com;

              proxy_redirect off;

              proxy_set_header Host $host;

              proxy_cache cache_one;

              proxy_cache_valid 200 302 1h;

              proxy_cache_valid 301 1d;

              proxy_cache_valid any 10m;

              expires 30d;

                              proxy_cache_key $host$uri$is_args$args;

二、memcached安装

yum -y install libevent libevent-devel

tar zxvf memcached-1.4.22.tar.gz

cd memcached-1.4.22

./configure --prefix=/usr/local/memcached

启动memcached ip为172.19.0.102 根据自己的环境端口11211可以根据自己需要修改不同端口

/usr/local/memcached/bin/memcached -d -m 1024 -u root -l 172.19.0.102 -p 11211 -c 1024 -P /tmp/memcached.pid

测试一下如下说明成功

telnet 172.19.0.102 11211

Trying 172.19.0.102...

Connected to 172.19.0.102.

Escape character is '^]'.

三、安装jdk

tar zxvf jdk-7u21-linux-x64.tar.gz

mv  jdk1.7.0_21 /opt/jdk

配置vi /etc/profile 增加到环境变量中

在最后面增加

JAVA_HOME=/opt/jdk

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME

export PATH

export CLASSPATH

生效环境变量

source /etc/profile 

java -version 查看是版本是否生效

java version "1.7.0_21"

Java(TM) SE Runtime Environment (build 1.7.0_21-b11)

Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

四、安装与配置tomcat

1.安装tomcat

tar zxvf tomcat7.tar.gz

mv apache-tomcat-7.0.29 /opt/tomcat1

2.添加mem和msm的依赖jar包

<a href="http://s3.51cto.com/wyfs02/M01/6B/66/wKiom1UsiN2y_FVMAADPlHjyBDg706.jpg" target="_blank"></a>

把包下载后上传/opt/tomcat1/lib/ 目录下

3、配置tomcat

cd  /opt/tomcat1/conf

vi context.xml

增加&lt;Context&gt;&lt;/Context&gt;之间      注意:172.19.0.102 11211 是memcached端口

&lt;Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

                memcachedNodes="n1:172.19.0.102:11211"

                requestUriIgnorePattern=".*/.(png|gif|jpg|css|js|swf|flv)$"

                sessionBackupAsync="false"

                sessionBackupTimeout="100"

                transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

                copyCollectionsForSerialization="false"/&gt;

修改vi server.xml

&lt;!-- You should set jvmRoute to support load-balancing via AJP ie :

    &lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"&gt;

    --&gt;

    &lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"&gt;

五、配置tomcat集群上面配置好后拷贝一份

cp  -r  tomcat1  tomcat2

cd tomcat2/conf/

修改vi server.xml配置把端口配置不同的

1. 找到如下把8005修改成8006

--&gt;

&lt;Server port="8005" shutdown="SHUTDOWN"&gt;

2.找到如下把8080修改成8090根据自己来配置,修改后的8090与nginx配置一样

   --&gt;

    &lt;Connector port="8090" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" /&gt;

3.找到如下把8009修改成8010

&lt;!-- Define an AJP 1.3 Connector on port 8009 --&gt;

    &lt;Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /&gt;

4. 找到如下把tomcat1修改成tomcat2

    &lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"&gt;

六、启动tomcat集群

启动tomcat1

sh /opt/tomcat1/bin/startup.sh

启动tomcat2

sh /opt/tomcat2/bin/startup.sh

netstat -tunlp查看tomcat集群启动成功

tcp        0      0 :::8080                     :::*                        LISTEN      22911/java

tcp        0      0 :::8090                     :::*                        LISTEN      22946/java 

查看8080与8090说明成功

七、启动 nginx

/usr/local/nginx/sbin/nginx 启动

/usr/local/nginx/sbin/nginx -s reload  重启

测试session是否共享

1.cd /opt/tomcat1/webapps/ROOT/

mkdir test

cd test

vi index.jsp

&lt;%@ page contentType="text/html; charset=GBK" %&gt;

&lt;%@ page import="java.util.*" %&gt;

&lt;html&gt;&lt;head&gt;&lt;title&gt;Cluster Test&lt;/title&gt;&lt;/head&gt;

&lt;body&gt;

&lt;%

  //HttpSession session = request.getSession(true);

  System.out.println(session.getId());

  out.println("&lt;br&gt; SESSION ID:" + session.getId()+"&lt;br&gt;");

%&gt;

&lt;/body&gt;

2.cd /opt/tomcat2/webapps/ROOT/ 把tomcat1 test目录拷贝过来

cp -r /opt/tomcat1/webapps/ROOT/test ./

打开网页

<a href="http://s3.51cto.com/wyfs02/M00/6B/66/wKiom1UsiUyzl9gDAADvs2edWgY248.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/6B/62/wKioL1UsitjhfWIKAAD33DSmOtw656.jpg" target="_blank"></a>

刷新几次看看session iD不变,就成功了,如果变了可能配置问题。以上图说明session共享了

stats

<a href="http://s3.51cto.com/wyfs02/M01/6B/62/wKioL1Usiyrz6AZvAAIHS83JSgQ591.jpg" target="_blank"></a>

本文转自 jxzhfei  51CTO博客,原文链接:http://blog.51cto.com/jxzhfei/1632163