Tomcat介绍、安装配置以及简单的实现Tomcat负载均衡
html
-----------------------------------------------------------------------------------------------------------------------------------------------
前端
二、事件驱动架构:分布式异构架构,高度解耦,大型应用场景nginx
三、微内核架构:插件式架构,各类功能以插件形式对接到核心上web
四、微服务架构:总体系统功能中每一项功能,只要功能可以单独调用,每一个功能就作成一个单元。基于API REST-based,application REST-based,中心化消息数据库
一、tomcat由java程序编写,是为了更好支持其它java而编写的,好比说jsp(java server page)
JDK:java development kit,java的开发工具
三、tomcat是只实现了java2EE的JSP和servlet,配置上的关键标识符是catalina
四、JDK 6就是JDK 1.6版,JDK 6u1就是JDK 1.6版本第一次升级
rpm -ivh jdk-8u191-linux-x64.rpm
default/bin/下有不少脚本,若是想使用这些脚本,须要添加环境变量
yum -y install java-1.8.0-openjdk-devel
四、alternatives,同一程序多版本并存时候选择默认版本
tar xf apache-tomcat-xxx.tar.gz -C /usr/local
ln -sv apache-tomcat-xxx tomcat
useradd tomcat -s /sbin/nologin
chown -R tomcat logs/ temp/ work/
CATALINA_BASE=/usr/local/tomcat
yum -y install tomcat tomcat-docs-webapp tomcat-admin-webapps tomcat-webapps
注:后三个tomcat-docs-webapp tomcat-admin-webapps tomcat-webapps为应用程序,不须要能够不装
一、.jsp ->Jasper -> .java ->javac ->.class
.jsp经过Jasper翻译为.java,再编译为javac,最后转换成.class类文件
工做目录webapps默认存放位置:/var/lib/tomcat/webapps/
当/var/lib/tomcat/webapps/ROOT/test/index.jsp,访问对应host:8080/test就是访问的该目录
(2)web.xml:每一个webapp只有“部署”后才能被访问,它的部署方式一般由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为全部的webapps提供默认部署相关的配置;
(3)context.xml:每一个webapp均可以专用的配置文件,它一般由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为全部的webapps提供默认配置;
(4)tomcat-users.xml:用户认证的帐号和密码文件;
(5)catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略(除非有特别配置上的须要,不然不建议使用-security选项);
(6)catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
(7)logging.properties:日志系统相关的配置; log4j
conntor { } ----》一个service中能够多个conntor对应一个engine
engine { ----》每一个service只能有一个engine
host { } ----》engine中能够有多个host
</Server>
每个组件都由一个Java“类”实现,这些组件大致可分为如下几个类型:
链接器组件:http, https, ajp(apache jserv protocol)
被嵌套类:valve(对用户的请求过滤), logger, realm, loader, manager, ...
(2)WEB-INF/:当前webapp的私有资源路径;一般用于存储当前webapp的web.xml和context.xml配置文件;
(4)classes/:类文件,当前webapp所提供的类;
(5)lib/:类文件,当前webapp所提供的类,被打包为jar格式;
(1)deploy:将webapp的源文件放置于目标目录(网页程序文件存放目录),配置tomcat服务器可以基于web.xml和context.xml文件中定义的路径来访问此webapp;将其特有的类和依赖的类经过class loader装载至JVM;
冷部署:把webapp复制到指定的位置,然后才启动tomcat;
部署工具:manager、ant脚本、tcd(tomcat client deployer)等;
undeploy:反部署,中止webapp,并从tomcat实例上卸载webapp;
stop:中止webapp,再也不向用户提供服务;其类依然在jvm上;
# mkidr -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF}
建立文件/usr/local/tomcat/webapps/test/index.jsp
<%@ page import="java.util.*" %>
<% out.println("hello world");
若是登陆这两个应用,须要去配置目录tomcat-users.xml里编辑
rpm包安装在/etc/tomcat/tomcat.conf
更改后重启tomcat,以后能够点击进入Manager App
一、Server:表明tomcat instance,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。各server监听的端口不能相同,所以,在同一物理主机启动多个实例时,须要修改其监听端口为不一样的端口;
注意:server.xml不要让其余用户有读权限,chmod o= /etc/tomcat/server.xml
二、Service:用于实现将一个或多个connector组件关联至一个engine组件;
三、Connector组件:端点,定义tomcat所监听的地址和端口,不属于任何host,而属于整个tomcat
(2)由其它的web server反代:来自前端的反代服务器;
nginx --> http connector --> tomcat
httpd(proxy_http_module) --> http connector --> tomcat
httpd(proxy_ajp_module) --> ajp connector --> tomcat
httpd(mod_jk) --> ajp connector --> tomcat
四、Engine组件:Servlet实例,即servlet引擎,其内部能够一个或多个host组件来定义站点; 一般须要经过defaultHost属性来定义默认的虚拟主机;
五、Host组件:位于engine内部用于接收请求并进行相应处理的主机或虚拟主机,示例:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
(1)appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径,相似于apache的/var/×××w/html;若是使用的是相对路径,则是相对于$CATALINA_BASE变量的相对路径;
(2)unpackWARs,是否自动解压
(3)autoDeploy:自动部署,在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat;,生产环境中不建议自动部署,关闭该功能
安装好openjdk、tomcat后,咱们若是想要创建一个其它的工做目录来存放之后的项目,首先在配置文件server.xml中有
mkdir /app/webapps/ROOT/{classes,lib,WEB-INF}
mkdir /app/webapps/test-0.1/{classes,lib,WEB-INF}
vim /app/webapps/test-0.1/index.jsp
<%@ page import="java.util.*" %>
<% out.println("hello world");
以后由你本身决定是否要虚拟主机的主页,若是要,拷贝默认目录下ROOT目录的内容到手建目录下ROOT。若是须要Manager App和Host Manager,还须要将host-manager和manager两个目录一并拷贝至此
为了便于作灰度发布,能够在工做目录/app/webapps为目录作软连接
灰度发布示例:
<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>
<Host name="node1.magedu.com" appBase="/web/apps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node1_access" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="/test" docBase="test" reloadable="">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node1_test_access_" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html
定义访问日志:org.apache.catalina.valves.AccessLogValve
定义访问控制:org.apache.catalina.valves.RemoteAddrValve
<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172\.16\.100\.67" />
<Valve className="org.apache.catalina.valves.RemoteCIDRValve" deny="172.16.100.67/16" />
注意:tomcat只支持基于主机名的虚拟主机,不支持IP地址
一、NT架构中,nginx将.jsp和.do格式代理给tomcat
Client (http) --> nginx (reverse proxy)(http) --> tomcat (http connector)
proxy_pass http://tc1.magedu.com:8080;
proxy_pass http://tc1.magedu.com:8080;
这么写入后nginx反代不能进入Manager App或者Host Manager,须要更进一步的定义规则经过rewrite进入
(1)LAMT:Linux Apache(httpd) MySQL Tomcat
proxy_http_module:适配http协议客户端;
Client (http) --> httpd (proxy_http_module)(http) --> tomcat (http connector)
Client (http) --> httpd (proxy_ajp_module)(ajp) --> tomcat (ajp connector)
Client (http) --> httpd (mod_jk)(ajp) --> tomcat (ajp connector)
ProxyPass / http://a.chen.com:8080/
ProxyPa***everse / http://a.chen.com:8080/
<LocationMatch "\.(jsp|do)$>
ProxyPass / http://a.chen.com:8080/
结果
http反代能够进入Manager App或者Host Manager
ProxyPass / ajp://a.chen.com:8009/
ProxyPa***everse / ajp://a.chen.com:8009/
一样能够进入Manager App或者Host Manager
十3、keepalived实现nginx对tomcat的负载均衡调度