tomcat容器

动态服务器-Java

 

Tomcat:

  Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。

Tomcat目录:

tomcat
  |---bin:存放启动和关闭tomcat脚本

  |---conf:存放不同的配置文件(server.xml和web.xml);
  |---doc:存放Tomcat文档;
  |---lib/japser/common:存放Tomcat运行需要的库文件(JARS);
  |---logs:存放Tomcat执行时的LOG文件;
  |---src:存放Tomcat的源代码;
  |---webapps:Tomcat的主要Web发布目录(包括应用程序示例);
  |---work:存放jsp编译后产生的class文件;

 

 

以下为tomcat简要介绍

1:简要介绍Tomcat安装目录
[root@7 ~]# ll /usr/local/tomcat/
总用量 100
bin:二进制程序脚本目录
conf:配置文件目录
lib:类库目录
LICENSE
logs:日志目录
NOTICE
RELEASE-NOTES
RUNNING.txt
temp:临时文件目录
webapps:应用程序目录
work:工作目录

2:配置文件介绍
[root@7 ~]# ll /usr/local/tomcat/conf/
总用量 216
Catalina
catalina.policy:Tomcat默认策略
catalina.properties:Java属性的配置文件
context.xml:为配置webapp提供默认配置
logging.properties:
server.xml:Tomcat的主配置文件
tomcat-users.xml:认证配置恩家
tomcat-users.xsd:
web.xml:每一个位于webapp都有一个web.xml配置文件,用于配置webapp

3:/usr/local/tomcat/webapps目录介绍
Tomcat自带的应用程序都存放在/usr/local/tomcat/webapps目录中,在Tomcat启动时,会自动读取webapps里面的应用程序
[root@7 ~]# ll /usr/local/tomcat/webapps/
总用量 8
docs
examples
host-manager
manager
ROOT

4:jsp项目默认的文件组织结构(以ROOT应用程序为例)
[root@7 ~]# ll /usr/local/tomcat/webapps/ROOT/
总用量 184
asf-logo-wide.svg
bg-button.png
bg-middle.png
bg-nav-item.png
bg-nav.png
bg-upper.png
favicon.ico:图标
index.jsp:JSP首页文件
RELEASE-NOTES.txt
tomcat.css
tomcat.gif
tomcat.png
tomcat-power.gif
tomcat.svg

当用户访问Tomcat的首页的时候,在页面上有一个 Manager App 的按钮,此功能需要用户在/usr/local/tomcat/conf/tomcat-users.xml目录创建一个用户,且给用户授权为manager-gui角色

 


WEB-INF:定义ROOT应用程序自身的配置,由web.xml定义
META-INF:定义ROOT应用程序的自身配置,由context.xml定义
classes:类库文件
lib:jar包形式的类库文


1:编辑/usr/local/tomcat/conf/tomcat-users.xml文件,在没有注释的内容中添加:
<role rolename="manager-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui" />

2:停止Tomcat应用,在启动Tomcat应用
catalina.sh stop
catalina.sh start

3:再次访问http://192.168.43.11:8080,且点击Manager App按钮,输入tomcat用户名,输入tomcat密码,即可登入

 

当用户访问Tomcat的首页的时候,在页面上有一个 Host Manager 的按钮,此功能需要用户在/usr/local/tomcat/conf/tomcat-users.xml目录创建一个用户,且给用户授权为admin-gui角色


1:编辑/usr/local/tomcat/conf/tomcat-users.xml文件,在没有注释的内容中添加:
<role rolename="admin-gui" />
<user username="tomcat" password="tomcat" roles="admin-gui" />

2:停止Tomcat应用,在启动Tomcat应用
catalina.sh stop
catalina.sh start

3:再次访问http://192.168.43.11:8080,且点击Host Manager按钮,输入tomcat用户名,输入tomcat密码,即可登入

 

创建一个/app 的目录

在目录的下面创建一个文件vi index.js

p

/app
/date1


企业中的tomcat不是运行在root上面
首先先停掉

useradd tomcat

chown -R tomcat.tomcat /usr/local/tomcat
然后登陆普通用户
启动
netstat -lntup

Tomcat配置文件:

我们打开con文件夹可以看到Tomcat的配置文件:

 server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;

 web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;

 tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户  指定角色等将通过编辑此文件实现;

 catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;

 catalina.properties:Tomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;

 logging.properties: Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组  件级别以及日志文件的存在位置等;

 context.xml:所有host的默认配置信息;

 

准备3个虚拟机

第一个安装nginx,第二个安装httpd,tomcat,第三个安装httpd,tomcat


在nginx中的主配置文件中/etc/nginx/nginx.conf

upstream webservers {
server www.uplooking.com:8001;
server www.uplooking.com:8002;
}
轮训调度
proxy_pass http://webservers

在/etc/hosts 文件中
nginx虚拟机对另外两台虚拟机ip+域名+名字 172.16.19.99 node1 www.uplooking.com
nginx -t 检查语法
systemctl start nginx.service 启

动nginx

 

 

netstat -lntup

 

在第二台虚拟机上面
安装httpd,tomcat
关闭中心主机 
<VirtualHost *:8001>

# 指定虚拟主机的主机名
ServerName node.uplooking.com
# 将正向代理关闭
ProxyRequests OFF
# 指定在请求头加上via首部信息
ProxyVia ON
# 指定httpd将客户端请求的虚拟主机名发送给后端的tomcat服务器,能够实现不同的请求发往tomcat中定义的不同的虚拟主机,例如:www.uplooking.com 与 www.home.com都解析到同一个IP地址,那么将会使得tomcat能够识别到底是哪一个host来响应
ProxyPreserveHost ON
# 允许所有的反代
<Proxy *>
Require all granted
</Proxy>
# 将请求反向代理给后端的服务器,一般httpd和tomcat在同一台物理服务器上
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
# 允许所有的客户端访问
<Location />
Require all granted
</Location>

</VirtualHost>


systemctl start httpd


安装tomcat

环境     1:升级系统自带的JDK(也可以使用oracle的JDK)
             yum install -y java-1.8.0-openjdk-devel
 
2:由于Java开发的程序都需要运行在Java环境,因此一般只要是Java开发的程序,在安装JDK的同时,也需要将Java虚拟机导出到环境变量JAVA_HOME中,Java的虚拟机程序:/usr/bin/java
vi /etc/profile.d/java.sh 添加
export JAVA_HOME=/usr/bin
. /etc/profile.d/java.sh

 


1:下载二级制包
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.47/bin/apache-tomcat-8.0.47.tar.gz

2:解压,且创建连接文件
tar xf apache-tomcat-8.0.47.tar.gz -C /usr/local
ln -s /usr/local/apache-tomcat-8.0.47 /usr/local/tomcat

3:编辑/etc/profile.d/tomcat.sh文件,导出CATALINA_BASE(Tomcat的工作目录)境变量
vi /etc/profile.d/tomcat.sh 添加:
CATALINA_BASE=/usr/local/tomcat (CATALINA_BASE是tomcat引用实例的工作目录)
PATH=$CATALINA_BASE/bin:$PATH
export PATH CATALINA_BASE

.  /etc/profile.d/tomcat.sh

4:启动Tomcat
catalina.sh start

5:访问Tomcat的web页面
http://192.168.43.11:8080

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

<Host name="uplooking" appBase="/app"
unpackWARs="true" autoDeploy="true">

7.

cd  /usr/local/tomcat/webapps/

创建  app   创建index.jsp

8.

第三台虚拟机上面安装httpd 
关闭中心站点 listen 8002
<VirtualHost *:8002>

ServerName  www.uplooking.com
ProxyRequests OFF
ProxyVia ON
ProxyPreserveHost ON
<Proxy *>
Require all granted
</Proxy>
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
<Location />
Require all granted
</Location>

</VirtualHost>
systemctl start httpd

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

<Host name="uplooking" appBase="/app"
unpackWARs="true" autoDeploy="true">

7.

cd  /usr/local/tomcat/webapps/

创建  app   创建index.jsp

8.重启访问

 

重新开启三台新的虚拟机

第一台是httpd 第二台是tomcat1第三台是tomcat2

httpd部分(第一台虚拟机)

httpd服务器反代给Tomcat的http协议连接器

1.创建一个httpd的配置文件, /etc/httpd/conf.d/httpd1.conf

# 这个标签相当于Nginx的upstream模块
<proxy balancer://webservers>
# 指定后端调度的主机,loadfactor表示做基于权重的调度
BalancerMember http://192.168.43.10:8080 loadfactor=1
BalancerMember http://192.168.43.11:8080 loadfactor=2
# 指定轮询调度算法
ProxySet lbmethod=byrequests
</proxy>
 
 
# 使用虚拟主机做为反代
<VirtualHost *:80>
 
Servername www.uplooking.com
# 这个指令表示客户端响应报文中会有经过某个主机进行响应的首部,添加一个via首部
Proxyvia on
# 首先关闭正向代理
ProxyRequests OFF
# 这个指令表面,将用户请求的主机名传递到后端主机上去, 这里是www.uplooking.com
ProxyPreserveHost on
# 授权代理的访问权限
<Proxy *>
Require all granted
</Proxy>
# 将所有的请求访问后端的服务器
ProxyPass / balancer://webservers/
# 当后端主机使用rewrite响应代理服务器时,代理服务器会修改响应的IP为自己的IP,从而实现了无论是后端主机直接响应代理请求,还是后端主机通过重定向方式响应代理请求,都会使得客户端的请求能够被后端主机响应到
ProxyPassReverse / balancer://webservers/
# 授权用户的访问权限
<Location />
Require all granted
</Location>
 
# 启用一个负载均衡的管理web界面接口
<Location /balancer-manager>
SetHandler balancer-manager
ProxyPass !
Require all granted
</Location>
</VirtualHost>

第二台第三台和上面一样

 

 

第三个实验

yum安装

1:升级系统自带的JDK(也可以使用oracle的JDK)
yum install -y java-1.8.0-openjdk-devel
 
2:由于Java开发的程序都需要运行在Java环境,因此一般只要是Java开发的程序,在安装JDK的同时,也需要将Java虚拟机导出到环境变量JAVA_HOME中,Java的虚拟机程序:/usr/bin/java
vi /etc/profile.d/java.sh 添加
export JAVA_HOME=/usr/bin
. /etc/profile.d/java.sh

yum install -y tomcat.noarch tomcat-lib.noarch tomcat-admin-webapps.noarch tomcat-webapps.noarch

systemctl start tomcat.service

 

 

tomcat的Java程序的会话保持

第一个虚拟机安装httpd

<proxy balancer://webservers>
# 指定后端调度的主机,loadfactor表示做基于权重的调度
BalancerMember ajp://172.16.19.215:8009 loadfactor=1
BalancerMember ajp://172.16.19.216:8009 loadfactor=2
# 指定轮询调度算法
ProxySet lbmethod=byrequests
</proxy>


# 使用虚拟主机做为反代
<VirtualHost *:80>

Servername www.home.com
# 这个指令表示客户端响应报文中会有经过某个主机进行响应的首部,添加一个via首部
Proxyvia on
# 首先关闭正向代理
ProxyRequests OFF
# 这个指令表面,将用户请求的主机名传递到后端主机上去, 这里是www.uplooking.com
ProxyPreserveHost on
# 授权代理的访问权限
<Proxy *>
Require all granted

</Proxy>
# 将所有的请求访问后端的服务器
ProxyPass / balancer://webservers/
# 当后端主机使用rewrite响应代理服务器时,代理服务器会修改响应的IP为自己的IP,从而实现了无论是后端主机直接响应代理请求,还是后端主机通过重定向方式响应代理请求,都会使得客户端的请求能够被后端主机响应到
ProxyPassReverse / balancer://webservers/
# 授权用户的访问权限
<Location />
Require all granted
</Location>
 
# 启用一个负载均衡的管理web界面接口
<Location /balancer-manager>
SetHandler balancer-manager
ProxyPass !
Require all granted
</Location>
</VirtualHost>

1.vim /etc/tomcat/tomcat-users.xml

<role rolename="manager-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui" />

进入管理界面,    /text    /app      

2.

systemctl restart tomcat.service

3.

mkdir /app

4.vi /app/index.jsp

<html>
<head>
<title>Tomcat1</title>
</head>
 
<body>
<h1>
<font color="red">
Tomcat1.uplooking.com
</font>
</h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("ez.com","ez.com"); %>
<td><%= session.getId() %></td>
</tr>
 
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
 
</body>
</html>

5.

systemctl restart tomcat

6.vim  /etc/tomcat/server.xml 

在  <Engine name="Catalina" defaultHost="localhost">下面添加,改ip换成自己的,多播地址和自己的另外一台虚拟机一样,和别人不一样

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
# Manager在这里是指定Tomcat集群的会话管理器,DeltaManager就是管理器的名称,我们就是调用这个会话管理器实现会话保持功能的
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
# Channel在这里是指定组会话信道,包括Membership:判断集群中节点的关系,是否是Tomcat节点,Receiver:接收其他节点的会话信息,Sender:发送自己的会话信息给集群中的其他节点
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.3.43.4"
port="45564"
# 这里的心跳信息是500毫秒
frequency="500"
# 认为集群中节点宕机的时间为3000毫秒
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
# 接收会话的IP绑定在本机的外网IP
address="192.168.43.10"
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>
# 指定探测器,如果集群中TCP连接端口,那么将不会复制会话信息
<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>

7.

cd  /app

8.

mkdir WEB-INF

9.vi  /app/WEB-INF/web.xml   

在WEB-INF目录里面的web.xml中的任意空白处添加一个<distributable/>元素,即可

10

systemctl restart tomcat

11. /etc/hosts    172.16.19.215   www.uplooking

然后可以访问了,

www.uplooking.com/text

 

第四个实验,讲会话保存至memcached中,此时的架构需要5台虚拟机了

httpd (第一台虚拟机)

# 这个标签相当于Nginx的upstream模块
<proxy balancer://webservers>
# 指定后端调度的主机,loadfactor表示做基于权重的调度
BalancerMember ajp://192.168.43.10:8080 loadfactor=1
BalancerMember ajp://192.168.43.11:8080 loadfactor=2
# 指定轮询调度算法
ProxySet lbmethod=byrequests
</proxy>
 
 
# 使用虚拟主机做为反代
<VirtualHost *:80>
 
Servername www.home.com
# 这个指令表示客户端响应报文中会有经过某个主机进行响应的首部,添加一个via首部
Proxyvia on
# 首先关闭正向代理
ProxyRequests OFF
# 这个指令表面,将用户请求的主机名传递到后端主机上去, 这里是www.uplooking.com
ProxyPreserveHost on
# 授权代理的访问权限
<Proxy *>
Require all granted
</Proxy>
# 将所有的请求访问后端的服务器
ProxyPass / balancer://webservers/
# 当后端主机使用rewrite响应代理服务器时,代理服务器会修改响应的IP为自己的IP,从而实现了无论是后端主机直接响应代理请求,还是后端主机通过重定向方式响应代理请求,都会使得客户端的请求能够被后端主机响应到
ProxyPassReverse / balancer://webservers/
# 授权用户的访问权限
<Location />
Require all granted
</Location>
 
# 启用一个负载均衡的管理web界面接口
<Location /balancer-manager>
SetHandler balancer-manager
ProxyPass !
Require all granted
</Location>
</VirtualHost>

和上面差不多

第二台第三台tomcat ,和上面差不多,在两个节点上面/etc/tomcat/server.xml  中的<host>

元素中添加

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
 
<Context path="/appp" docBase="hello" reloadable="true">
# 启用manager类对象管理session
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
# 指定缓存会话的节点IP memcachedNodes="n1:192.168.43.12:11211,n2:192.168.43.13:11211"
# 指定哪个节点为备用节点
failoverNodes="n1两个memcached中其中一个节点"
# 指定客户端请求的哪些资源不做会话绑定
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
# 指定使用javolution类对象实现session序列化 transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
/>
</Context>

在另外两个节点上面安装memcached,Telnet

[root@7 ~]# telnet 192.168.43.13 11211
Trying 192.168.43.13...
Connected to 192.168.43.13.
Escape character is '^]'.
stats items
STAT items:8:number 1
STAT items:8:age 204
STAT items:8:evicted 0
STAT items:8:evicted_nonzero 0
STAT items:8:evicted_time 0
STAT items:8:outofmemory 0
STAT items:8:tailrepairs 0
STAT items:8:reclaimed 0
STAT items:8:expired_unfetched 0
STAT items:8:evicted_unfetched 0
登录其中一个服务器上面发现没有缓存项的数量,因为是备用节点
[root@7 ~]# telnet 192.168.43.12 11211
Trying 192.168.43.12...
Connected to 192.168.43.12.
Escape character is '^]'.
stats items
END
将主节点下线,再刷新页面,登录到memcached服务器中,发现已经存在缓存项了
 
[root@7 ~]# telnet 192.168.43.12 11211
Trying 192.168.43.12...
Connected to 192.168.43.12.
Escape character is '^]'.
stats items
STAT items:8:number 1
STAT items:8:age 10
STAT items:8:evicted 0
STAT items:8:evicted_nonzero 0
STAT items:8:evicted_time 0
STAT items:8:outofmemory 0
STAT items:8:tailrepairs 0
STAT items:8:reclaimed 0
STAT items:8:expired_unfetched 0
STAT items:8:evicted_unfetched 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2017-10-28 14:10  凉凉家园  阅读(175)  评论(0编辑  收藏  举报