Tomcat简单的来说类似于php的功能,主要实现java程序的编译,最后呈现给用户的是html格式的代码,使用用户可以在浏览器中访问。Tomcat是Java语言研发的,所以依赖于java的虚拟机(jvm)。
一、使用前端调度器实现实现session保持
实现的原理如下图,会话保持使用前端的调度器实现。例如:使用Ngnix调度时,使用ip_hash算法就可以实现。
配置步骤:
1、安装配置 Tomcat
操作系统: CentOS 6,5目标主机:172.16.10.122 172.10.10.133第一步:安装Java虚拟机 ### 获得jdk软件 jdk-6u31-linux-x64-rpm.bin 这里说明:对应的jdk版本有bin版本和rpm版本,可以根据自己的需要下载。下载地址是:### 安装步骤chmod +x jdk-6u31-linux-x64-rpm.bin./jdk-6u31-linux-x64-rpm.bin## cat /etc/profile.d/java.sh export JAVA_HOME=/usr/java/latestexport PATH=/usr/java/latest/bin/:$PATH### source /etc/profile.d/java.sh 第二步:安装tomcat### 获得tomcat软件 apache-tomcat-7.0.55.tar.gz ### 安装步骤tar xf ache-tomcat-7.0.55.tar.gz -C /usr/localln -sv apache-tomcat-7.0.55 tomcat### cat /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcatexport PATH=$CATALINA_HOME/bin:$PATH###第三步:添加测试站点,站点的目录数如下:### tree /usr/local/tomcat/webapps/test//usr/local/tomcat/webapps/test/|-- WEB-INF| |-- classes| `-- lib`-- index.jsp3 directories, 1 file# 3个目录WEB-INF classes lib 1个文件 # 文件内容:172.16.10.122<%@ page language="java" %>TomcatA TomcatA.example.com
结果示例:
以上测试成功后,配置以下的内容。
2、配置前端调度器
操作系统: CentOS 6,5目标主机:172.16.10.1第一步:安装Ngnix### 可以使用源码编译安装,也可使用rpm方式安装(需配置好epel源)这里使用 rpm方式安装。yum install ngnix -y第二步:配置Ngnix前端调度### cat /etc/nginx/conf.d/default.conf 主要配置如下:upstream www.tomcat.org { ip_hash; server 172.16.10.122:8080; server 172.16.10.133:8080;}server { listen 80; server_name www.tomcat.org; location / { proxy_pass http://www.tomcat.org; index index.jsp index.html index.htm; }}
结果测试:
这是通过ip_hash调度方法实现的。思考如下问题:这样做还能减轻后端tomcat的压力吗??
解决办法:将session信息在每个Tomcat节点上保存一份,做成tomcat集群(session集群)。
二、使用tomcat集群保持session
实现架构不变。
1、配置tomcat集群
### 在 /usr/local/tomcat/conf/server.xml 的内部以下内容添加:目标主机:172.16.10.122 172.16.10.133 ### 在相应应用程序的web.xml中添加 ; 也可以全局添加目标主机:172.16.10.122 172.16.10.133cp /usr/local/tomcat/webapps/test/WEB-INF/web.xml /usr/local/tomcat/webapps/test/WEB-INF/# 编辑 /usr/local/tomcat/webapps/test/WEB-INF/web.xml 在 中添加: ;
2、配置前端调度器
这里主要是使用轮询调度,不使用ip_hash调度。只需将配置文件中的ip_hash去掉即可。
结果示例:
配置完成后,重启tomcat即可。
从结果中可以知道,实现了session保持。
思考如下问题? 这种方式的session保持是通过每个节点保存一份session信息,但是:但集群节点很多时,这些seesion信息可能是很大级别的。此时,各个节点之间的session复制反而成了影响系统性能的瓶颈。
解决办法: 使用session服务器,将seession信息统一保存到缓存服务器中。
二、使用session服务器(memcached)来保持session
试验拓扑图如下:
tomcat实现此功能要借助于msm(Memcached-Session-Management)模块可以实现。需要下载jar包, javolution、memcached-session-manager-tc7、spymemcached、memcached-session-manager、msm-javolution-serializer 。将这些jar包拷贝到/usr/local/tomcat/lib/目录下,支持msm功能。这些包可以再Google Code中找到。
下载时要注意:要与tomcat的版本相对应。
1、配置memcached
操作系统:CentOS 6.5目标主机:172.16.10.1 172.16.10.9yum install memcached -yservice memcached start
2、配置tomcat
目标主机:172.16.10.122 172.16.10.133## 在试验一的基础上,继续配置### 在 /usr/local/tomcat/conf/server.xml 的内部以下内容添加:
3、配置Ngnix前端调度方法,同试验二一样。
结果示例:
补充说明:
对于前端调度器也可使用apache和haproxy反向代理器。
四、Tomcat实例
tomcat + memcacahed + nginx + mysql + nfs 实现jsp格式的论坛。试验拓扑图如下:
1、配置数据节点 172.16.10.1
#### 配置 NFS 服务器mkdir /tomcatdata# 编辑 /etc/exports,添加:/tomcatdata 172.16.0.0/16(rw)service nfs start### 配置 mysqlyum install mysql-server -y servive mysqld startmysql> CREATE DATABASE jcenter1;mysql> GRANT ALL ON jcenter1.* TO jcenter@'172.16.%.%' IDENTIFIED BY 'jcenter';mysql> FLUSH PRIVILEGES;
2、配置tomcat
在试验一的基础上:
目标主机: 172.16.10.122 172.16.10.133第一步:搭建站点mkdir /tomcat/webapps/mount -t nfs 172.16.10.1:/tomcatdata /tomcat/webapps/# 获取jsp程序 JavaCenter_Home_2.0_GBK.tar.bz2 java程序代码tar -xf JavaCenter_Home_2.0_GBK.tar.bz2 -C /tomcat/webapps/cd /tomcat/webapps/ln -sv JavaCenter_Home_2.0_GBK jct# 配置 JavaCenter:/tomcatdata/jct/config.properties# 主要修改以下:# 数据库服务器地址(一般为本地localhost或127.0.0.1)dbHost = 172.16.10.1# 数据库服务器端口号(一般为3306)dbPort = 3306# 数据库用户名dbUser = jcenter# 数据库密码dbPw = jcenter# 数据库名dbName = jcenter1第二步:配置tomcat# 当然msm所依赖的jar包要拷贝到对应的目录下重新启动tomcat.
结果示例:
至此,配置基本完成。