tomcat应用及tomcat+apache负载均衡,集群

一、实验前准备
1.所需软件


2.需要用到的主机
node1:172.16.133.11
node2:172.16.133.12
rs1:172.16.133.1
二、tomcat+apache实战
1.tomcat安装及初步认识
Tomcat不是一个完整意义上的Jave EE服务器,它甚至都没有提供对哪怕是一个主要Java EE API的实现;但由于遵守apache开源协议,tomcat却又为众多的java应用程序服务器嵌入自己的产品中构建商业的java应用程序服务器,如JBoss和JOnAS。
尽管Tomcat对Jave EE API的实现并不完整,然而很企业也在渐渐抛弃使用传统的Java EE技术(如EJB)转而采用一些开源组件来构建复杂的应用。这些开源组件如Structs、Spring和Hibernate,而Tomcat能够对这些组件实现完美的支持。
(1).tomcat的初次使用
node1:先安装jdk
rpm -ivh jdk-7u5-linux-i586.rpm
修改环境变量
 

  
  
  
  
  1. vim /etc/profile  
  2.     JAVA_HOME=/usr/java/jdk1.7.0_05  
  3.     PATH=$JAVA_HOME:$PATH  
  4.     export JAVA_HOME PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC  
  5. tar xf apache-tomcat-7.0.29.tar.gz -C /usr/local 
  6. cd /usr/local 
  7. ln -sv apache-tomcat-7.0.29/ tomcat  
  8. cd tomcat/bin  
  9. ./version.sh  

 

可以查看到,我们当前系统的内核,还有jdk的版本,tomcat的安装路径,tomcat的实例路径等
./catalina.sh configtest检查一下配置文件
./catalina.sh start启动tomcat
从ie中访问http://172.16.133.11:8080,可以进入系统自带的首页


(2).tomcat的第一个小实例
下面我们自己做个简单的jsp页面进行测试
 

  
  
  
  
  1. cd  
  2. mkdir test  
  3. cd test/  
  4. mkdir -pv WEB-INF/{lib,classes}  
  5. vim index.jsp  
  6.     <%@ page language="java" %>  
  7.     <html>  
  8.         <head>  
  9.             <title>tomcatqinqin</title>  
  10.         </head>  
  11.         <body>  
  12.             <h2><font color="red">tomcat in www.qinqin.com</font></h2>  
  13.             <% out.println("hello world!"); %>  
  14.         </body>  
  15.     </html>  
  16. cd  
  17. cp -r test/ /usr/local/tomcat/webapps/  
  18. /usr/local/tomcat/bin/catalina.sh stop  
  19. /usr/local/tomcat/bin/catalina.sh configtest  
  20. /usr/local/tomcat/bin/catalina.sh start  

然后在ie中访问http://172.16.133.11:8080/test


2.tomcat深入
(1).tomcat路径别名使用
tomcat的配置文件server.xml在/usr/local/tomcat/conf中
他的Context组件提供该功能
 

  
  
  
  
  1. mkdir /www/webapps -pv  
  2. mv /usr/local/tomcat/webapps/test/ /www/webapps/  
  3. vim /usr/local/tomcat/conf/server.xml  

在host标签中,加入一行,注意不要加到注释行里面了(<!-- -->这样的是注释行)
 

  
  
  
  
  1. <Context path="/test" docBase="/www/webapps/test" reloadable="true" />  
  2. /usr/local/tomcat/bin/catalina.sh stop  
  3. /usr/local/tomcat/bin/catalina.sh configtest  
  4. /usr/local/tomcat/bin/catalina.sh start  

(2).tomcat虚拟主机的使用
tomcat的host组件,在server.xml中的host标签
这里我们实验在系统自带的host标签前,新定义一个host标签
 

  
  
  
  
  1. vim /usr/local/tomcat/conf/server.xml  
  2.       <Host name="qinqin.magedu.com" appBase="/www/webapps/jcenter" unpackWARs="true" autoDeploy="true">  
  3.           <Context path="" docBase="/www/webapps/test" reloadable="true" />  
  4.           <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
  5.                prefix="test_access_log." suffix=".log" 
  6.                pattern="%h %l %u %t &quot;%r&quot; %s %b" />  
  7.       </Host>  
  8. /usr/local/tomcat/bin/catalina.sh stop  
  9. /usr/local/tomcat/bin/catalina.sh configtest  
  10. /usr/local/tomcat/bin/catalina.sh start   

然后就可以在网页中访问http://qinqin.magedu.com:8080


(3).tomcat的管理界面
①.manager
在tomcat的主页http://172.16.133.11:8080中,点击 Manager App按钮,会提示输入帐号,密码,然后点击取消
然后在弹出的错误页面中,我们可以看到,manager的详细设置,和所可以使用的角色都是哪些,分别代表着什么


要定义在tomcat-users.xml中的<tomcat-users>标签中
 

  
  
  
  
  1. vim /usr/local/tomcat/conf/tomcat-users.xml  
  2.     <role rolename="manager-gui"/>  
  3.     <user username="tomcat" password="tomcat" roles="manager-gui" />  
  4. /usr/local/tomcat/bin/catalina.sh stop  
  5. /usr/local/tomcat/bin/catalina.sh configtest  
  6. /usr/local/tomcat/bin/catalina.sh start   

重新返回到主页面,点击Manager App页面,输入帐号tomcat,密码tomcat,即可进入,可以看到,里面有我们刚定义的test页面


 

②.host-manager
在tomcat的主页http://172.16.133.11:8080中,点击 Host Manager按钮,会提示输入帐号,密码,然后点击取消


然后在弹出的错误页面中,我们可以看到,host-manager的详细设置,和所可以使用的角色都是哪些,分别代表着什么
 

  
  
  
  
  1. vim /usr/local/tomcat/conf/tomcat-users.xml  
  2.     <role rolename="admin-gui"/>  
  3.     <user username="redhat" password="redhat" roles="admin-gui" />  
  4. /usr/local/tomcat/bin/catalina.sh stop  
  5. /usr/local/tomcat/bin/catalina.sh configtest  
  6. /usr/local/tomcat/bin/catalina.sh start   

重新返回到主页面,点击Host Manager输入帐号密码,即可进入,这里host-manager和manager的帐号名不能一样


可以看到我们刚才添加的虚拟主机qinqin.magedu.com,也可以从这个web页面添加新的
3.tomcat+apache
apache的安装请见:http://5142926.blog.51cto.com/5132926/921873
不过这里要注意的是,在编译安装httpd时,./configure要在后面添加这几项--enable-proxy --enable-proxy-http --enable-proxy-ajp
即:
 

  
  
  
  
  1. ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util  --enable-proxy --enable-proxy-http --enable-proxy-ajp  

配置apache加载相应的模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
(1).反向代理
node1:
注释掉/etc/httpd/httpd.conf中的DocumentRoot
启动虚拟主机
Include /etc/httpd/extra/httpd-vhosts.conf
①.基于proxy-http
 

  
  
  
  
  1. <VirtualHost *:80>  
  2. ProxyPass /test http://172.16.133.11:8080/test  
  3. ProxyPassReverse /test http://172.16.133.11:8080/test  
  4. ProxyVia On 
  5. </VirtualHost>  

在网页中打开http://172.16.133.11/test


②.基于基于proxy-ajp
 

  
  
  
  
  1. <VirtualHost *:80>  
  2. ProxyPass /test ajp://172.16.133.11:8009/test  
  3. ProxyPassReverse /test ajp://172.16.133.11:8009/test  
  4. ProxyVia On 
  5. </VirtualHost>  

然后为了防止浏览器缓存,换个浏览器打开http://172.16.133.11/test


(2).负载均衡
node2:配置同node1
修改node2中test的index.jsp的内容为
 

  
  
  
  
  1. <%@ page language="java" %>  
  2. <html>  
  3.     <head>  
  4.         <title>tomcatb</title>  
  5.     </head>  
  6.     <body>  
  7.         <h2><font color="red">tomcat in www.magedu.com</font></h2>  
  8.         <% out.println("hello world!"); %>  
  9.   <table align="centre" border="1">  
  10.           <tr>  
  11.             <td>Session ID</td>  
  12.             <td><%= session.getId() %></td>  
  13.           </tr>  
  14.           <tr>  
  15.             <td>Created on</td>  
  16.             <td><%= session.getCreationTime() %></td>  
  17.           </tr>  
  18.         </table>  
  19.     </body>  
  20. </html>  

node1:修改node1中test的index.jsp的内容为
 

  
  
  
  
  1. <%@ page language="java" %>  
  2. <html>  
  3.     <head>  
  4.         <title>tomcata</title>  
  5.     </head>  
  6.     <body>  
  7.         <h2><font color="red">tomcat in www.magedu.com</font></h2>  
  8.         <% out.println("hello world!"); %>  
  9.   <table align="centre" border="1">  
  10.           <tr>  
  11.             <td>Session ID</td>  
  12.             <td><%= session.getId() %></td>  
  13.           </tr>  
  14.           <tr>  
  15.             <td>Created on</td>  
  16.             <td><%= session.getCreationTime() %></td>  
  17.           </tr>  
  18.         </table>  
  19.     </body>  
  20. </html>  

①基于mod_proxy
为了以后方便基于mod_proxy和基于mod_jk的切换,这里我们写到虚拟主机的配置文件中
开启Include /etc/httpd/extra/httpd-vhosts.conf
并注释掉DocumentRoot
修改vhost配置文件
 

  
  
  
  
  1. vim /etc/httpd/extra/httpd-vhosts.conf  
  2.    ProxyRequests Off 
  3.    <proxy balancer://lbcluster1>  
  4.      BalancerMember ajp://172.16.133.11:8009 loadfactor=1 route=TomcatA  
  5.      BalancerMember ajp://172.16.133.12:8009 loadfactor=1 route=TomcatB  
  6.    </proxy>  
  7.     ServerAdmin [email protected]  
  8.     ServerName qinqin.magedu.com  
  9.     ProxyPass / balancer://lbcluster1/ stickysession=jsessionid  
  10.     ProxyPassReverse / balancer://lbcluster1/   

 

②基于mod_jk
配置apache通过mod_jk模块与Tomcat连接
 

  
  
  
  
  1. tar xf tomcat-connectors-1.2.37-src.tar.gz  
  2. cd tomcat-connectors-1.2.37-src/native/  
  3. ./configure --with-apxs=/usr/local/apache/bin/apxs  
  4. make && make install  

apache要使用mod_jk连接器,需要在启动时加载此连接器模块。为了便于管理与mod_jk模块相关的配置,这里使用一个专门的配置文件/etc/httpd/extra/httpd-jk.conf来保存相关指令及其设置。其内容如下:
 

  
  
  
  
  1. vim /etc/httpd/extra/httpd-jk.conf  
  2.    LoadModule  jk_module  modules/mod_jk.so  
  3.    JkWorkersFile  /etc/httpd/extra/workers.properties  
  4.    JkLogFile  logs/mod_jk.log  
  5.    JkLogLevel  debug  
  6.    JkMount  /*  TomcatA  
  7.    JkMount  /status/  stat1  

然后在/etc/httpd/httpd.conf中添加(为了方便,最好添加在Include /etc/httpd/extra/httpd-vhosts.conf下面)
Include  /etc/httpd/extra/httpd-jk.conf
对于apache代理来说,每一个后端的Tomcat实例中的engine都可以视作一个worker,而每一个worker的地址、连接器的端口等信息都需要在apache端指定以便apache可以识别并使用这些worker。约定俗成,配置这些信息的文件通常为workers.properties,其具体路径则是使用前面介绍过的JkWorkersFile指定的,在apache启动时,mod_jk会扫描此文件获取每一个worker的配置信息。比如,我们这里使用/etc/httpd/extra/workers.properties。
workers.properties文件一般由两类指令组成:一是mod_jk可以连接的各worker名称列表,二是每一个worker的属性配置信息。它们分别遵循如下使用语法。
worker.list = < a comma separated list of worker names >
worker. <worker name> .<property> = <property value>
其中worker.list指令可以重复指定多次,而worker name则是Tomcat中engine组件jvmRoute参数的值。如:
worker.TomcatA.host=172.16.133.1
编辑/etc/httpd/extra/workers.properties,添加如下内容:
 

  
  
  
  
  1. worker.list = lbcluster1,stat1  
  2. worker.TomcatA.type = ajp13  
  3. worker.TomcatA.host = 172.16.133.11  
  4. worker.TomcatA.port = 8009  
  5. worker.TomcatA.lbfactor = 5  
  6. worker.TomcatB.type = ajp13  
  7. worker.TomcatB.host = 172.16.133.12  
  8. worker.TomcatB.port = 8009  
  9. worker.TomcatB.lbfactor = 5  
  10. worker. lbcluster1.type = lb  
  11. worker. lbcluster1.sticky_session = 1  
  12. worker. lbcluster1.balance_workers = TomcatA, TomcatB  
  13. worker.stat1.type = status  

在tomcat的主配置文件中的Engine标签中添加
 <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">
node2:
在tomcat的主配置文件中的Engine标签中添加
 <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatB">
然后在网页中打开http://qinqin.magedu.com/status


看以查看到两台节点
然后,我们关掉node2的tomcat在看


(3)集群
node1:
在tomcat的主配置文件server.xml中<Engine>标签后添加如下内容
 

  
  
  
  
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 
  2.                    channelSendOptions="8">  
  3.      <Manager className="org.apache.catalina.ha.session.DeltaManager" 
  4.                     expireSessionsOnShutdown="false" 
  5.                     notifyListenersOnReplication="true"/>  
  6.        <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  7.           <Membership className="org.apache.catalina.tribes.membership.McastService" 
  8.                    address="228.50.10.1"   bind="172.16.133.11"   port="45564" 
  9.                    frequency="500"  dropTime="3000"/>  
  10.              <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
  11.                                 address="172.16.133.11"   port="4000"  autoBind="100" 
  12.                                 selectorTimeout="5000"   maxThreads="6"/>  
  13.              <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  14.                 <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  15.              </Sender>  
  16.        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  17.        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  18.      </Channel>  
  19.      <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 
  20.                         filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>  
  21.      <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  22.      <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
  23.                      tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" 
  24.                     watchDir="/tmp/war-listen/"  watchEnabled="false"/>  
  25.       <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>  
  26.       <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  27. </Cluster>  

同理node2

node1:

然后要注释掉/etc/httpd/httpd.conf中的vhost跟jk,添加一条

  
  
  
  
  1. Include /etc/httpd/extra/httpd-proxy.conf  
  2. vim /etc/httpd/extra/httpd-proxy.conf  
  3. ProxyRequests Off 
  4. <proxy balancer://lbcluster1>  
  5.      BalancerMember ajp://172.16.133.11:8009 loadfactor=10 route=TomcatA  
  6.      BalancerMember ajp://172.16.133.12:8009 loadfactor=10 route=TomcatB  
  7.      ProxySet lbmethod=bytraffic  
  8. </proxy>  
  9. # ProxyPass / balancer://lbcluster1/ stickysession=jsessionid  
  10. ProxyPass /lbmanager !  
  11. ProxyPass /status !  
  12. ProxyPass / balancer://lbcluster1/  
  13. ProxyPassReverse / balancer://lbcluster1/  
  14. ProxyStatus full 
  15.  
  16. <Location /lbmanager>  
  17.     SetHandler balancer-manager  
  18.     Require all granted  
  19. </Location>  
  20.  
  21. <Location /status>  
  22.     SetHandler server-status  
  23.     Require all granted  
  24. </Location>  
  25.  

重启httpd和tomcat,打开网页访问http://172.16.133.11

 

 

可以看到session id是不变的,另外我在proxy.conf中还添加了lbmanager,可以提供对集群的管理

(4).持续会话
①.标准会话管理器(StandardManager)
<Manager className="org.apache.catalina.session.StandardManager" maxInactiveInterval="7200"/>
默认保存于$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/下的SESSIONS.ser文件中。
maxActiveSessions:最多允许的活动会话数量,默认为-1,表示不限制;
maxInactiveInterval:非活动的会话超时时长,默认为60s;
pathname:会话文件的保存目录;
②.持久会话管理器(PersistentManager)
将会话数据保存至持久存储中,并且能在服务器意外中止后重新启动时重新加载这些会话信息。持久会话管理器支持将会话保存至文件存储(FileStore)或JDBC存储(JDBCStore)中。
<Manager className="org.apache.catalina.session.PersistentManager"
 saveOnRestart="true">
 <Store className="org.apache.catalina.session.FileStore"
  directory="/data/tomcat-sessions"/>
</Manager>
每个用户的会话会被保存至directory指定的目录中的文件中,文件名为<session id>.session,并通过后台线程每隔一段时间(checkInterval参数定义,默认为60秒)检查一次超时会话。

你可能感兴趣的:(apache,tomcat,linux,集群,负载均衡)