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的負載均衡調度