session會話保持之session服務器-tomcat + msm + memcached

拓撲圖

image

準備環境:
由於電腦配置爛,虛擬機有限,故一個虛擬機同時作多種服務器類型使用。
兩個tomcat節點:172.16.19.1(tomcatA.luo.com),172.16.19.21(tomcatB.luo.com)
兩個memcached節點:172.16.19.21, 172.16.19.22
一個負載均衡節點(httpd):172.16.19.1

兩邊都進行基本的jdk與tomcat安裝

安裝jdk

下載安裝包並安裝:

# rpm -ivh jdk-7u9-linux-x64.rpm Preparing... ########################################### [100%] 1:jdk ########################################### [100%] Unpacking JAR files... rt.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/rt.pack jsse.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/jsse.pack charsets.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/charsets.pack tools.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/lib/tools.pack localedata.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/ext/localedata.pack

說明:這些錯誤暫時可以忽略,不影響使用
查看java的安裝目錄
# ll /usr/java/
total 4
lrwxrwxrwx  1 root root   16 Sep 26 06:03 default -> /usr/java/latest
drwxr-xr-x 10 root root 4096 Sep 26 06:03 jdk1.7.0_09
lrwxrwxrwx  1 root root   21 Sep 26 06:03 latest -> /usr/java/jdk1.7.0_09
latest鏈接指定最新版本

修改環境變量
# vim  /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
# . /etc/profile.d/java.sh

查看版本信息
# java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

安裝Tomcat
解壓並創建鏈接
# tar -xf apache-tomcat-7.0.42.tar.gz -C /usr/local
# cd /usr/local
# ln -sv apache-tomcat-7.0.42 tomcat
`tomcat' -> `apache-tomcat-7.0.42'

修改環境變量
# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
# . /etc/profile.d/tomcat.sh

啓動tomcat

# catalina.sh start # 或者使用命令startup.sh,默認使用8080端口,先確定端口沒有被佔用 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

查看啓動的端口
# netstat -tnlp |grep java
tcp        0      0 :::8080                     :::*                        LISTEN      4357/java          
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      4357/java          
tcp        0      0 :::8009                     :::*                        LISTEN      4357/java

查看版本

# cd /usr/local/tomcat # catalina.sh version 或者version.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/7.0.42 Server built: Jul 2 2013 08:57:41 Server number: 7.0.42.0 OS Name: Linux OS Version: 2.6.32-431.el6.x86_64 Architecture: amd64 JVM Version: 1.7.0_09-b05 JVM Vendor: Oracle Corporation

測試tomcat成功運行:
 image

二、配置代理、負載均衡、memcached

memcached-session-manager項目地址,http://code.google.com/p/memcached-session-manager/

下載如下jar文件至各tomcat節點的tomcat安裝目錄下的lib目錄中,其中軟件的版本號要和tomcat是相同的版本號。

node、node1節點:

memcached-session-manager-1.8.2.jar memcached-session-manager-tc7-1.8.2.jar msm-javolution-serializer-1.8.2.jar spymemcached-2.10.2.jar javolution-5.5.1.jar

分別在兩個tomcat上的某host上定義一個用於測試的context容器,並在其中創建一個會話管理器,如下所示(node、node1節點):

<Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.19.21:11211,n2:172.16.19.22:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/> </Context>

分別爲兩個context提供測試頁面:

node(tomcatA):
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp
添加如下內容:

<%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatA.luo.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("luo.com","luo.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>

node1(tomcatB):
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp
添加如下內容:

<%@ page language="java" %> <html> <head><title>TomcatB</title></head> <body> <h1><font color="red">TomcatB.luo.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("luo.com","luo.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>

在node節點(172.16.19.1)上配置反向代理的負載均衡內容

可以新建個文件mod_http.con,類似如下所示:

配置apache通過mod_proxy模塊與Tomcat連接

查看相關模塊是否啓用

[root@node ~]# httpd -M |grep proxy
Syntax OK
proxy_module (shared)
proxy_balancer_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)
proxy_connect_module (shared)


# vim /etc/httpd/conf.d/mod_http.conf

<Proxy balancer://tomcat> BalancerMember http://172.16.19.1:8080 loadfactor=1 BalancerMember http://172.16.19.21:8080 loadfactor=1 # 如果使用ajp則使用下面現行替換上面現行即可 # BalancerMember ajp://172.16.19.1:8009 loadfactor=1 # BalancerMember ajp://172.16.19.21:8009 loadfactor=1 ProxySet lbmethod=byrequests </Proxy> <Location /status> SetHandler balancer-manager ProxyPass ! Order allow,deny Allow from all </Location> ProxyPass / balancer://tomcat/ ProxyPa***everse / balancer://tomcat/

基於mod_jk的負載均衡

# yum -y install httpd-devel # rpm -ql httpd-devel |grep apxs # tar xf tomcat-connectors-1.2.40-src.tar.gz # cd tomcat-connectors-1.2.40-src/native # ./configure --with-apxs=/usr/sbin/apxs # make && make install

# cat /etc/httpd/conf.d/mod_jk.conf  #新添加文件,把之前添加的mod_http.conf暫時改個後續名

LoadModule jk_module modules/mod_jk.so JkWorkersFile /etc/httpd/conf.d/workers.properties JkLogFile logs/mod_jk.log JkLogLevel debug #調試時使用debug JkMount /* lbA JkMount /status/ statA

# cat /etc/httpd/conf.d/workers.properties

worker.list = lbA,statA worker.TomcatA.type = ajp13 worker.TomcatA.host = 172.16.19.1 worker.TomcatA.port = 8009 worker.TomcatA.lbfactor = 1 worker.TomcatB.type = ajp13 worker.TomcatB.host = 172.16.19.21 worker.TomcatB.port = 8009 worker.TomcatB.lbfactor = 1 worker.lbA.type = lb worker.lbA.sticky_session = 0 worker.lbA.balance_workers = TomcatA,TomcatB worker.statA.type = status 需要在兩邊的主配置文件中加上jvmRoute參數 # cat /usr/local/tomcat/conf/server.xml <Engine name=”catalina” defaultHost=”localhost” jvmRoute=”TomcatA ”> <Engine name=”catalina” defaultHost=”localhost” jvmRoute=”TomcatB ”> # catalina.sh start # service httpd restart

三、配置node1與node2的memcached

# yum install –y install memcached

# service memcached start

# ss –tnl |grep 11211

 

四、測試結果
在瀏覽器中訪問http://172.16.19.1/test,結果如下所示,其session ID在負載均衡環境中保持不變。

image
負載均衡與session綁定已經可以實現
 
2、模擬node2故障,停止node2的memcached,可以看到已經轉到n1(memcached1)上面了且session保持不變
[root@node2 ~]# service memcached stop

 image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章