首先先看下实验拓扑:

wKiom1Qj6B3hKbm3AABxQXfGrHs330.jpg

 

一、安装节点1

1、同步时间

ntpdate time.windows.com

service httpd stop

2、安装nginx

tar -xvf nginx-1.6.1.tar.gz  -C /usr/local/

cd /usr/local/cd nginx-1.6.1/

useradd nginx -s /sbin/nologin 

yum -y install pcre-devel openssl-devel

./configure -prefix=/usr/local/nginx   --sbin-path=/usr/sbin/nginx   --conf-path=/etc/nginx/nginx.conf   --error-log-path=/var/log/nginx/error.log   --http-log-path=/var/log/nginx/access.log   --pid-path=/var/run/nginx/nginx.pid    --lock-path=/var/lock/nginx.lock   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi   --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre

make && make install

 

mkdir -pv /var/tmp/nginx/client

/usr/sbin/nginx

 

2、安装jdk

tar -xvf jdk-8u20-linux-i586.tar.gz -C /usr/local/

vim /etc/profile

. /etc/profile

[root@nginx-node3 ~]# java -version

java version "1.8.0_20"

Java(TM) SE Runtime Environment (build 1.8.0_20-b26)

Java HotSpot(TM) Client VM (build 25.20-b23, mixed mode)

 

如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory,安装下glic即可

sudo yum install glibc.i686

 

3、安装tomcat

tar -xvf apache-tomcat-8.0.12.tar.gz -C /usr/local/

cd /usr/local/

mv apache-tomcat-8.0.12/ tomcat

/usr/local/tomcat/bin/catalina.sh start

4、验证nginxtomcat

wKiom1Qj6DmyKhzDAAE-JbIXeoE318.jpg


wKioL1Qj6F2A6A4BAAGXeg19_UU913.jpg

 


 

5、配置节点2

jdktomcat同节点一的安装方法一样就不过多叙述了

 

二、先配置下负载均衡

1、配置nginx修改负载均衡,并且设置所有以.jsp结尾的都交给tomcat处理

# egrep -v "^*#|^$" /etc/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 tomcat.com {

    server 192.168.1.126:8080;

    server 192.168.1.127:8080;

    }

    server {

        listen       80;

        server_name  localhost;

        location / {

            root   html;

            index  index.html index.htm ;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

        

        location ~ \.jsp$ {

           proxy_pass        http://tomcat.com;

           proxy_set_header  X-Real-IP $remote_addr;

        }

    }

}

2、分别设置节点1和节点2tomcatindex.jsp页面,2节点只需要改成blue tomcatB就好

# vim /usr/local/tomcat/webapps/ROOT/index.jsp

<html>

  <head><title>TomcatA</title></head>

  <body>

    <h1><font color="red">TomcatA</font></h1>

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

      <tr>

        <td>Session ID</td>

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

      </tr>

      <tr>

        <td>Created on</td>

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

     </tr>

    </table>

  </body>

</html>

3、访问nginx看是否有负载均衡,下面看下效果


wKioL1Qj6PSB3bJeAACexGguP_o995.jpg

wKiom1Qj6NDgJHazAACgzJAKUCI843.jpg



可以看到已经负载均衡了,但是session ID还是没有共享的,这是memcache就要登场了

 

三、下面在2节点上安装memcache

1、直接安装memcache

tar -xvf memcached-1.4.20.tar.gz -C /usr/local/

cd /usr/local/memcached-1.4.20/

yum -y install libevent-devel

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

make && make install

2、配置tomcat连接memcache,这里用的是memcached-session-manager

参考网站:

http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

 

3、准备的jar包

注意:不同的tomcat版本(tomcat6,tomcat7,tomcat8)所需的包不一样,需要针对tomcat版本下载对应的包.

这是采用的javolution的序列化方式所有需要的包:

wKioL1Qj6M3ALg73AAFIlu3MkjM253.jpg


这是采用的javolution的序列化方式所有需要的包:

wKiom1Qj6KnwOooWAAEECzgC-P4373.jpg

建议采用kryo序列化方式,效率更高。

4、把kryo所有的包考到Tomcat的lib目录下,这些包都是msm所依赖的包。

[root@nginx-node3 ~]# ll kryo/

total 868

-rw-r--r-- 1 root root  43398 Sep 24 13:32 asm-3.2.jar

-rw-r--r-- 1 root root  94830 Sep 24 13:31 kryo-1.04.jar

-rw-r--r-- 1 root root  62112 Sep 24 13:31 kryo-serializers-0.11.jar

-rw-r--r-- 1 root root 147019 Sep 24 13:01 memcached-session-manager-1.8.2.jar

-rw-r--r-- 1 root root  10407 Sep 24 13:12 memcached-session-manager-tc8-1.8.2.jar

-rw-r--r-- 1 root root   4879 Sep 24 13:31 minlog-1.2.jar

-rw-r--r-- 1 root root  29329 Sep 24 13:31 msm-kryo-serializer-1.8.2.jar

-rw-r--r-- 1 root root  11615 Sep 24 13:32 reflectasm-1.01.jar

-rw-r--r-- 1 root root 464756 Sep 24 13:19 spymemcached-2.11.4.jar

[root@nginx-node3 ~]# cp kryo/* /usr/local/tomcat/lib/

 

5、memcache启动

/usr/local/memcache/bin/memcached -d -m 128 -l 192.168.1.127 -p 11211 -u root

/usr/local/memcache/bin/memcached -d -m 128 -l 192.168.1.127 -p 11311 -u root

wKioL1Qj6RPSbFDJAAL3hw2vhk0625.jpg


之后可以telnet测试一下,下面是memcached启动命令参数详解

-d选项是启动一个守护进程,

-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB

-u是运行Memcache的用户,我这里是root

-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200

-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,

-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,

-P是设置保存Memcachepid文件,我这里是保存在 /tmp/memcached.pid

-p 使用的TCP端口。默认为11211

-m 最大内存大小。默认为64M

-vv very vrebose模式启动,调试信息和错误输出到控制台

-d 作为daemon在后台启动

 

 

 

6、下面修改tomcat配置文件,让tomcat结合memcache实现session共享

 

<Context>

...  

        <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

         memcachedNodes="n1:192.168.1.127:11211 n2:192.168.1.127:11311"

         sticky="false"

         sessionBackupTimeout="100"

         sessionBackupAsync="false"

         copyCollectionsForSerialization="false"

         requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

 

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

        />

...

</Context>

说明:

这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:

n1:localhost:11211 n2:localhost:11212     /localhost改为安装memcached的服务器的IP

 

重启2个节点的tomcat,可以看到启动日志没有报错即可

wKiom1Qj6QHCfV9tAAgdjEY8tFU322.jpg 

 

7下面可以看到,是负载轮询的,但是sessinID是一直不变的这样就达到实验目的了:

wKiom1Qj6Sbg9Uf1AACSBtqDJcA553.jpg

wKioL1Qj6UqTQDhaAACb2-8tcx4844.jpg