前言
tomcat介绍:
tomcat是一个免费开放源代码的web应用服务器,不是一个完整意义上的Java EE服务器;它甚至都没有提供哪怕对一个主Java EE API的实现,但由于遵守apache开源协议,tomcat却有为众多的java应用程序服务器嵌入自己的产品中构建商业的java应用程序服务器,如JBoss和JOnAS等。tomcat工作在jdk(Java Development Kit)之上;要想使用tomcat必须先安装jdk,jdk分为open jdk和 Oracle jdk,可根据自己的需要选择相应的jdk来实现tomcat实例。
一、tomcat相关件介绍
1、配置文件介绍
sever.xml:tomcat核心配置文件;
context.xml:每个webapp都有其配置文件,这些配置文件通常位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器、JDBC;此配置文件为所有的webapp提供默认配置
web.xml: 每个webapp部署之后才能被访问;此配置文件则用于为所有webapp提供默认部署方式
tomcat-users.xml: 用于认证账号配置文件
catalina.policy: 当使用-secruity启动tomcat实例时通过读取此配置文件来定义其安全运行策略
catalina.properties: java属性的定义文件,用于设定类加载器路径,以及一些jvm性能调整的相关参数
logging.properties: 日志相关的配置文件
2、tomcat的组件:
顶级类组件:Server,代表一个tomcat实例
服务类组件:Service,将连接器关联至内部的Engine引擎
连接器组件:Connector,常用的有http、https、ajp(Apache JServ Protocol)
容器类组件:Engine,代表一个web container
包含:host(虚拟主机)、context(主机配置文件)
被嵌套类组件:valve,logger,realm,….
二、配置http代理tomcat
1、实验环境:
tomcat主机:
node1: 172.16.2.14/24
node2: 172.16.2.13/24
http主机
node3: 172.16.2.12/24
软件:
tomcat下载地址:http://tomcat.apache.org/
jdk下载地址(Oracle):http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
2、安装jdk
[root@node1 tomcat]# rpm -ivh jdk-8u45-linux-x64.rpm \\jdk无依赖包,直接rpm安装即可 [root@node1 tomcat]# vim /etc/profile.d/java.sh \\声明环境变量 export JAVA_HOME=/usr/java/latest export PATH=$JAVA_HOME/bin:$PATH [root@node1 tomcat]# source /etc/profile.d/java.sh \\重新读取配置 [root@node1 tomcat]# java -version \\查看java的版本信息,若出现以下信息则表示安装jdk成功 java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
node2安装jdk同node1一样,这里就不在演示了
3、安装tomcat
[root@node1 tomcat]# tar xf apache-tomcat-7.0.63.tar.gz -C /usr/local/ \\加压tomcat软件包 [root@node1 tomcat]# cd /usr/local/ [root@node1 local]# ln -sv apache-tomcat-7.0.63/ tomcat \\为tomcat解压后的文件创建软连接 [root@node1 local]# vim /etc/profile.d/tomcat.sh \\为tomcat声明环境变量 export CATALINA_HOME=/usr/local/tomcat export PATH=$CATALINA_HOME/bin:$PATH root@node1 local]# source /etc/profile.d/tomcat.sh \\重新读取配置 [root@node1 local]# catalina.sh version \\查看版本信息,若出现以下信息,则证明部署tomcat成功 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/7.0.63 Server built: Jun 30 2015 08:08:33 UTC Server number: 7.0.63.0 OS Name: Linux OS Version: 2.6.32-504.el6.x86_64 Architecture: amd64 JVM Version: 1.7.0_65-mockbuild_2014_07_16_06_06-b00 JVM Vendor: Oracle Corporation
node2节点安装tomcat跟node1节点一样,这里不在介绍
3.1 启动tomcat访问测试(tomcat默认http协议监听在8080端口,ajp协议监听在8009端口)
[root@node1 ~]# catalina.sh start; ssh node2 'catalina.sh start'
访问测试:
3.2 添加虚拟主机:
[root@node1 ~]# cd /usr/local/tomcat/ [root@node1 tomcat]# vim conf/server.xml 在server------>service--------->engine中定义 <Host name="www.mylinux.com" appBase="/mylinux" \\在Host中定义主机名、根目录位置 unpackWARs="true" autoDeploy="true"> <context path="" doc="ROOT" reloadable="true" /> \\定义虚拟路径,此处为空即没有指定,文档目录 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="mylinux_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> \\定义虚拟主机的日志信息 </Host> <Engine name="Catalina" defaultHost="www.mylinux.com" >\\再此出将默认虚拟主机更改为自己定义的主机 [root@node1 tomcat]# mkdir -pv /mylinux/ROOT/{lib,classes,WEB-INF}\\创建tomcat所需要的目录 [root@node1 tomcat]# vim /mylinux/ROOT/index.jsp \\添加默认文档,内容如下: <%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatA.magedu.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("magedu.com","magedu.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>
重新启动tomcat,访问测试:
[root@node1 tomcat]# catalina.sh configtest \\检查配置文件是否有语法错误 [root@node1 tomcat]# catalina.sh stop \\停止tomcat [root@node1 tomcat]# catalina.sh start \\启动tomcat
访问测试:
3.3 修改node2节点跟node1节点一样,默认页面内容如下:
<%@ page language="java" %> <html> <head><title>TomcatB</title></head> <body> <h1><font color="blue">TomcatB.magedu.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("magedu.com","magedu.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>
访问测试:
4、配置使用mod_http负载均衡tomcat
4.1安装httpd
[root@node3 ~]# yum -y install httpd \\直接使用yum安装即可 [root@node3 ~]# httpd -M \\确保httpd中含有以下proxy模块 proxy_module (shared) proxy_balancer_module (shared) proxy_ftp_module (shared) proxy_http_module (shared) proxy_ajp_module (shared) proxy_connect_module (shared)
4.2 启动httpd,访问测试
[root@node3 httpd]# /etc/init.d/httpd start
访问:
4.3 修改httpd配置文件,内容如下
[root@node3 ~]# vim /etc/httpd/conf/httpd.conf #DocumentRoot "/var/www/html" \\将此行注释掉,使用虚拟主机实现 [root@node3 ~]# cd /etc/httpd/ [root@node3 httpd]# vim conf.d/mod_http.conf <Proxy balancer://cluster> \\定义集群名称 BalancerMember http://172.16.2.14:8080 loadfactor=1\\添加集群节点,loadfactor代表权重 BalancerMember http://172.16.2.13:8080 loadfactor=1 ProxySet lbmethod=byrequests \\负载均衡的调度方法 </Proxy> NameVirtualHost *:80 \\启用虚拟主机 <VirtualHost *:80> ServerName www.test.com ProxyVia On \\添加via信息 ProxyRequests off \\关闭正向代理 ProxyPreserveHost on \\支持虚拟合租记 ProxyPass / balancer://cluster stickysession=JESSIONID \\将httpd请求至后端主机 ProxyPassReverse / balancer://cluster stickysession=JESSIONID\\将httpd请求至后端主机 </VirtualHost>
上述参数解释:
ProxyPass {On|Off|Full|Block} |
用于控制在http首部是否使用Via:,主要用于在多级代理中控制代理请求的流向。默认为off,即不启用此功能,On表示每个请求和响应报文均添加Via:, Full表示每个Via:行都会添加当前Apache服务器版本号信息;Block表示每个代理请求中的Via:都会被移除 |
ProxyRequests {On|Off} |
是否开启Apache正向代理功能;启用此项时是为了代理http协议必须启用mod_proxy_http模块。同时,如果为Apache设置了proxypass,则必须将ProxyRequests设置为Off |
ProxyPreserveHost {On|Off} |
如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果想在反向代理中支持虚拟主机,则需要开启此项,否则就无须打开此功能 |
ProxyPass [path] !|url [key=value key=value ..] |
将后端服务器某URL与当前服务器的某虚拟路径关联起来做为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某url路径。使用此指令时必须将ProxyRequests的值设置为Off。需要注意的是,如果path以“/”结尾,则对应的url也必须以“/”结尾,反之亦然。 |
mod_proxy模块在httpd 2.1的版本之后支持与后端服务器的连接池功能,连接在按需创建在可以保持至连接池中已备进一步使用。连接池大或其他设定可以通过在ProxyPass中使用key=value的方式定义。也可以使用PassSet定义。常用的key如下所示: |
|
min | 连接池的最小容量,此值与实际连接个数无关,仅表示连接池最小要初始化的空间大小 |
max |
连接池的最大容量,每个MPM都有自己独立的容量;其值与MPM本身无关,如prefork的总是为1,而其他的则取决于TheradsPerChild指令的值 |
loadfactor | 用于负载均衡集群配置中,定义对后端服务器的权重,取值范围为1-100 |
retry | 当apache将请求发送至后端服务器得到错误响应时等待多次时间以后再重试。单位是秒钟 |
如果proxy指定的是balacner://开头,即用与负载均衡时,其还可以接受一些特殊的参数,如下所示: | |
lbmethod |
apache实现负载均衡的调度算法,默认为byrequests,即基于权重将统计请求个数进行调度,bytraffic则执行基于权重的流量计数调度,bybusyness通过考量每个后端服务器的当前负载均衡进行调度 |
maxattempts | 放弃请求之前实现故障转移的次数,默认为1,其最大值不应大于总结点数 |
nofailover |
取值为On或Off,设置On时表示后端服务器故障时,用户的session将损坏;因此在后端服务器不支持session复制时可将其设置为On |
stickysession | 调度器的sticky session的名字,根据web程序语言的不同,其值为JSESSIONID或PHPSESSIONID |
4.4 重新启动httpd,访问测试
[root@node3 httpd]# httpd -t \\测试配置文件语法错误 [root@node3 httpd]# /etc/init.d/httpd restart \\重启启动httpd
访问测试:
5、使用mod_ajp实现tomcat负载均衡:
5.1修改httpd配置文件如下:
[root@node3 conf.d]# vim mod_ajp.conf <Proxy balancer://cluster> BalancerMember ajp://172.16.2.14:8009 loadfactor=1 \\修改使用ajp协议 BalancerMember ajp://172.16.2.13:8009 loadfactor=1 \\修改使用ajp协议 ProxySet lbmethod=byrequests </Proxy> NameVirtualHost *:80 <VirtualHost *:80> servername www.test.com ProxyVia On ProxyRequests off ProxyPreserveHost on ProxyPass / balancer://cluster stickysession=JESSIONID ProxyPassReverse / balancer://cluster stickysession=JESSIONID </VirtualHost>
5.2 重启httpd,访问测试
[root@node3 conf.d]# httpd -t [root@node3 conf.d]# /etc/init.d/httpd restart
访问测试:
原创文章,作者:马行空,如若转载,请注明出处:http://www.178linux.com/6325