tomcat服务器相关介绍一
一、Tomcat是什么Tomcat是Apache在符合J2EE的JSP、Servlet标准下开发的一个JSP服务器,tomcat侧重于servlet引擎,如果以standalone方式运行,可以作为web服务器来使用,支持JSP;tomcat是由java语言开发的,需要在java虚拟机上进行工作。
二、Tomcat的常见的组件
服务器:ServerTomcat的一个实例,通常一个JVM只能包含一个Tomcat实例服务:Service一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器连接器:Connector负责连接客户端请求至Servlet容器内的Web应用程序;默认端口为http协议的8080;ajp协议的8009;https的8443引擎:Engine检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端虚拟主机:Host类似于apache的虚拟主机上下文:Context 配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置
三、Tomcat的配置文件说明
server.xmlTomcat的主配置文件,包含Service, Connector, Engine,Valve, Hosts主组件的相关配置信息;web.xml遵循Servlet规范标准的配置文件,用于配置servletcatalina.policyJava相关的安全策略配置文件catalina.propertiesTomcat内部package的定义及访问相关的控制tomcat-users.xml 认证时用到的相关角色、用户和密码等信息;
Tomcat自带的manager默认情况下会用到此文件
logging.properties日志记录器相关的配置信息
四、Tomcat简单的操作、基于nginx和apache的反向代理实现
前提:在centos7上安装tomcat软件包;并启动,测试访问!
准备:2台centos7虚拟主机,node1:172.16.116.231 ; node2:172.16.116.232
# yum install -y tomcat tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp
# systemctl start tomcat
# # systemctl start tomcat.service
# ss -tanl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 1 ::ffff:127.0.0.1:8005 :::*
LISTEN 0 100 :::8009 :::*
LISTEN 0 100 :::8080 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::* 4.1、部署webapp
deploy:将webapp的源文件放置于目标目录、配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp; 将其特有类通过class loader装载至tomcat;可以自动部署和手动部署,这里介绍手动部署中的热部署,使用Tomcat自带的manager工具
# cd /etc/tomcat
# vim tomcat-users.xml
# systemctl restart tomcat
设置完成后,可以使用tomcat用户名和对应的密码访问Server Status|Manager App|Host Manager
4.2、Host定义
# vim server.xml //编辑server.xml文件
//添加node1虚拟主机
//定义日志格式
# mkdir -pv /web/{logs,webapps} //提供测试页面
Tomcat1 on node1
Tomcat1.node1.com
Session ID
Created on
~
windows设置hosts文件: 172.16.116.231 node1http://s3.运维网.com/wyfs02/M01/74/F8/wKiom1YvevyR7bASAAEwWccmUto900.jpg
4.3、修改默认虚拟主机的方法
# vim /etc/tomcat/server.xml
//defaultHost设置为默认的host即可
4.4、LNT实现方法(nginx反向代理用户请求至tomcat)
# yum install -y nginx //在node2上安装nginx
# vim /etc/nginx/nginx.conf //编辑nginx配置文件,加入下面一句
location / {
proxy_pass http://node1:8080/ //将客户端的所有请求都反向代理至node1
}
//如果想动静分离,静态请求由nginx响应,动态请求由node1响应,需要进行下面的修改即可
location ~* \.(jsp|do)$ {
proxy_pass http://node1:8080/ //动静分离
}http://s3.运维网.com/wyfs02/M02/74/F6/wKioL1Yvg9LRzQ9xAAE5E2lu2tU115.jpg
http://s3.运维网.com/wyfs02/M00/74/F8/wKiom1Yvg5-TeC_bAAEtwWkQAbg961.jpg
4.5、LAT实现方法(apache反向代理用户请求至tomcat)
准备工作;编辑 /etc/httpd/conf/httpd.conf将中心主机的DocumentRoot注释
4.5.1、mod_proxy_http
# cd /etc/httpd/conf.d/
# vim mod_proxy_http.conf
ServerName node2 //虚拟主机名
ProxyVia On //是否在响应头部加入via,即代理的主机名
ProxyRequests Off //关闭正向代理
ProxyPreserveHost On
Require all granted //允许所有主机访问
ProxyPass / http://node1:8080/
ProxyPa***everse / http://node1:8080/ //ProxyPa***everse作用就是反向代理
Require all granted
http://s3.运维网.com/wyfs02/M02/74/F6/wKioL1YvilPST3qHAANm3YrNr6U616.jpg
4.5.2、mod_proxy_ajp
AJP(Apache JServ Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过 TCP连接 和 SERVLET容器 连接
# vim mod_proxy_ajp.conf
ServerName node2
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
Require all granted
ProxyPass / ajp://node1:8009/
ProxyPa***everse / ajp://node1:8009///将协议和端口改为ajp和8009即可
Require all granted
//测试没问题,就不截图了~~
4.5.3、mod_jk
mod_jk 简称JK,是Apache服务器的一个可插入模块,用以为Apache提供处理JSP/Servlet的能力。mod_jk实质上是Apache与Tomcat的连接器,并附带提供集群和负载均衡的功能。
apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,用于编译一个或多个源程序或目标代码文件为动态共享对象,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。
(1) mod_jk:额外编译安装
# yum groupinstall "Development tools"
# cd tomcat-connectors-1.2.40-src/native
# yum install -y httpd-devel
# which apxs
/usr/bin/apxs
# ./configure --with-apxs=/usr/bin/apxs
#make && make install
(2)编辑mod_jk的模板配置文件
# vim mod_jk.conf
LoadModulejk_modulemodules/mod_jk.so //让httpd加载jk模块
JkWorkersFile/etc/httpd/conf.d/workers.properties //jk的worker文件
JkLogFilelogs/mod_jk.log //日志文件
#JkLogLeveldebug
JkMount/*Tomcat1
JkMount/status/stat1
(3)workers配置文件:workers.properties
# vim workers.properties
worker.list=Tomcat1,stat1
worker.Tomcat1.port=8009
worker.Tomcat1.host=172.16.116.231
worker.Tomcat1.type=ajp13 //mod_jk只能使用ajp13协议
worker.Tomcat1.lbfactor=1 //权重
worker.stat1.type = status //这个页面最好加入用户认证 http://s3.运维网.com/wyfs02/M00/74/F6/wKioL1YvlrmQwnhzAAHeiNOSnT4092.jpg
五、tomcat 集群;实现session会话保持的3种方法介绍
5.1、基于session会话绑定实现方法,nginx和apache测试!
在原来的基础上再加入一台虚拟机做反向代理使用;node3:172.16.116.233
5.1.1、nginx负载均衡至后端tomcat方法;基于session会话绑定实现
node1: 172.16.116.231 //配置tomcat1;修改并加入虚拟主机node1
# vim /etc/tomcat/server.xml
node2: 172.16.116.232 //配置tomcat2;修改并加入虚拟主机node2,
# vim /etc/tomcat/server.xml
node3: 172.16.116.233 //配置nginx负载均衡的反向代理
# vim /etc/nginx/nginx.conf
upstream tomcatservs { //在http段加入upstream上游服务器
ip_hash ; //源地址hash,将同一源地址的请求始终定向至某一上游服务器
server node1:8080; //达到session会话绑定的目的
server node2:8080;
}
location / { //在server段中加入反向代理
proxy_pass http://tomcatservs/
}
5.1.2、apache负载均衡至后端tomcat方法;基于session会话绑定实现
通过apache3种反向代理的方式进行测试
apache:tomcat mod_proxy
mod_proxy_http
mod_proxy_balancer
http connector //http协议连接器 mod_proxy
mod_proxy_ajp
mod_proxy_balancer
ajp connector //ajp协议连接器
mod_jkajp connector //ajp协议连接器
▲▲▲httpd负载均衡集群使用到的选项总结▲▲▲
lbfactor表示:后台服务器负载到由Apache发送请求的权值,该值为1到100之间的任何值。
BalancerMember:负载均衡集群中的成员
lbmethod表示:负载载均衡策略。
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)
ProxyPass表示:所有请求都会重定向到balancer://lbcluster1/处理。balancer是内置负载。
ProxyPa***everse表示:反向代理,也就是将所有的请求反向代理到负载均衡后的应用url路径中。
stickysession表示:进行Session复制使用
①mod_proxy_http 、http connector
node1 : 172.16.116.231
//Engine加入jvmRoute标识
node2 : 172.16.116.232
//Engine加入jvmRoute标识
node3 : 172.16.116.233
# vim mod_proxy_http.conf
header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
BalancerMember http://172.16.116.231:8080 loadfactor=1 route=Tomcat1
BalancerMember http://172.16.116.232:8080 loadfactor=1 route=Tomcat2
ProxySet stickysession=ROUTEID //根据routeid做session绑定
ServerName node3
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
Require all granted
ProxyPass / balancer://lbcluster1/ //注意,要使用balancer
ProxyPa***everse / balancer://lbcluster1/
Require all granted
http://s3.运维网.com/wyfs02/M02/74/F9/wKioL1YwNADS_qYKAAEi0qiSvYg900.jpg
②mod_proxy_ajp、ajp connector
# vim mod_proxy_ajp.conf //只需修改这个地方,其它不用修改即可实现
BalancerMember ajp://172.16.116.231:8009 loadfactor=1 route=Tomcat1
BalancerMember ajp://172.16.116.231:8009 loadfactor=1 route=Tomcat1
③mod_jk、ajp connector
# vim mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile/etc/httpd/conf.d/workers.properties //集群worker相关配置
JkLogFilelogs/mod_jk.log
JkLogLevelerror
JkMount/*lbcluster1
JkMount/status/stat1
# vim workers.properties
worker.list = lbcluster1,stat1 //worker列表
worker.Tomcat1.type = ajp13 //Tomcat1是node1节点上的运行tomcat的jvm标识
worker.Tomcat1.host = 172.16.116.231 //ip或主机名都可以
worker.Tomcat1.port = 8009
worker.Tomcat1.lbfactor = 1
worker.Tomcat2.type = ajp13 //Tomcat2是node2节点上的运行tomcat的jvm标识
worker.Tomcat2.host = 172.16.116.232 //ip或主机名都可以
worker.Tomcat2.port = 8009
worker.Tomcat2.lbfactor = 1 //权重
worker.lbcluster1.type = lb
worker.lbcluster1.sticky_session = 0 //是否绑定session会话;0为不绑定,1为绑定
worker.lbcluster1.balance_workers = Tomcat1, Tomcat2 //lbcluster1集群成员
worker.stat1.type = status
5.2、基于session 集群的方法,也就是session共享
session manager:会话管理器;常用的管理器有4种
StandardManager
标准会话管理器
PersistentManager
持久会话管理器
FileStore :文件存储,可以存在nfs服务器上
JDBC :基于jdbc存储在后端的关系型数据库中,如mysql
DeltaManager Manager用来在节点间拷贝Session,默认使用DeltaManager,
DeltaManager采用的一种all-to-all的工作方式,即集群中的节点会把
Session数据向所有其他节点拷贝,而不管其他节点是否部署了当前应用
BackupManager
备用会话管理器
当集群中的节点数量很多并且部署着不同应用时,可以使用
BackupManager,BackManager仅向部署了当前应用的节点拷贝Session
这里主要介绍DeltaManager的实现方法:
前端的node3负载均衡的相关配置不需要改变,使用上述3种方式都可以,只需要在tomcat节点上修改;node1:172.16.116.231 ; node2:172.16.116.232 需要做如下的修改 ;根据官方文档实现
http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
# mkdir /web/webapps/ROOT/{classes,lib,META-INF,WEB-INF} -pv
# cp /usr/share/tomcat/webapps/ROOT/WEB-INF/web.xml /web/webapps/ROOT/WEB-INF/
页:
[1]