1.描述tomcat的架構
tomcat服務器是一種Servlet/jsp容器,更實質性的說是Servlet容器,因為jsp最終還是被編譯成servlet來執行的。而對于servlet來說,其最長見的用途是擴展java web服務器功能,為來自web客戶的請求提供服務。它完全運行在java虛擬機上。由于它的運行在服務器端,因此他的運行不依賴于瀏覽器。
tomcat作為servlet容器,負責處理客戶請求,把請求傳給servlet并把結果返回給客戶。servlet容器與servlet之間的接口是由java servlet api定義的,在此api中定義了servlet的各種方法,這些方法在servlet生命周期的不容階段被servlet容器調用,servlet api還定義了servlet容器傳遞給servlet的對象類,如請求對象ServletRequest和相應對象ServletResponse。
tomcat服務器是由一系列可配置的組件構成,其中核心組件是Catalina Servlet容器,它是所有其他tomcat組件的頂層容器。tomcat的組件可以在conf/server.xml文件當中進行配置,每個tomcat組件在server.xml文件中進行配置,每個tomcat組件在server.xml文件中對應一種配置元素。
2.詳細解釋Tomcat的配置文件及配置文件中的參數所代表的含義。
/bin:腳本、批處理,jar文件等啟動tomcat文件
/conf:存放tomcat服務器全局配置文件
server.xml: 核心配置文件;
web.xml: 默認部署應用描述符;部署,將一個web應用程序所依賴到的類裝進JVM;
context.xml:默認為上下文提供配置文件;
tomcat-users.xml:為用戶認證文件,Tomcat啟動后會將這個文件讀進內存中完成賬號和密碼的檢測認證,所以這個文件的安全性很重要;
catalina.policy:用來定義Tomcat自身的安全和資源授權策略,如定義通過互聯網訪問時,哪些資源用戶可以訪問哪些資源用戶不能訪問;哪些資源能被裝載,哪些資源不能被裝載等等
catalina.properties:定義應用程序自身屬性;如所使用的內存大小,所使用的字符串緩沖池的大小,你的server loader加載器是什么,等等
logging.properties:用來定義日志級別,以及日志文件路徑
/lib:庫文件路徑;
/logs:日志目錄;
/temp:臨時目錄;
/webapps:Tomcat的主要Web發布目錄,默認情況下把Web應用文件放于此目錄
/work:存放JSP編譯后產生的class文件
server.xml文件參數詳解:
<Server>
<Listener />
<GlobaNamingResources>
</GlobaNamingResources>
<Service>
<Connector />
<Engine>
<Logger />
<Realm />
<host>
<Logger />
<Context />
</host>
</Engine>
</Service>
</Server>
<\Server>元素
它代表整個容器,是Tomcat實例的頂層元素.由org.apache.catalina.Server接口來定義.它包含一個元素.并且它不能做為任何元素的子元素.
<\Connector>元素
由Connector接口定義.元素代表與客戶程序實際交互的給件,它負責接收客戶請求,以及向客戶返回響應結果.
<\Engine>元素
每個Service元素只能有一個Engine元素.處理在同一個中所有元素接收到的客戶請求.由org.apahce.catalina.Engine接口定義.
<\Host>元素
它由Host接口定義.一個Engine元素可以包含多個元素.每個的元素定義了一個虛擬主機.它包含了一個或多個Web應用.
<\Context>元素
它由Context接口定義.是使用最頻繁的元素.每個可以包含多個元素.每個web應用有唯一的一個相對應的Context代表web應用自身.servlet容器為第一個web應用創建一個
<Server port=”8005″ shutdown=”SHUTDOWN”> tomcat管理接口;負責監聽關閉tomcat的請求
<Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” /> 監聽組件;用于集群調試
<GlobalNamingResources> 全局命名資源,定義了用戶認證
<Engine name=”Catalina” defaultHost=”localhost”> 引擎名及默認主機
<Realm className=”org.apache.catalina.realm.LockOutRealm”> 定義用戶訪問的密碼;默認沒定義用戶密碼,所以都能訪問;
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs” …… /> 定義訪問日志
3.配置apache通過mod_proxy模塊與tomcat連接的詳細過程
apache服務器:192.168.31.23
Tomcat1服務器:192.168.31.233
Tomcat2服務器:192.168.31.26
一、tomcat服務器先安裝tomcat 、jdk并配置環境變量
tar -zxvf jdk-8u20-linux-x64.tar.gz -C /usr/local/ 解壓jdk包
cd /usr/local
ln -sv jdk1.8.0_20 jdk
vim /etc/profile.d/java.sh 配置java環境變量
JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile.d/java.sh 讀取環境變量
tar -zxvf apache-tomcat-7.0.56.tar.gz -C /usr/local/
cd /usr/local
ln -sv apache-tomcat-7.0.56/ tomcat
vim /etc/profile.d/catalina.sh
CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
source /etc/profile.d/catalina.sh
二、啟動tomcat,并訪問默認網站
catalina.sh start
ss -tnl 看8080端口 是否起來
三、安裝并配置apache反向代理服務
yum -y install httpd
vim /etc/httpd/conf/httpd.conf
# DocumentRoot “/var/www/html” 注釋掉默認網頁存放位置
在conf.d目錄下新建虛擬主機
vim /etc/httpd/conf.d/http-proxy.conf
ProxyVia On
ProxyPreserveHost On
四、重啟apache 訪問測試成功
systemctl restart httpd.service
4.配置基于mod_jk的負載均衡
mod_jk是基于AJP協議的;通過mod_jk模塊與tomcat連接;需要額外的軟件包進行編譯
一、apache服務器安裝tomcat連接器 <apxs基于httpd-devel包>
yum -y install httpd-devel
tomcat-connectors-1.2.42-src.tar.gz
tar -zxvf tomcat-connectors-1.2.42-src.tar.gz
cd /root/tomcat-connectors-1.2.42-src/native
./configure –with-apxs=/usr/bin/apxs
make && make install
二、為了區分兩個tomcat網頁內容,修改tomcat的配置,并增加jvmRoute
tomcat1:
vim /usr/local/tomcat/conf/server.xml
<Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”TomcatA”>
<Host name=”localhost” appBase=”/data/webapps”
unpackWARs=”true” autoDeploy=”true”>
<Context path=”” docBase=”myapp” reloadable=”true” />
tomcat2:
vim /usr/local/tomcat/conf/server.xml
<Engine name=”Catalina” defaultHost=”localhost” jvmRoute=”TomcatB”>
<Host name=”localhost” appBase=”/data/webapps”
unpackWARs=”true” autoDeploy=”true”>
<Context path=”” docBase=”myapp” reloadable=”true” />
分別在兩個tomcat服務器上創建目錄及index.jsp文件
mkdir /data/webapps/myapp/{classes,lib,WEB-INF,META-INF}
tomcat1:
vim /data/webapps/myapp/index.jsp
<%@ page language=”java” %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color=”red”>TomcatA </h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“abc”,”abc”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
tomcat2:
vim /data/webapps/myapp/index.jsp
<%@ page language=”java” %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font color=”blue”>TomcatB </h1>
<table align=”centre” border=”1″>
<tr>
<td>Session ID</td>
<% session.setAttribute(“abc”,”abc”); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
三、啟動tomcat并訪問測試
省略………………………………..
四、配置mod_jk模塊實現負載均衡
vim /etc/httpd/conf/httpd.conf
# DocumentRoot “/var/www/html” 注釋
配置虛擬主機
vim /etc/httpd/conf.d/httpd-jk.conf
LoadModule jk_module modules/mod_jk.so 加載mod_jk模塊
JkWorkersFile /etc/httpd/conf.d/workers.properties 配置文件位置
JkLogFile logs/mod_jk.log 日志
JkLogLevel debug 日志級別
JkMount /* lbcluster 負載均衡器名稱
JkMount /jkstatus/ stat1 狀態信息
編輯workers.properties配置文件
vim /etc/httpd/conf.d/workers.properties
worker.list = lbcluster,stat1
worker.TomcatA.type = ajp13
worker.TomcatA.port = 8009
worker.TomcatA.host = 192.168.31.233
worker.TomcatA.lbfactor = 1
worker.TomcatB.type = ajp13
worker.TomcatB.port = 8009
worker.TomcatB.host = 192.168.31.26
worker.TomcatB.lbfactor = 1
worker.lbcluster.type = lb
worker.lbcluster.sticky_session = 0
worker.lbcluster.balance_workers = TomcatA, TomcatB
worker.stat1.type = status
五、重啟apache,并測試
httpd -t
systemctl reload httpd.service
5、配置tomcat集群,能夠實現用戶的session會話保持
DeltaManager實現
原理:是將會話信息同步給集群中其它節點,實現會話復制;
(1).修改tomcat1下的server.xml配置文件
在Engine組件內增加下面這一段
修改tomcat2下的server.xml
</Cluster>
(2).此外,所有啟用集群功能的web應用程序,其web.xml中都須添加<distributable/>才能實現集群功能。如果某web應用程序沒有自己的web.xml,也可以通過復制默認的web.xml至其WEB-INF目錄中實現 Tomcat1 Tomcat2 都有添加
cp /usr/local/tomcat/conf/web.xml /data/webapps/myapp/WEB-INF/
vim /data/webapps/myapp/WEB-INF/web.xml
增加一行<distributable/>
(3).重啟tomcat,并測試會話綁定
catalina.sh configtest
catalina.sh stop|start
原創文章,作者:N27_Vicent,如若轉載,請注明出處:http://www.www58058.com/79772
內容翔實,可以看的出有很認真在做,很贊。