10.18. tomcat配合memcached会话管理

这里使用192.168.46.151作为调度器,后端使用192.168.46.152,192.168.46.153作为tomcat服务器。

10.18.1. tomcat安装

[root@centos-152 ~]# yum search openjdk
[root@centos-152 ~]# yum install java-1.8.0-openjdk.x86_64
[root@centos-152 ~]# java -version
[root@centos-152 ~]# yum install tomcat  tomcat-lib  tomcat-admin-webapps  tomcat-webapps  tomcat-docs-webapp
[root@centos-152 ~]# systemctl restart tomcat
[root@centos-152 ~]# ss -tul

[root@centos-153 ~]# yum search openjdk
[root@centos-153 ~]# yum install java-1.8.0-openjdk.x86_64
[root@centos-153 ~]# java -version
[root@centos-153 ~]# yum install tomcat  tomcat-lib  tomcat-admin-webapps  tomcat-webapps  tomcat-docs-webapp
[root@centos-153 ~]# systemctl restart tomcat
[root@centos-153 ~]# ss -tul

10.18.2. 前端调度配置

[root@centos-151 ~]# yum install nginx
[root@centos-151 ~]# vim /etc/nginx/nginx.conf

    # 添加和修改如下内容
    upstream webend  {
        server 192.168.46.152;
        server 192.168.46.153;
        }

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        proxy_pass http://webend ;
        index index.jsp index.html;
        }
[root@centos-151 ~]# systemctl restart nginx
[root@centos-151 ~]# ss -tunl

10.18.3. 后端tomcat样例页准备

[root@centos-152 ~]# mkdir -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF,META-INF}
[root@centos-152 ~]# vim /usr/share/tomcat/webapps/test/index.jsp
[root@centos-152 ~]# cat /usr/share/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
                        <html>
                            <head><title>TomcatA</title></head>
                            <body>
                                <h1><font color="red">TomcatA.linuxpanda.tech</font></h1>
                                <table align="centre" border="1">
                                    <tr>
                                        <td>Session ID</td>
                                    <% session.setAttribute("linuxpanda.tech","linuxpanda.tech"); %>
                                        <td><%= session.getId() %></td>
                                    </tr>
                                    <tr>
                                        <td>Created on</td>
                                        <td><%= session.getCreationTime() %></td>
                                    </tr>
                                </table>
                            </body>
                        </html>
[root@centos-152 ~]# scp -rp  /usr/share/tomcat/webapps/test/   192.168.46.153:/usr/share/tomcat/webapps/
[root@centos-153 ~]# vim /usr/share/tomcat/webapps/test/index.jsp
[root@centos-153 ~]# cat /usr/share/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
                        <html>
                            <head><title>TomcatA</title></head>
                            <body>
                                <h1><font color="red">TomcatB.linuxpanda.tech</font></h1>
                                <table align="centre" border="1">
                                    <tr>
                                        <td>Session ID</td>
                                    <% session.setAttribute("linuxpanda.tech","linuxpanda.tech"); %>
                                        <td><%= session.getId() %></td>
                                    </tr>
                                    <tr>
                                        <td>Created on</td>
                                        <td><%= session.getCreationTime() %></td>
                                    </tr>
                                </table>
                            </body>
                        </html>

# 启动tomcat
[root@centos-152 ~]# systemctl restart tomcat
[root@centos-153 ~]# systemctl restart tomcat

10.18.4. 测试调度情况

../../_images/tomcat-aa.png

不断刷新,发现页面和sesssionId,都会不断变化的,chroom浏览器测试有点问题,建议firefox浏览器测试。

10.18.5. 配置tomcat支持memcached会话管理

官方地址参考

# 查看tomcat版本
[root@centos-152 msm]# yum info tomcat |grep Version
Version     : 7.0.76

# 先下载下会话管理对应的包
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.0/memcached-session-manager-2.3.0.jar
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/2.3.0/memcached-session-manager-tc7-2.3.0.jar
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/net/spy/spymemcached/2.12.3/spymemcached-2.12.3.jar

# 下载序列化需要的包

[root@centos-152 ~]# wget http://repo1.maven.org/maven2/org/objenesis/objenesis/2.6/objenesis-2.6.jar
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/org/ow2/asm/asm/6.1.1/asm-6.1.1.jar
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/1.11.3/reflectasm-1.11.3.jar
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/com/esotericsoftware/minlog/1.3.0/minlog-1.3.0.jar
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/com/esotericsoftware/kryo/4.0.2/kryo-4.0.2.jar
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.42/kryo-serializers-0.42.jar
[root@centos-152 ~]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/2.3.0/msm-kryo-serializer-2.3.0.jar
# 查看下载的包
[root@centos-152 msm]# ll
total 1312
-rw-r--r-- 1 root root 108252 Mar 25 22:20 asm-6.1.1.jar
-rw-r--r-- 1 root root 337512 Mar 21 05:02 kryo-4.0.2.jar
-rw-r--r-- 1 root root 106032 Jul 17  2017 kryo-serializers-0.42.jar
-rw-r--r-- 1 root root 167266 Mar 19 06:29 memcached-session-manager-2.3.0.jar
-rw-r--r-- 1 root root  11704 Mar 19 06:33 memcached-session-manager-tc7-2.3.0.jar
-rw-r--r-- 1 root root   5711 Jul 21  2014 minlog-1.3.0.jar
-rw-r--r-- 1 root root  38268 Mar 19 06:37 msm-kryo-serializer-2.3.0.jar
-rw-r--r-- 1 root root  55684 Jun 20  2017 objenesis-2.6.jar
-rw-r--r-- 1 root root  20883 May  9  2016 reflectasm-1.11.3.jar
-rw-r--r-- 1 root root 473774 May  1  2017 spymemcached-2.12.3.jar


# 复制到tomcat的lib目录去
[root@centos-152 msm]# cp *.jar /usr/share/tomcat/lib/
[root@centos-152 msm]# scp *.jar 192.168.46.153:/usr/share/tomcat/lib/

[root@centos-152 msm]# vim /etc/tomcat/server.xml
# 在默认的Host片段添加如下内容
<Context path="/test" docBase="/usr/share/tomcat/webapps/test" reloadable="" >
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.46.152:11211,n2:192.168.46.153:11211"
        failoverNodes="n1"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
        />
</Context>
[root@centos-152 msm]# scp /etc/tomcat/server.xml 192.168.46.153:/etc/tomcat/

# 安装memcached
[root@centos-152 msm]# yum install memcached
[root@centos-152 msm]# systemctl start memcached
[root@centos-152 msm]# systemctl restart tomcat
[root@centos-153 msm]# yum install memcached
[root@centos-153 msm]# systemctl start memcached
[root@centos-153 msm]# systemctl restart tomcat

10.18.6. 测试

../../_images/tomcat-aaa.png

再次刷新下

../../_images/tomcat-aaaa.png

可以发现,sessionId就是不变的, 说明我们使用tomcat配合memcached是成功的,接下来我们停掉node2的memcached再次测试下。

../../_images/tomcat-bbb.png

再次刷新下

../../_images/tomcat-bbbb.png

可以发现节点变了, 但是会话id还是一样的。 没有问题。