Tomcat介紹、安裝配置以及簡單的實(shí)現(xiàn)Tomcat負(fù)載均衡
壓測工具:JMeter
一、軟件架構(gòu)模式
1、分層架構(gòu):表現(xiàn)層,業(yè)務(wù)層,持久層,數(shù)據(jù)庫層
2、事件驅(qū)動架構(gòu):分布式異構(gòu)架構(gòu),高度解耦,大型應(yīng)用場景
3、微內(nèi)核架構(gòu):插件式架構(gòu),各種功能以插件形式對接到核心上
4、微服務(wù)架構(gòu):整體系統(tǒng)功能中每一項(xiàng)功能,只要功能能夠單獨(dú)調(diào)用,每個功能就做成一個單元?;贏PI REST-based,application REST-based,中心化消息
5、基于空間的架構(gòu):云架構(gòu)
二、webapp容器
tomcat,jetty,resin
jboss
websphere,weblogic
三、Java相關(guān)
1、tomcat由java程序編寫,是為了更好支持其它java而編寫的,比如說jsp(java server page)
2、java編程語言,是一種企業(yè)級應(yīng)用程序
JDK:java development kit,java的開發(fā)工具
JRE:java運(yùn)行開發(fā)環(huán)境,JVM+標(biāo)準(zhǔn)庫組成
JVM:java虛擬機(jī)
openjdk:開源社區(qū)版jdk
3、tomcat是只實(shí)現(xiàn)了java2EE的JSP和servlet,配置上的關(guān)鍵標(biāo)識符是catalina
4、JDK 6就是JDK 1.6版,JDK 6u1就是JDK 1.6版本第一次升級
四、tomcat相關(guān)
1、端口使用
使用8080端口,http協(xié)議,tomcat user
使用8443端口,https協(xié)議
使用8009端口,ajp協(xié)議,在http做反向代理時候使用
ajp:apache jserv protocol
2、.do和.jsp文件傳遞給tomcat處理
3、動+靜結(jié)合:LNMT或者LAMT
五、JDK的部署
1、tomcat的運(yùn)行之前需要部署JDK
2、Oracle JDK的部署
oracle網(wǎng)站進(jìn)入后下載
rpm -ivh jdk-8u191-linux-x64.rpm
解壓縮后進(jìn)入目錄
default/bin/下有很多腳本,如果想使用這些腳本,需要添加環(huán)境變量
vim /etc/profile.d/java.sh
JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
完成后,java -version就可以顯示
3、Open JDK的部署
yum info all java*
yum -y install java-1.8.0-openjdk-devel
4、alternatives,同一程序多版本并存時候選擇默認(rèn)版本
六、tomcat的安裝
1、二進(jìn)制安裝
(1)wget http://URL或者下載
tar xf apache-tomcat-xxx.tar.gz -C /usr/local
cd /usr/local
ln -sv apache-tomcat-xxx tomcat
(2)配置文件:目錄下/conf/server.xml
(3)配置啟動過程
useradd tomcat -s /sbin/nologin
cd tomcat/
chown -R :tomcat ./*
chown -R tomcat logs/ temp/ work/
chmod g+rx conf/
vim /etc/profile.d/tomcat.sh
CATALINA_BASE=/usr/local/tomcat
PATH=$CATALINA_BASE/bin:$PATH
export CATALINA_BASE PATH
exec bash
catalina.sh start后啟動
訪問8080端口頁面就出來了
2、第二種安裝
yum -y install tomcat tomcat-docs-webapp tomcat-admin-webapps tomcat-webapps
安裝好后systemctl start tomcat
注:后三個tomcat-docs-webapp tomcat-admin-webapps tomcat-webapps為應(yīng)用程序,不需要可以不裝
七、jsp相關(guān)
1、.jsp ->Jasper -> .java ->javac ->.class
.jsp通過Jasper翻譯為.java,再編譯為javac,最后轉(zhuǎn)換成.class類文件
Test Page
<%language=java
…
%>
八、tomcat的目錄結(jié)構(gòu)
1、目錄說明
bin:腳本,及啟動時用到的類;
conf:配置文件目錄;
lib:庫文件,Java類庫,jar;
logs:日志文件目錄;
temp:臨時文件目錄;
webapps:webapp的默認(rèn)目錄;
work:工作目錄;
2、rpm包安裝的程序環(huán)境:
配置文件目錄:/etc/tomcat
主配置文件:server.xml
工作目錄webapps默認(rèn)存放位置:/var/lib/tomcat/webapps/
examples
manager
host-manager
docs
Unit File:tomcat.service
環(huán)境配置文件:/etc/sysconfig/tomcat
當(dāng)/var/lib/tomcat/webapps/ROOT/test/index.jsp,訪問對應(yīng)host:8080/test就是訪問的該目錄
3、tomcat的配置文件構(gòu)成:
(1)server.xml:主配置文件;
(2)web.xml:每個webapp只有“部署”后才能被訪問,它的部署方式通常由web.xml進(jìn)行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認(rèn)部署相關(guān)的配置;
(3)context.xml:每個webapp都可以專用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認(rèn)配置;
(4)tomcat-users.xml:用戶認(rèn)證的賬號和密碼文件;
(5)catalina.policy:當(dāng)使用-security選項(xiàng)啟動tomcat時,用于為tomcat設(shè)置安全策略(除非有特別配置上的需要,否則不建議使用-security選項(xiàng));
(6)catalina.properties:Java屬性的定義文件,用于設(shè)定類加載器路徑,以及一些與JVM調(diào)優(yōu)相關(guān)參數(shù);
(7)logging.properties:日志系統(tǒng)相關(guān)的配置; log4j
九、tomcat配置文件
1、tomcat配置結(jié)構(gòu)
server {
service {
conntor { } —-》一個service中可以多個conntor對應(yīng)一個engine
engine { —-》每個service只能有一個engine
host { } —-》engine中可以有多個host
host {
context { }
}
}
}
}
2、Tomcat的核心組件:server.xml
…
…
…
…
每一個組件都由一個Java“類”實(shí)現(xiàn),這些組件大體可分為以下幾個類型:
頂級組件:Server
服務(wù)類組件:Service
連接器組件:http, https, ajp(apache jserv protocol)
容器類:Engine, Host, Context
被嵌套類:valve(對用戶的請求過濾), logger, realm, loader, manager, …
集群類組件:listener, cluster, …
九、WebApp的組織架構(gòu)
1、JSP WebAPP的組織結(jié)構(gòu):
/: webapps的根目錄
(1)index.jsp, index.html:主頁;
(2)WEB-INF/:當(dāng)前webapp的私有資源路徑;通常用于存儲當(dāng)前webapp的web.xml和context.xml配置文件;
(3)META-INF/:類似于WEB-INF/;
(4)classes/:類文件,當(dāng)前webapp所提供的類;
(5)lib/:類文件,當(dāng)前webapp所提供的類,被打包為jar格式;
2、webapp歸檔格式:
.war:webapp
.jar:EJB的類打包文件;
.rar:資源適配器類打包文件;
.ear:企業(yè)級webapp;
3、部署(deploy)webapp的相關(guān)操作:
(1)deploy:將webapp的源文件放置于目標(biāo)目錄(網(wǎng)頁程序文件存放目錄),配置tomcat服務(wù)器能夠基于web.xml和context.xml文件中定義的路徑來訪問此webapp;將其特有的類和依賴的類通過class loader裝載至JVM;
(2)部署有兩種方式:
自動部署:auto deploy
手動部署:
冷部署:把webapp復(fù)制到指定的位置,而后才啟動tomcat;
熱部署:在不停止tomcat的前提下進(jìn)行部署;
部署工具:manager、ant腳本、tcd(tomcat client deployer)等;
undeploy:反部署,停止webapp,并從tomcat實(shí)例上卸載webapp;
start:啟動處于停止?fàn)顟B(tài)的webapp;
stop:停止webapp,不再向用戶提供服務(wù);其類依然在jvm上;
redeploy:重新部署;
(3)手動提供一測試類應(yīng)用,并冷部署:
# mkidr -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF}
創(chuàng)建文件/usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<% out.println("hello world");
%>
十、tomcat的兩個管理應(yīng)用:
manager:管理webapps應(yīng)用程序
host-manager:管理虛擬主機(jī)
1、manager:管理webapps應(yīng)用程序
如果登錄這兩個應(yīng)用,需要去配置目錄tomcat-users.xml里編輯
二進(jìn)制目錄在tomcat/conf/下
rpm包安裝在/etc/tomcat/tomcat.conf
更改后重啟tomcat,之后可以點(diǎn)擊進(jìn)入Manager App
2、host-manager:管理虛擬主機(jī)
十一、tomcat的常用組件配置:
1、Server:代表tomcat instance,即表現(xiàn)出的一個java進(jìn)程;監(jiān)聽在8005端口,只接收“SHUTDOWN”。各server監(jiān)聽的端口不能相同,因此,在同一物理主機(jī)啟動多個實(shí)例時,需要修改其監(jiān)聽端口為不同的端口;
注意:server.xml不要讓其他用戶有讀權(quán)限,chmod o= /etc/tomcat/server.xml
2、Service:用于實(shí)現(xiàn)將一個或多個connector組件關(guān)聯(lián)至一個engine組件;
3、Connector組件:端點(diǎn),定義tomcat所監(jiān)聽的地址和端口,不屬于任何host,而屬于整個tomcat
負(fù)責(zé)接收請求,常見的有三類http/https/ajp;
進(jìn)入tomcat的請求可分為兩類:
(1)standalone : 請求來自于客戶端瀏覽器;
(2)由其它的web server反代:來自前端的反代服務(wù)器;
nginx –> http connector –> tomcat
httpd(proxy_http_module) –> http connector –> tomcat
httpd(proxy_ajp_module) –> ajp connector –> tomcat
httpd(mod_jk) –> ajp connector –> tomcat
屬性:
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
address:監(jiān)聽的IP地址;默認(rèn)為本機(jī)所有可用地址;
maxThreads:最大并發(fā)連接數(shù),默認(rèn)為200;
enableLookups:是否啟用DNS查詢功能;
acceptCount:等待隊(duì)列的最大長度;
secure:
sslProtocol:
4、Engine組件:Servlet實(shí)例,即servlet引擎,其內(nèi)部可以一個或多個host組件來定義站點(diǎn); 通常需要通過defaultHost屬性來定義默認(rèn)的虛擬主機(jī);
屬性:
name=
defaultHost="localhost"
jvmRoute=
5、Host組件:位于engine內(nèi)部用于接收請求并進(jìn)行相應(yīng)處理的主機(jī)或虛擬主機(jī),示例:
unpackWARs="true" autoDeploy="true">
Webapp ARchives
常用屬性說明:
(1)appBase:此Host的webapps的默認(rèn)存放目錄,指存放非歸檔的web應(yīng)用程序的目錄或歸檔的WAR文件目錄路徑,類似于apache的/var/×××w/html;如果使用的是相對路徑,則是相對于$CATALINA_BASE變量的相對路徑;
(2)unpackWARs,是否自動解壓
(3)autoDeploy:自動部署,在Tomcat處于運(yùn)行狀態(tài)時,將某webapp放置于appBase所定義的目錄中時,是否自動將其部署至tomcat;,生產(chǎn)環(huán)境中不建議自動部署,關(guān)閉該功能
示例:部署tomcat
安裝好openjdk、tomcat后,我們?nèi)绻胍⒁粋€其它的工作目錄來存放以后的項(xiàng)目,首先在配置文件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 language="java" %>
<%@ page import="java.util.*" %>
<% out.println("hello world");
%>
之后由你自己決定是否要虛擬主機(jī)的主頁,如果要,拷貝默認(rèn)目錄下ROOT目錄的內(nèi)容到手建目錄下ROOT。如果需要Manager App和Host Manager,還需要將host-manager和manager兩個目錄一并拷貝至此
為了便于做灰度發(fā)布,可以在工作目錄/app/webapps為目錄做軟鏈接
ln -sv test-0.1 test
最后形成的tree形圖為
結(jié)果圖
灰度發(fā)布示例:
image.pngimage.png
6、Context組件:
示例:
綜合示例:
prefix="node1_access" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
prefix="node1_test_access_" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
7、Valve組件:
valve,閥門,控制組件
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
訪問下a.chen.com
Valve存在多種類型:
定義訪問日志:org.apache.catalina.valves.AccessLogValve
定義訪問控制:org.apache.catalina.valves.RemoteAddrValve
舉例:兩種方式
注意:tomcat只支持基于主機(jī)名的虛擬主機(jī),不支持IP地址
十一、App Manager
1、實(shí)例列表
2、圖形界面熱部署
十二、tomcat的反向代理
1、NT架構(gòu)中,nginx將.jsp和.do格式代理給tomcat
LNMT:Linux Nginx MySQL Tomcat
Client (http) –> nginx (reverse proxy)(http) –> tomcat (http connector)
location / {
proxy_pass http://tc1.magedu.com:8080;
}
location ~* .(jsp|do)$ {
proxy_pass http://tc1.magedu.com:8080;
}
這么寫入后nginx反代不能進(jìn)入Manager App或者Host Manager,需要更進(jìn)一步的定義規(guī)則通過rewrite進(jìn)入
2、AT架構(gòu)
(1)LAMT:Linux Apache(httpd) MySQL Tomcat
httpd的代理模塊:
proxy_module
proxy_http_module:適配http協(xié)議客戶端;
proxy_ajp_module:適配ajp協(xié)議客戶端;
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)
(2)proxy_http_module代理配置示例:
ServerName a.chen.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
Require all granted
ProxyPass / http://a.chen.com:8080/
ProxyPa***everse / http://a.chen.com:8080/
Require all granted
ProxyPass / http://a.chen.com:8080/
結(jié)果
http反代可以進(jìn)入Manager App或者Host Manager
(3)proxy_ajp_module代理配置示例:
ServerName a.chen.com
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
Require all granted
ProxyPass / ajp://a.chen.com:8009/
ProxyPa***everse / ajp://a.chen.com:8009/
Require all granted
同樣可以進(jìn)入Manager App或者Host Manager
十三、keepalived實(shí)現(xiàn)nginx對tomcat的負(fù)載均衡調(diào)度
1、準(zhǔn)備nginx一主一從調(diào)度器,兩臺的/etc/nginx/nginx.conf都是這么寫
配置這兩臺主機(jī)的keepalived.conf
2、準(zhǔn)備兩臺tomcat主機(jī)
192.168.239.72和192.168.239.73
配置nginx.conf頁面
3、測試