第十九周作业

1.描述tomcat的架构

tomcat服务器是一种Servlet/jsp容器,更实质性的说是Servlet容器,因为jsp最终还是被编译成servlet来执行的。而对于servlet来说,其最长见的用途是扩展java web服务器功能,为来自web客户的请求提供服务。它完全运行在java虚拟机上。由于它的运行在服务器端,因此他的运行不依赖于浏览器。

tomcat作为servlet容器,负责处理客户请求,把请求传给servlet并把结果返回给客户。servlet容器与servlet之间的接口是由java servlet api定义的,在此api中定义了servlet的各种方法,这些方法在servlet生命周期的不容阶段被servlet容器调用,servlet api还定义了servlet容器传递给servlet的对象类,如请求对象ServletRequest和相应对象ServletResponse。

tomcat服务器是由一系列可配置的组件构成,其中核心组件是Catalina Servlet容器,它是所有其他tomcat组件的顶层容器。tomcat的组件可以在conf/server.xml文件当中进行配置,每个tomcat组件在server.xml文件中进行配置,每个tomcat组件在server.xml文件中对应一种配置元素。

2.详细解释Tomcat的配置文件及配置文件中的参数所代表的含义。

/bin:脚本、批处理,jar文件等启动tomcat文件

/conf:存放tomcat服务器全局配置文件

server.xml: 核心配置文件;

web.xml: 默认部署应用描述符;部署,将一个web应用程序所依赖到的类装进JVM;

context.xml:默认为上下文提供配置文件;

 tomcat-users.xml:为用户认证文件,Tomcat启动后会将这个文件读进内存中完成账号和密码的检测认证,所以这个文件的安全性很重要;

   catalina.policy来定义Tomcat自身的安全和资源授权策略,如定义通过互联网访问时,哪些资源用户可以访问哪些资源用户不能访问;哪些资源能被装载,哪些资源不能被装载等等

   catalina.properties:定义应用程序自身属性;如所使用的内存大小,所使用的字符串缓冲池的大小,你的server loader加载器是什么,等等

   logging.properties:用来定义日志级别,以及日志文件路径

/lib:库文件路径;

/logs:日志目录;

/temp:临时目录;

/webapps:Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录

/work:存放JSP编译后产生的class文件

server.xml文件参数详解:

<Server> 

       <Listener /> 

      <GlobaNamingResources> 

      </GlobaNamingResources> 

      <Service> 

            <Connector /> 

            <Engine> 

                <Logger /> 

                <Realm /> 

                     <host> 

                             <Logger /> 

                             <Context /> 

                     </host> 

           </Engine> 

     </Service> 

</Server>

<\Server>元素

它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义.它包含一个元素.并且它不能做为任何元素的子元素.

<\Connector>元素

由Connector接口定义.元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.

<\Engine>元素

每个Service元素只能有一个Engine元素.处理在同一个中所有元素接收到的客户请求.由org.apahce.catalina.Engine接口定义.

<\Host>元素

它由Host接口定义.一个Engine元素可以包含多个元素.每个的元素定义了一个虚拟主机.它包含了一个或多个Web应用.

<\Context>元素

它由Context接口定义.是使用最频繁的元素.每个可以包含多个元素.每个web应用有唯一的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个

<Server port=”8005″ shutdown=”SHUTDOWN”>  tomcat管理接口;负责监听关闭tomcat的请求

<Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” />  监听组件;用于集群调试

<GlobalNamingResources>  全局命名资源,定义了用户认证

<Engine name=”Catalina” defaultHost=”localhost”>  引擎名及默认主机

<Realm className=”org.apache.catalina.realm.LockOutRealm”>  定义用户访问的密码;默认没定义用户密码,所以都能访问;

<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs” …… />   定义访问日志


3.配置apache通过mod_proxy模块与tomcat连接的详细过程

apache服务器:192.168.31.23

Tomcat1服务器:192.168.31.233

Tomcat2服务器:192.168.31.26

一、tomcat服务器先安装tomcat 、jdk并配置环境变量

tar -zxvf jdk-8u20-linux-x64.tar.gz -C /usr/local/     解压jdk包

cd /usr/local

ln -sv  jdk1.8.0_20    jdk

vim /etc/profile.d/java.sh   配置java环境变量

JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin

source  /etc/profile.d/java.sh  读取环境变量


tar -zxvf apache-tomcat-7.0.56.tar.gz  -C /usr/local/

cd  /usr/local

ln -sv apache-tomcat-7.0.56/ tomcat 

vim /etc/profile.d/catalina.sh 

CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin

source /etc/profile.d/catalina.sh 

二、启动tomcat,并访问默认网站

catalina.sh start

ss  -tnl    看8080端口 是否起来

第十九周作业


三、安装并配置apache反向代理服务

yum  -y install httpd

vim /etc/httpd/conf/httpd.conf

# DocumentRoot “/var/www/html”   注释掉默认网页存放位置

在conf.d目录下新建虚拟主机

vim /etc/httpd/conf.d/http-proxy.conf 

<VirtualHost  *:80>

  ProxyVia On

  ProxyPreserveHost  On

  ProxyRequests Off
  ProxyPass  /  http://192.168.31.233:8080/
  ProxyPassReverse / http://192.168.31.233:8080/
  <Proxy *>
    Require all granted
  </Proxy>
  <Location / >
     Require all granted
  </Location>
</VirtualHost>

四、重启apache 访问测试成功

systemctl restart httpd.service

第十九周作业


4.配置基于mod_jk的负载均衡

mod_jk是基于AJP协议的;通过mod_jk模块与tomcat连接;需要额外的软件包进行编译

一、apache服务器安装tomcat连接器 <apxs基于httpd-devel包>

yum -y install httpd-devel

tomcat-connectors-1.2.42-src.tar.gz

tar -zxvf  tomcat-connectors-1.2.42-src.tar.gz

cd  /root/tomcat-connectors-1.2.42-src/native

./configure –with-apxs=/usr/bin/apxs  

make && make install  

二、为了区分两个tomcat网页内容,修改tomcat的配置,并增加jvmRoute

tomcat1:

vim /usr/local/tomcat/conf/server.xml

 <Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”TomcatA”>

<Host name=”localhost”  appBase=”/data/webapps”     
            unpackWARs=”true” autoDeploy=”true”>
 <Context path=”” docBase=”myapp” reloadable=”true” />

tomcat2:

vim /usr/local/tomcat/conf/server.xml

 <Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”TomcatB”>

<Host name=”localhost”  appBase=”/data/webapps”     
            unpackWARs=”true” autoDeploy=”true”>
 <Context path=”” docBase=”myapp” reloadable=”true” />


分别在两个tomcat服务器上创建目录及index.jsp文件

mkdir  /data/webapps/myapp/{classes,lib,WEB-INF,META-INF}

tomcat1:

vim  /data/webapps/myapp/index.jsp

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

vim  /data/webapps/myapp/index.jsp

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

三、启动tomcat并访问测试

省略………………………………..


四、配置mod_jk模块实现负载均衡

 vim /etc/httpd/conf/httpd.conf 

# DocumentRoot “/var/www/html”  注释

配置虚拟主机

vim /etc/httpd/conf.d/httpd-jk.conf 

LoadModule jk_module modules/mod_jk.so                                加载mod_jk模块
JkWorkersFile /etc/httpd/conf.d/workers.properties                配置文件位置
JkLogFile logs/mod_jk.log                                                              日志
JkLogLevel debug                                                                            日志级别
JkMount /* lbcluster                                                                       负载均衡器名称
JkMount /jkstatus/ stat1                                                               状态信息

编辑workers.properties配置文件

 vim /etc/httpd/conf.d/workers.properties 

worker.list = lbcluster,stat1
worker.TomcatA.type = ajp13
worker.TomcatA.port = 8009
worker.TomcatA.host = 192.168.31.233
worker.TomcatA.lbfactor = 1
worker.TomcatB.type = ajp13
worker.TomcatB.port = 8009
worker.TomcatB.host = 192.168.31.26
worker.TomcatB.lbfactor = 1
worker.lbcluster.type = lb
worker.lbcluster.sticky_session = 0
worker.lbcluster.balance_workers = TomcatA, TomcatB
worker.stat1.type = status

五、重启apache,并测试

httpd -t

systemctl reload httpd.service

第十九周作业

第十九周作业


5、配置tomcat集群,能够实现用户的session会话保持

DeltaManager实现

原理:是将会话信息同步给集群中其它节点,实现会话复制;

(1).修改tomcat1下的server.xml配置文件

在Engine组件内增加下面这一段

<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster”channelSendOptions=”8″>
<Manager className=”org.apache.catalina.ha.session.DeltaManager” 
expireSessionsOnShutdown=”false” 
notifyListenersOnReplication=”true”/> 
<Channel className=”org.apache.catalina.tribes.group.GroupChannel”> 
<Membership className=”org.apache.catalina.tribes.membership.McastService” 
address=”228.0.0.4“port=”45564″frequency=”500″dropTime=”3000″/> 
<Receiver className=”org.apache.catalina.tribes.transport.nio.NioReceiver” 
address=”192.168.31.233“port=”4000″autoBind=”100″selectorTimeout=”5000″maxThreads=”6″/> 
<Sender className=”org.apache.catalina.tribes.transport.ReplicationTransmitter”> 
<Transport className=”org.apache.catalina.tribes.transport.nio.PooledParallelSender”/> 
</Sender> 
<Interceptor className=”org.apache.catalina.tribes.group.interceptors.TcpFailureDetector”/> 
<Interceptor className=”org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor”/> 
</Channel> 
<Valve className=”org.apache.catalina.ha.tcp.ReplicationValve”filter=”/”/> 
<Valve className=”org.apache.catalina.ha.session.JvmRouteBinderValve”/> 
<Deployer className=”org.apache.catalina.ha.deploy.FarmWarDeployer”tempDir=”/tmp/war-temp/” 
deployDir=”/tmp/war-deploy/”watchDir=”/tmp/war-listen/”watchEnabled=”false”/> 
<ClusterListener className=”org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener”/> 
<ClusterListener className=”org.apache.catalina.ha.session.ClusterSessionListener”/> 
</Cluster>


修改tomcat2下的server.xml

<Cluster className=”org.apache.catalina.ha.tcp.SimpleTcpCluster”channelSendOptions=”8″>
<Manager className=”org.apache.catalina.ha.session.DeltaManager” 
expireSessionsOnShutdown=”false” 
notifyListenersOnReplication=”true”/> 
<Channel className=”org.apache.catalina.tribes.group.GroupChannel”> 
<Membership className=”org.apache.catalina.tribes.membership.McastService” 
address=”228.0.0.4“port=”45564″frequency=”500″dropTime=”3000″/> 
<Receiver className=”org.apache.catalina.tribes.transport.nio.NioReceiver” 
address=”192.168.31.26“port=”4000″autoBind=”100″selectorTimeout=”5000″maxThreads=”6″/> 
<Sender className=”org.apache.catalina.tribes.transport.ReplicationTransmitter”> 
<Transport className=”org.apache.catalina.tribes.transport.nio.PooledParallelSender”/> 
</Sender> 
<Interceptor className=”org.apache.catalina.tribes.group.interceptors.TcpFailureDetector”/> 
<Interceptor className=”org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor”/> 
</Channel> 
<Valve className=”org.apache.catalina.ha.tcp.ReplicationValve”filter=”/”/> 
<Valve className=”org.apache.catalina.ha.session.JvmRouteBinderValve”/> 
<Deployer className=”org.apache.catalina.ha.deploy.FarmWarDeployer”tempDir=”/tmp/war-temp/” 
deployDir=”/tmp/war-deploy/”watchDir=”/tmp/war-listen/”watchEnabled=”false”/> 
<ClusterListener className=”org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener”/> 
<ClusterListener className=”org.apache.catalina.ha.session.ClusterSessionListener”/> 

</Cluster>

(2).此外,所有启用集群功能的web应用程序,其web.xml中都须添加<distributable/>才能实现集群功能。如果某web应用程序没有自己的web.xml,也可以通过复制默认的web.xml至其WEB-INF目录中     Tomcat1  Tomcat2 都有添加

cp /usr/local/tomcat/conf/web.xml  /data/webapps/myapp/WEB-INF/

vim /data/webapps/myapp/WEB-INF/web.xml

增加一行<distributable/>

第十九周作业


3).重启tomcat,并测试会话绑定

catalina.sh  configtest

catalina.sh  stop|start









原创文章,作者:N27_Vicent,如若转载,请注明出处:http://www.178linux.com/79772

(0)
N27_VicentN27_Vicent
上一篇 2017-07-10
下一篇 2017-07-11

相关推荐

  • Linux文件查找工具之find “大宝剑”

    一、文件查找工具常用软件 locate:     locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令…

    Linux干货 2016-03-12
  • 8月9日sed(更新版)

    sed命令及vim基础使用命令 处理文本的工具sed stream editor,行编辑器    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有…

    Linux干货 2016-08-15
  • bash特性及bash脚本编程初步

    终端,附着在终端的接口程序: GUI:KDE, GNome, Xfce CLI:/etc/shells bash zsh fish   bash的特性: 命令行展开:~, {} 命令别名:alias, unalias 命令历史:history 文件名通配:glob 快捷键:Ctrl+a, e, u, k, l 命令补全:$PATH 路径补全: &n…

    Linux干货 2016-11-21
  • Linux基础知识(三)-用户管理组管理,正则grep,文本处理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中 5、取出当前主机的IP…

    Linux干货 2016-10-09
  • Linux磁盘、文件系统管理

    对Linux而言,其哲学思想之一就是一切皆文件,因此Linux之上所有设备的操作都是通过文件接口来实现的,也就是说在访问设备的时候就如同访问一个文件一样,因为他们使用的都是文件系统接口。  设备也分种类,如:     1、块设备:block 其存取单位是“块”,如硬盘    &n…

    Linux干货 2016-08-29
  • 二进制、八进制、十进制、十六进制之间的转换

    二进制、八进制、十进制、十六进制之间的关系:   二进制:0,1 八进制:0,1,2,3,4,5,6,7, 十进制:0,1,2,3,4,5,6,7,8,9 十六进制:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F   二进制与十进制之间的转换: 十进制转二进制:   二进制转十进制:   二进制与八进制…

    2017-04-01

评论列表(1条)

  • 马哥教育
    马哥教育 2017-07-22 21:25

    内容翔实,可以看的出有很认真在做,很赞。