标签:使用nginx和httpd 反代到tomcat的实现 以及会话绑定 session cluster 和使用memcached实现session server
Tomcat简单来说就是JAVA 2 EE 加上Servlet和JSP类库的实现,tomcat=JWS(Sun)+ Jserv(ASF)
Tomcat的核心组件:
catalina:servlet container
Coyote:http connection
Jasper:JSP Engine 执行引擎
TomcatInstance: 运行中的tomcat进程(java进程)
Server:即一个tomcat实例;
Service:用于将connector关联至engine组件;一个service只能包含一个engine组件和一个或多个connector组件;
Engine:Tomcat的核心组件,用于运行jsp或servlet代码;
Connector:接入并解析用户请求,将请求映射为Engine中运行的代码;之后,将运行结果构建成响应报文;
Host:类似httpd中的虚拟主机;
Context:类似于httpd中的alias;
注意:每个组件都由“类”来实现,有些组件的实现还不止一种;
顶级类组件:server
服务类组件:service
容器类组件:即可以部署webapp的组件,engine,host, context
连接器组件:connector
被嵌套类组件:valve,logger, realm
tomcat的主配置文件结构:
<server>
<service>
<connector/>
<connector/>
...
<engine>
<host>
<context/>
...
</host>
...
</engine>
</service>
</server>
Tomcat的目录结构:
bin:脚本及启动时用到的类
lib:类库
conf:配置文件
logs:日志文件
webapps:应用程序默认部署目录
work:工作目录
temp:临时文件目录
配置文件:
server.xml:主配置文件
context.xml:每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器、JDBC等;conf/context.xml是为各webapp提供默认配置;
web.xml:每个webapp“部署”之后才能被访问;此文件则用于为所有的webapp提供默认部署相关的配置;
tomcat-users.xml:用户认证的账号和密码配置文件;
catalina.policy:当使用-security选项启动tomcat实例时会读取此配置文件来实现其安全运行策略;
catalina.properties:Java属性的定义文件,用于设定类加载器路径等,以及一些JVM性能相关的调优参数;
logging.properties:日志相关的配置信息;
CentOS7上默认提供的JDK是openJDK7,Tomcat7,这版本已经很新了,可以直接yum安装使用
要安装Tomcat首先要安装JDK,然后安装Tomcat,可以直接yum安装,也可以自己下载二进制格式的程序包进行安装,
下面我们自己下载二进制程序包进行安装,下载jdk-8u25-linux-x64.rpm,apache-tomcat-8.0.23.tar.gz(以下的演示都是在CentOS7下做的,如果你使用的不是CentOS7可能会有些不同)
然后直接rpm -ivh jdk-8u25-linux-x64.rpm 安装JDK,然后配置环境变量,编辑/etc/profile.d/java.sh文件加入exportJAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH 把JDK的路径加入到PATH变量中,使用java回车测试下,看JDK是否安装成功
如果出现这些信息等,就证明JDK装好了,环境变量也配置好了
然后安装tomcat,tar xf apache-tomcat-8.0.23.tar.gz -C /usr/local
然后切入到/usr/local目录下,创建一个符号连接文件ln -sv apache-tomcat-8.0.23 tomcat
然后切入到tomcat目录下,不用修改什么就可以运行tomcat(/usr/local/tomcat/bin/catalina.sh start),但为了可以直接使用catalina.shstart运行,需要配置环境变量,编辑/etc/profile.d/tomcat.sh 加入exportCATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
然后使用catalina.sh start 就可以启动了,使用ss –tnl 就可以发现8080端口启用了
然后访问测试下
可以看到web页面的管理界面了,里面的3个按钮是服务器资源和两个管理的应用程序
点下Manager这个按钮需要认证,现在你点击取消,会提示你在哪修改,然后才能访问
编辑配置文件/usr/local/tomcat/conf/tomcat-users.xml,然后加入下面三行就可以使用这三个按钮的功能了
Java WebAPP 组织结构:
有特定的组织形式、层次型的目录结构;主要包含了servlet代码文件、JSP页面文件、类文件、部署描述符文件等;
例:/usr/local/tomcat/webapps/app1/
/:webapp的根目录;
WEB-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml;
META-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的context.xml;
classes/:此webapp的私有类;
lib/:此webapp的私有类,被打包为jar格式类;
index.jsp:webapp的主页
手动添加一个测试应用程序:
创建webapp特有的目录结构;
mkdir-pv myapp/{lib,classes,WEB-INF,META-INF}
提供webapp各文件,WEB-INF中应有web.xml文件,META-INF中有context.xml文件,如果没有的话就会使用conf目录下默认的这两个文件;然后直接在myapp目录下创建一个index.jsp文件,编辑内容如下:
<%@page language="java" %>
<%@page import="java.util.*" %>
<html>
<head>
<title>JSPTest Page</title>
</head>
<body>
<%out.println("Hello world!"); %>
</body>
</html>
然后canalina.sh stop 等一会儿,然后在canalina.sh start;访问测试下
可以看到没有问题了
然后这个时候,查看tree /usr/local/tomcat/work
可以看到这里面有.java文件和.class文件,这是JSP把index.jsp通过servlet转换成.java文件,然后通过complie编译成bytecodes自解码的.class文件,然后在JVM中运行
部署(deployment)webapp相关的操作:
deploy:部署,将webapp的源文件旋转于目标目录、配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp; 将其特有类通过class loader装载至tomcat;
有两种方式:
自动部署:autodeploy
手动部署:
1、冷部署:把webapp复制到指定位置,而后才启动tomcat;
2、热部署:在不停止tomcat的前提下进行的部分:
部署工具:manager、ant脚本、tcd(tomcatclient deployer)等;
undeploy:反部署,停止webapp,并从tomcat实例拆除其部分文件和部署名;
stop:停止,不再向用户提供服务;但其文件和部署名会在tomcat实例中
start:启动处于“停止”状态的webapp;
redeploy:重新部署;
tomcat自带的应用程序:
managerapp: webapp管理工具
hostmanager:Virtual Hosts管理工具
可以通过这两个工具来管理webapp应用程序和虚拟主机,实现应用程序的热部署等
tomcat启动是开启了3个端口一个是8080提供http连接器服务的,一个8005是一个管理端口,可以telnet进入然后关闭服务;还有一个8009端口是提供ajp连接器服务的
Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。
定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于server.xml中的连接器类型通常有4种:
1) HTTP连接器
2) SSL连接器
3) AJP 1.3连接器
4)proxy(JK)连接器
自定义Host及Context示例:
<Host name="web1.magedu.com"appBase="/data/webapps/"unpackWARs="true"autoDeploy="true">
<Contextpath="" docBase="ROOT" reloadable="true">
<ValveclassName="org.apache.catalina.valves.RemoteAddrValve"
allow="172\.16\.0\.0"/>
</Context>
<Contextpath="/shop" docBase="shopxx" reloadable="true"/>
<Valve className="org.apache.catalina.valves.AccessLogValve"directory="/data/logs" prefix="web1_access_log"suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
注意:path给定的路径不能以“/”结尾;
不是默认的Host,自己定义的Host的dcoBace尽量使用绝对路径,要不然使用相对路径有时会访问不到,尽量使用绝对路径
下面演示一下:
修改配置文件(/usr/local/tomcat/conf/server.xml),如果是rpm包安装的tomcat其配置文件是/etc/tomcat/server.xml
在Engine段中,加入下面内容
<Host name="centos7"appBase="/data/webapps" autoDeploy="false">
<Context path="" docBase="/data/webapps"reloadable="true"/>
<ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="/data/logs"
prefix="web1_access_log" suffix=".txt"
pattern="%h %l %u %t"%r" %s %b" />
</Host>
创建目录/data/{webapps,logs}
然后复制我们以前创建的mydata程序的所有文件复制到/data/webapps
cp -r/usr/local/tomcat/webapps/myapp/* /data/webapps/
然后修改物理机的hosts文件,让本机能解析到centos7
然后访问测试下
这就没有问题了,自己添加的虚拟主机就生效了
修改配置文件:
在里面定义两个Centext,一个为默认的;然后在/data/webapps目录下的所有文件移动到这个目录下新创建的ROOT目录下,然后在新建一个shopxx目录,然后在shopxx中创建这几个目录和一个测试页classes index.jsp lib META-INF WEB-INF
index.jsp中的内容
首先停止tomcat (catalina.sh stop),然后在打开(catalina.sh start)
可以看到两个Context都生效了。path是用来定义访问时的url的,多个Context中path不能一样
然后下载一个软件shopxx然后解压到/data/webapps目录下,把shopxx目录删掉,
做一个符号连接ln -sv shopxx-v3.0-Beta/shopxx-3.0Beta/ shopxx
配置文件要修改下
然后在访问下
还需要数据库,需要安装mariadb然后开启,并授权
grant all on shoppxx.* toshopuser@‘localhost‘ identified by ‘shoppasswd‘;
grant all on shoppxx.* toshopuser@‘127.0.0.1‘ identified by ‘shoppasswd‘;
然后根据提示,做软件的安装
这样就行了
做访问控制的示例:
<Context path=""docBase="/data/webapps ">
<ValveclassName="org.apache.catalina.valves.RemoteAddrValve"
allow="172\.16\.0\.0"/>
</Context>
这样做就行了
然后在我们做的默认访问目录下,创建一个image目录,然后里面放两张图片,然后关闭tomcat再开启,然后访问下,看能正常访问不
下面实现LNMT:(Nginx+tomcat)
请求的过程 client-->http --> nginx --> reverse_proxy --> http --> tomcat (httpconnector)
首先找一台主机,安装nginx,然后配置nginx
然后启动服务就行了,访问测试下
这就代理过去了,能够访问了,但访问的不是我们想要的虚拟主机,
这是基于IP地址访问的,如果tomcat的Engine中的默认虚拟主机不是我们需要的话,我们就要以主机名来访问了,或者修改Tomcat的配置文件,把默认虚拟主机改为我们需要的
修改/etc/nginx/nginx.conf
然后修改/etc/hosts文件增加一条172.16.249.195 centos7
然后重载nginx
这样就可以通过反代来访问我们需要访问放到的虚拟主机
如果需要把静态的让nginx响应,让动态的转交给后端的tomcat
修改nginx的配置文件
然后重载nginx,访问测试
这个时候默认请求的是index.html,所以没有转交给tomcat,而是nginx自己响应了
后面带上指定的url访问
可以看到实现动静分离了
实现LAMT(apache+tomcat)
访问请求 client--> http --> httpd --> reverse_proxy --> {http|ajp} --> tomcat{http connector|ajp connector}
把刚在主机(172.16.249.159)nginx停掉,然后打开httpd服务
然后用httpd来进行反向代理
反代模块:
主:proxy_module
子:proxy_module_http,proxy_module_ajp
还可以使用第三方的模块jk来进行反代
首先打开/etc/httpd/conf/httpd.conf注释掉主节点即DocumentRoot这一行
在这个/etc/httpd/conf.d目录下,创建一个虚拟主机的配置文件vhosts.conf文件
然后添加内容:
<Location />定义的是访问的所有url都代理允许通过
ProxyRequests Off 这一项是关闭正向代理的,因为httpd中的代理是正反向都可以代理,但只能代开一种,所以要明确使用哪一种代理
然后使用httpd –t检查语法,然后在启动httpd
这有一个警告,需要修改httpd主配置文件,给一个主机名
找到ServerName,然后修改
然后启动httpd服务,
修改物理机的hosts文件 172.16.249.159 centos7
然后访问测试下
可以看到调度到后端的tomcat的centos7虚拟主机上了(ProxyPreserveHost On因为这一项是,保留自己请求的虚拟主机到后端去)
如果使用的是ip地址访问是不会把主机名加上的所以请求的是
下面做几个实例,实现负载均衡和会话绑定,以及session cluster和session server
示例:nginx, apache(mod_proxy_http,mod_proxy_ajp, mod_jk)负载均衡用户请求至tomcat;额外实现session sticky;
下面的示例使用的是CentOS7下yum安装的JDK和Tomcat
172.16.249.159(centos72)做负载均衡器,172.16.249.115(centos71)和172.16.249.112(centos73)做后端的tomcat
首先配置tomcat,使用java -version,看到系统自带的有JDK1.7,所以这里不在自己编译安装,直接yum安装,然后安装tomcat,yum install tomcat
然后使用rpm -qpl tomcat
可以看到,tomcat的配置文件在/etc/tomcat/server.xml
启动tomcat直接使用systemctl start tomcat.service
然后访问测试下,看能访问到主页不
为了以后配置方便,然后再给tomcat配置一个Host,首先创建目录mkdir -pv /data/webapps/ROOT(/data/webapps这个目录的属组改为tomcat),mkdir/data/logs,然后编辑tomcat的配置文件(/etc/tomcat/server.xml)
修改配置文件,添加下面这些
然后在/data/webapps/ROOT/目录下,创建几个目录和一个index.jsp文件,提供测试页
mkdir lib classes META-INF WEB-INF,vimindex.jsp
然后另一个tomcat节点,也做上面的这些配置,知识测试页为“Hello Worder!on web2”
可以直接复制过去scp server.xml centos73:/etc/tomcat/,然后修改
scp -rp /data/ centos73:/data,然后修改index.jsp
然后重启tomcat; systemctl restart tomcat.service
在其他虚拟机中测试下,首先查看这个虚拟机中能否解析主机名centos71,要是用物理机测试,需要在hosts文件中加入 172.16.249.115 centos71 172.16.249.112 centos73
这样tomcat就做好了,测试也没问题了,
因为tomcat中的默认主机不是我们刚配置的,只能使用主机名才能访问,那么负载均衡器中就要能解析到后端的tomcat主机的主机名,为了方便,我们可以把tomcat的默认主机改为我们配置的虚拟主机(Host)
在重启一下,使用ip地址访问测试下
下面做负载均衡:
1、 使用nginx做负载均衡器,反向代理
在172.16.249.159上安装nginx
然后修改nginx的配置文件(/etc/nginx/nginx.conf)
然后使用nginx – t 检查语法,然后启动nginx
然后访问测试下
刷新下,
可以看到能负载均衡了,这样nginx负载均衡tomcat就做好了
如果要做会话绑定(session sticky),只需要在nginx配置文件中修改
然后systemctl reload nginx.service,然后访问测试
无论怎么刷新都是这一个页面不变了
2、 使用apache来做负载均衡器和反向代理,可以使用3种模块来负载均衡tomcat
首先停掉nginx服务systemctl stop nginx.service,然后安装httpd
(a) mod_proxy;mod_proxy_http;mod_proxy_balancer
编辑httpd配置文件,首先进入httpd的主配置文件(/etc/httpd/conf/httpd.conf)把中心主机禁掉(这一行注释掉DocumentRoot "/var/www/html"),然后在/etc/httpd/conf.d/目录下,创建一个vhosts.conf文件,内容如下:
<proxy balancer://lbcluster1>
BalancerMemberhttp://172.16.249.115:8080 loadfactor=1 route=TomcatA
BalancerMemberhttp://172.16.249.112:8080 loadfactor=1 route=TomcatB
</proxy>
<VirtualHost *:80>
ServerName centos7
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass /balancer://lbcluster1/
ProxyPassReverse /balancer://lbcluster1/
<Location />
Require all granted
</Location>
</VirtualHost>
然后使用httpd -t 检查语法,然后打开httpd服务
需要修改后端tomcat的配置文件(/etc/tomcat/server.xml)
172.16.249.115上的改为:
172.16.249.112上的改为:
为了演示效果修改测试页面:
在TomcatA上(/data/webapps/ROOT/index.jsp)提供如下页面
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><fontcolor="red">TomcatA.magedu.com</font></h1>
<tablealign="centre" border="1">
<tr>
<td>SessionID</td>
<%session.setAttribute("magedu.com","magedu.com"); %>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>Createdon</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
在TomcatB上(/data/webapps/ROOT/index.jsp)提供如下页面
<%@ page language="java" %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><fontcolor="blue">TomcatB.magedu.com</font></h1>
<tablealign="centre" border="1">
<tr>
<td>SessionID</td>
<%session.setAttribute("magedu.com","magedu.com"); %>
<td><%=session.getId() %></td>
</tr>
<tr>
<td>Createdon</td>
<td><%=session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
然后后端tomcat重启(systemctlrestart tomcat.service)
然后访问测试:
可以看到能负载均衡了,但每一次刷新后session ID都不一样
下面做会话绑定(sessionsticky),
修改vhosts.conf文件:
然后检查语法,重载httpd服务,然后测试下
然后无论怎样刷新,都不会变了,这样会话绑定(session sticky)就做好了
(b) mod_proxy;mod_proxy_ajp;mod_proxy_balancer
首先把vhosts.conf 重命名为vhosts.httpd.conf.bak,然后复制vhosts.httpd.conf.bak到vhosts.ajp.conf,然后修改vhosts.ajp.conf配置文件:
然后保存退出,检查语法,重启httpd服务,进行测试
然后做会话绑定(sessionsticky)
只需要在里面加入下面一行
然后重载服务,进行测试
然后刷新页面就不会变了
(c) mod_jk;
mod_jk是ASF的一个项目,是一个工作于apache端基于AJP协议与Tomcat通信的连接器,它是apache的一个模块,是AJP协议的客户端(服务端是Tomcat的AJP连接器)。
要使用这个模块,需要编译这个模块,还要安装httpd的开发包,httpd-devel gcc glibc-devel (yum -y installhttpd-devel gcc glibc-devel),安装开发包组,首先yum grouplist,然后在可用组里找到“开发工具”,然后安装(yum groupinstall "开发工具"),如果已经安装过就不用安装了
下载tomcat-connectors-1.2.40-src.tar.gz
然后解压,编译安装,使用whichapxs,因为编译安装时必须指apxs的安装路径
回车,编译,然后make && make install
看到这个模块生成就可以了
然后在/etc/httpd/conf.d/目录下,创建一个mod_jk.conf的文件,编辑内容如下:
然后在/etc/httpd/conf.d/目录下,创建一个workers.properties文件,编辑内容如下:
然后保存,检查语法,重启httpd服务,然后测试
这样负载均衡就做好了,
然后做做会话绑定(sessionsticky),需要修改workers.properties文件
然后重启服务,进行测试
然后怎样刷新都不会改变了,这样会话绑定就做好了
示例:构建session cluster,实现不论基于什么调度算法,会话的信息不再变化,即sessionID不再变化,
tomcat中自带会话管理器(session manager)
StandardManager:标准会话管理器
PersistentManager:持久会话管理器
FileStore
JDBC
DeltaManager
BackupManager
前端(172.16.249.159)使用的为http协议做反代的(2、(a)这个示例),
构建步骤:
(1) 各tomcat节点配置使用deltamaanager:在<Engine>或<Host>字段中,加入下面内容
我们在自己定义的Host中复制下面这些内容到tomcat配置文件中,(这些内容在http://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html中)
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<ManagerclassName="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<ChannelclassName="org.apache.catalina.tribes.group.GroupChannel"> <MembershipclassName="org.apache.catalina.tribes.membership.McastService"
address="228.0.1.7"
port="45564"
frequency="500"
dropTime="3000"/> <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/> <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender> <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/> <ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
停掉tomcat服务,然后复制上面内容,修改如下,
另一个节点同样停掉tomcat服务,复制上面内容,并修改下
(2) 为需要使用session cluster的webapps开启sessiondistribution的功能:
WEB-INF/web.xml中添加
<distributable/>
复制/etc/tomcat/目录下的web.xml到/data/webapps/ROOT/WEB-INF/目录下,然后修改web.xml,在最后这个</web-app>前加入<distributable/>,另一个节点做同样的操作
复制这个文件到另一个节点上
scp /data/webapps/ROOT/WEB-INF/web.xml172.16.249.112:/data/webapps/ROOT/WEB-INF/
然后启动tomcat
访问测试
可以看到Session ID没有变,可以看到做成功了
这样session cluster就做好了
然后修改前端(172.16.249.159)的,修改代理的模式,使用ajp和mod_jk模式,都可以实现,会话绑定,前端使用nginx做代理,也可以实现会话绑定,这里就不再演示了(注意:使用其他模式时,记得把刚做的会话绑定要去掉)
因为这是tomcat的session cluster 跟前端的负载均衡器没有关系,
示例:构建session server
需要使用memcached,下面介绍下memcache的一些知识
memcached的特点:
协议简单
基于libevent事件处理
基于内存完成数据存储:LRU
memcached互不通信的集群:分布式
首先要安装memcached(yum installmemcached)
通过配置/etc/sysconfig/memcached这个文件,来对memcached传递一些参数,如果要编辑memcached的一些特性,就需要编辑这个文件(/etc/sysconfig/memcached)
直接启动(systemctl startmemcached.service)就可以了,监听在tcp和udp的11211端口上
memcached是旁挂式缓存:
一半在客户端;一半在服务端
memcached在内存中的存储方式:
slab allocation机制:整理内存以进行复用
Page: 分配给slab用于再次分割为chunk的内存空间;
chunk:用于缓存缓存对象的空间;
slab class:特定大小的chunk组合而成的组;
memcached还自带一个状态查看与管理工具: /usr/bin/memcached-tool,可以查看现在memcache中的状态信息
这些字段的含义:
#:slab class的编号;
Item_size:Chunk大小;
Max_age:缓存对象的生存时间;
Pages:分配给slab内存页数;
Count:slab内的记录数;
Full?:slab内是否仍有空闲chunk;
下面用实例实现让tomcat的会话信息保存在memcache中,实现session server
memcached-session-manager项目地址:
http://code.google.com/p/memcached-session-manager/
下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。(看自己使用的tomcat是什么版本,就下载什么版本)
memcached-session-manager-${version}.jar
memcached-session-manager-tc${6,7,8}-${version}.jar
spymemcached-${version}.jar
msm-javolution-serializer-${version}.jar
javolution-${version}.jar
后端tomcat节点上,做如下操作:
把这些文件下载到这个目录下/usr/share/tomcat/lib/
把刚才我们在tomcat配置文件中加入的<Cluster></Cluster>这一段里面的内容删掉,然后分别在两个tomcat上的我们自己定义的Host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.249.159:11211,n2:172.16.249.112:11211" failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
两个节点都做这样的操作
然后还要把tomcat配置文件中的,Engine字段里的jvmRoute去掉
另一个节点的tomcat配置文件中的,Engine字段里的jvmRoute去掉
memcachedNodes写入的是开启memcached服务的主机的地址,一个是172.16.249.159 172.16.249.112 ,memcached不需要做修改,直接安装然后启动就行了
然后把我们在/data/webapps/ROOT/WEB-INF/目录中的web.xml文件删掉,两个节点
然后重新启动tomcat服务,
访问测试
可以看到,负载均衡了,session ID也没有变
这样使用memcached做session server 就做好了
本文出自 “10520982” 博客,请务必保留此出处http://10530982.blog.51cto.com/10520982/1709352
Tomcat的基础知识和一些应用,session cluster和session server
标签:使用nginx和httpd 反代到tomcat的实现 以及会话绑定 session cluster 和使用memcached实现session server
原文地址:http://10530982.blog.51cto.com/10520982/1709352