1. 程式人生 > >Tomcat(一) Tomcat是什麼:Tomcat與Java技術 Tomcat與Web應用 以及 Tomcat基本框架及相關配置

Tomcat(一) Tomcat是什麼:Tomcat與Java技術 Tomcat與Web應用 以及 Tomcat基本框架及相關配置

轉載自:http://blog.csdn.net/tjiyu/article/details/54590259

Tomcat(一) Tomcat是什麼:

Tomcat與Java技術 Tomcat與Web應用 以及 Tomcat基本框架及相關配置


       Tomcat是一個被廣泛使用的Java WEB應用伺服器,我們有必要對它有足夠的瞭解。下面將認識Tomcat:

       1、先來了解Tomcat與Java技術的關係、以及在WEB中的應用場景;

       2、再來了解Tomcat的安裝目錄結構、Tomcat配置檔案、Tomcat部署Web應用程式的目錄結構;

       3、最後瞭解Tomcat基本架構、以及Tomcat架構各元件的一些配置。

1、Tomcat是什麼

       Apache Tomcat是由Apache Software Foundation(ASF)開發的一個開源Java WEB應用伺服器。

       類似功能的還有:Jetty、Resin、Websphere、weblogic、JBoss、Glassfish、GonAS等,它們的市場佔有率如下,可以看到Tomcat是最受歡迎的Java WEB應用伺服器:

       Tomcat在技術實現上所處的位置如下:

       下面我們來了解下Tomcat與這些技術之間的關係。

1-1、Tomcat與Java

1、Tomcat與Java SE

      Tomcat是用Java語言編寫的,需要執行在Java虛擬機器上,所以一般需要先安裝JDK,以提供執行環境。

2、Tomcat與Java EE

      Tomcat實現了幾個Java EE規範,包括Java Servlet、Java Server Pages(JSP),Java Expression Language和Java WebSocket等,這些是都下載Tomcat安裝包預設提供的,可以在原始碼中看到相關Java EE 規範API原始碼引用,如下:

       此外,官網還提供了另外一些Java EE規範的實現,如JMX Remote、Web services,要使用的話需要另外下載,放到Tomat安裝目錄/lib中,官網相關下載如下:

       可以說Tomcat是一個不完整的Java EE應用伺服器。

       更多關於Java SE、Java EE等java技術資訊請參考:《Java平臺體系:組成結構 執行機制 JRE/JDK/OpenJDK Java SE/EE/ME Java優點

1-2、Tomcat與Servlet/程式設計開發

       Tomcat實現的幾個Java EE規範最重的是Servlet,因為實現了Servlet規範,所以Tomcat也是一個Servlet容器,可以執行我們自己編寫的Servlet應用程式處理動態請求。

       平時用的Struts2、SpringMVC框架就是基於Servlet,所以我們可以在這些框架的基礎上進行快速開發,然後部署到Tomcat中執行。

       另外對於JSP規範實現:可以混合HTML與Java開發在一個檔案中(.jsp),這種檔案在第一次呼叫之後會被Tomcat的Jasper元件編譯成一個servlet類,在後續的操作中則可以直接使用此類。這種開發方式不靈活,一般少用。

1-3、Tomcat與WEB/HTTP請求

       Tomcat的(HTTP型別)Connector元件實現了HTTP請求的解析,Tomcat通過Connector元件接收HTTP請求並解析,然後把解析後的資訊交給Servlet處理:

       對於靜態資源(html/js/jpg等)請求,Tomcat提供預設的Servlet來處理並響應;

       對於動態請求,可以對映到自己編寫的Servlet應用程式來處理。

1-4、Tomcat與Nginx/Apache的應用架構

       Nginx、Apache都是目前主流的Web伺服器,也可以作為反向代理伺服器;它們在處理大量併發的請求連線、連線會話管理和靜態內容請求等方面相比Tomcat更具優勢。

       所以一般在實際應用中,先是通過Nginx(或Apache)反向代理伺服器接收請求,匹配分離動態/靜態請求(動靜分離);

       如果是靜態請求,則轉發到另外的Nginx WEB伺服器上,返回靜態內容;如果是動態請求,則轉發到後面的Tomcat應用伺服器,處理動態請求的業務邏輯。

       簡單的架構如下:

       更多資訊請參考:《各種容器與伺服器的區別與聯絡:Servlet容器 WEB容器 Java EE容器 應用伺服器 WEB伺服器 Java EE伺服器

2、Tomcat安裝目錄

       Tomcat安裝後根目錄如上圖,由環境變數$ CATALINA_HOME表示,可以手動設定,可以由/bin/catalina.sh命令指令碼自動設定該環境變數,如果使用多個Tomcat例項,需要為每個例項定義$ CATALINA_BASE環境變數。

       這些目錄說明如下:

      bin:啟動、關閉和其他指令碼, * .sh檔案(對於Unix系統)是* .bat檔案的功能重複(對於Windows系統)。

      conf:配置檔案及相關資料檔案存放目錄,如server.xml,tomcat-users.xml,web.xml;

       logs:預設的日誌檔案存放目錄,如訪問日誌,可以通過server.xml檔案配置到其他目錄;

       lib:Tomcat使用的庫檔案存放目錄,如Servlet規範的API;

       temp:臨時檔案的工作目錄,如上傳大檔案時的快取資料會儲存到這裡;

      webapps:我們的應用程式部署目錄,可以通過server.xml檔案配置;

       work:Tomcat工作目錄,如存放JSP編譯後的類檔案。

       更多相關資訊請參考:http://tomcat.apache.org/tomcat-8.5-doc/introduction.html

3、Tomcat配置檔案

       Tomcat的配置檔案預設存放在$CATALINA_HOME/conf目錄中,主要有以下幾個:

      server.xml: Tomcat核心配置檔案,包含Service, Connector, Engine, Realm, Valve, Hosts主元件的相關配置資訊。

      context.xml:為部署與此Tomcat例項上的web應用程式提供的預設配置檔案,每個webapp都可以使用獨有的context.xml,通常放置於webapp目錄的META-INF子目錄中,常用於定義會話管理器,Realm已經JDBC等。

      web.xml:為部署與Tomcat例項上的所有web應用程式提供部署描述符,通常用於為webapp提供預設的servlet定義和基本的MUIME對映表。

      tomcat-users.xml:Realm認證時用到的相關角色、使用者和密碼等資訊;Tomcat自帶的manager預設情況下會用到此檔案;在Tomcat中新增/刪除使用者,為使用者指定角色等將通過編輯此檔案實現。

       catalina.policy:當基於-securty選項啟動tomcat例項時會讀取此配置檔案;此檔案是JAVA的安全策略配置檔案,用於配置訪問codebase(程式碼庫)或某些Java類的許可權。

      catalina.properties:java屬性定義檔案,設定類載入器路徑,安全包列表和一些調整效能的引數資訊。

      logging.properties:定義日誌相關的配置資訊,如日誌級別、檔案路徑等。

4、WEB應用部署目錄結構

       我們的應用程式一般會打包成歸檔格式(.war),然後放到Tomcat的應用程式部署目錄。而webapp有特定的組織格式,是一種層次型目錄結構,通常包含了servlet程式碼檔案、HTML/jsp頁面檔案、類檔案、部署描述符檔案等等,相關說明如下:

       /:web應用程式的根目錄,可以存放HTML/JSP頁面以及其他客戶端瀏覽器必須可見的其他檔案(如js/css/影象檔案)。在較大的應用程式中,還可以選擇將這些檔案劃分為子目錄層次結構。

      /WEB-INF:此webapp的所有私有資源目錄,使用者瀏覽器不可能訪問到的,通常web.xml和context.xml均放置於此目錄。

      /WEB-INF/web.xml:此webapp的私有的部署描述符,描述組成應用程式的servlet和其他元件(如filter),以及相關初始化引數和容器管理的安全性約束。

       /WEB-INF/classes:此webapp自有的Java程式類檔案(.class)及相關資源存放目錄。

       /WEB-INF/lib:此目錄存放webapp自有的JAR檔案,其中包含應用程式所需的Java類檔案(及相關資源),例如第三方類庫或JDBC驅動程式。

       更多資訊請參考:

      Tomcat《Application Developer's Guide》Deployment

       《Servlet3.1規範(最終版)》第10章

5、Tomcat基本框架及相關配置

       如上圖,Tomcat可以按功能劃分許多不同的元件,這些元件都可以通過/conf/server.xml檔案中可定義和配置,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, ResourceEnvRef, WatchedResource, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等,一般可分為以下四類:

      1、頂級元件:位於配置層次的頂級,並且彼此間有著嚴格的對應關係,有Server元件、Service元件;

      2、聯結器:連線客戶端(可以是瀏覽器或Web伺服器)請求至Servlet容器,只有Connector元件,

      3、容器:表示其功能是處理傳入請求的元件,並建立相應的響應。如Engine處理對一個Service的所有請求,Host處理對特定虛擬主機的所有請求,並且Context處理對特定web應用的所有請求;

      4、被巢狀的元件:位於一個容器當中,但不能包含其它元件;一些元件可以巢狀在任何Container中,而另一些只能巢狀在Context中。

       如server.xml預設配置(刪除註釋內容)如下:

       下面來了解下上圖中主要的元件。

5-1、Server元件

       Server(伺服器)表示Tomcat的一個例項,因此,它必須是/conf / server.xml配置檔案中的單個最外層元素,它的屬性表示servlet容器的整體特性。通常一個JVM只能包含一個Tomcat例項。

       預設配置表示監聽在8005埠以接收shutdown命令,預設僅允許通過本機訪問。

       更多Server配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The Server Component

5-2、Service元件

       Service(服務)主要用於關聯一個Engine和與此Engine相關的Connector,每個Connector通過一個特定的埠和協議接收請求,並將其轉發至關聯的Engine進行處理。

       因此,Service可以包含一個Engine、以有一個或多個Connector;而一個Server可以包含多個Service元件,但通常情下只為一個Server指派一個Service。通常需要給Service命名,可以方便管理員在日誌檔案中識別不同Service產生的日誌。

       如預設配置中server只包含一個名為"Catalina"的service,而service裡包含兩個Connector,其中一個監聽8080埠接收HTTP請求,另一個監聽8009埠接收AJP協議的請求。

       更多Service配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The Service Component

5-3、Connector元件

       如上面所述,Connector(聯結器)通過一個特定的埠接收特定協議的客戶端請求,並將其轉發至關聯的Engine進行處理。一個Engine可以配置多個聯結器,但這些聯結器必須使用不同的埠。

       定義聯結器可以使用多種屬性,有些屬性也只適用於某特定的聯結器型別。一般說來,聯結器型別可以分為兩種:

(1)、HTTP聯結器

      HTTP聯結器元素表示支援HTTP / 1.1協議的聯結器元件,它能使Tomcat能夠作為獨立的Web伺服器。此元件的特定例項偵聽伺服器上特定TCP埠號上的連線,每個轉發到相關聯的Engine以執行請求處理並建立響應。

      HTTP聯結器又有三種不同的實現:Java Nio Connector、Java Nio2 Connector、APR/native Connector,它們的對比如下:

       預設配置檔案,定義了一個聯結器為protocol="HTTP/1.1" 表示的是使用自動切換機制來選擇基於Java NIOConnector或基於APR /Native Connector(需要設定),也可以手動指定,

      更多HTTP聯結器配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The HTTP Connector

(2)、AJP 1.3聯結器

      AJP聯結器元素表示通過AJP(Apache JServ Protocol)協議與Web聯結器通訊的聯結器元件。

      AJP協議是基於二進位制的格式在Web伺服器和Tomcat之間傳輸資料,這比HTTPP獲得更好的效率,但比較複雜不通用。

      通常用於將Tomcat整合到現有Apache伺服器中,並且希望Apache處理Web應用程式中包含的靜態內容或SSL連線處理的情況,即Apache伺服器作為代理伺服器。Apache與Tomcat結合可以由mod_jk或mod_proxy模組來實現,但它們的使用範圍不同:mod_jk支援apache/1.3,apache/2.0,mod_proxy支援apache/2.2+。

       預設配置檔案中定義了一個監聽8009埠的AJP聯結器,其實官方文件說明這種聯結器不久後不再支援,一般用得不多,就不再多介紹了。

      更多AJP 1.3聯結器配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The AJP Connector

    

       定義聯結器時可以配置的屬性非常多,但通常定義HTTP聯結器時必須定義的屬性只有"port",定義AJP聯結器時必須定義的屬性只有"protocol",因為預設的協議為HTTP。以下為常用屬性的說明(更多請參考前面給出的文件):

      1) 、address:指定聯結器監聽的地址,預設為所有地址,即0.0.0.0;

      2)、 maxThreads:支援的最大併發連線數,預設為200;

      3)、port:監聽的埠,預設為0;

      4) 、protocol:聯結器使用的協議,預設為HTTP/1.1,定義AJP協議時通常為AJP/1.3;

      5) 、redirectPort:如果某聯結器支援的協議是HTTP,當接收客戶端發來的HTTPS請求時,則轉發至此屬性定義的埠;

      6)、connectionTimeout:等待客戶端傳送請求的超時時間,單位為毫秒,預設為60000,即1分鐘;

      7)、enableLookups:是否通過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名;預設為true;

      8) 、acceptCount:設定等待佇列的最大長度;通常在tomcat所有處理執行緒均處於繁忙狀態時,新發來的請求將被放置於等待佇列中;

5-4、Engine元件

       Engine(引擎)表示與特定Service相關聯的整個請求處理機制,即Servlet容器引擎。它接收和處理來自一個或多個聯結器的所有請求,並檢查每一個請求的HTTP首部資訊以辨別此請求應該發往哪個Host或Context,並將完成的響應返回到聯結器,以便最終傳輸回客戶端。

       一個Engine元素必須巢狀在Service元素內,它可以包含多個host元件,還可以包含Realm、Listener和Valve等子容器。


       常用的屬性定義:

      1、defaultHost:Tomcat支援基於FQDN的虛擬主機,這些虛擬主機可以通過在Engine容器中定義多個不同的Host元件來實現;但如果此引擎的聯結器收到一個發往非非明確定義虛擬主機的請求時則需要將此請求發往一個預設的虛擬主機進行處理,因此,在Engine中定義的多個虛擬主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名。

      2、name:Engine元件的名稱,用於日誌和錯誤資訊記錄時區別不同的引擎。

       如預設配置中定義了一個名為"Catalina"的Engine,而Engine裡包含一個Hots,並被配置為預設的虛擬主機。

      更多Engine配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The Engine Component

5-5、Host元件

       Host(虛擬主機)類似於Apache中的虛擬主機,但在Tomcat中只支援基於FQDN的"虛擬主機"。Host位於Engine容器中用於接收請求並進行相應處理,它是伺服器(例如"www.mycompany.com")的網路名稱與執行Tomcat的特定伺服器的關聯。

       客戶端通常使用主機名來標識他們希望連線的伺服器,但要使客戶端能夠使用其網路名稱連線到Tomcat伺服器,此名稱必須在管理所屬的Internet域的域名服務(DNS)伺服器中註冊。此主機名也包含在HTTP請求標頭中,Tomcat從HTTP頭中提取主機名,並查詢具有匹配名稱的主機;如果未找到匹配項,請求將路由到預設主機。

       一個Engine至少要包含一個Host元件,而在Host元素內可以嵌入與此虛擬主機關聯的Web應用程式的Context等元素。


       常用屬性說明:

      1)、name:此Host的FQDN虛擬主機名稱;

      2) 、appBase:此Host的webapps目錄,即存放非歸檔的web應用程式的目錄或歸檔後的WAR檔案的目錄路徑;可以使用基於$CATALINA_HOME的相對路徑;

       3)、autoDeploy:在Tomcat處於執行狀態時放置於appBase目錄中的應用程式檔案是否自動進行deploy;預設為true;

      4) 、unpackWars:在啟用此webapps時是否對WAR格式的歸檔檔案先進行展開;預設為true。

       如預設配置中定義了一個主機名為"localhost"的Host,而webapps目錄為$ CATALINA_BASE相對的"webapps",即前面說到的預設目錄,也可用絕對路徑來配置其他目錄。

       更多Host配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The Host Component

5-6、Context元件

       Context(上下文)表示在特定虛擬主機中執行的Web應用程式,一個Context對應一個Web應用程式,而裡面的Wrapper可以理解為一個個Servlet程式

       Context需要根據其定義的上下文路徑(path)匹配請求URI的最長字首(除主機名外)來選擇。一旦選擇,可以由docBase來找到該上下文將對應的web應用程式部署目錄,由目錄中web.xml定義的servlet對映選擇一個合適的servlet來處理傳入的請求。

       一個Host可以有多個Context,通常不建議定義在server.xml檔案中,而是每一個context定義使用一個單獨的XML檔案進行,其檔案的目錄      為$CATALINA_HOME/conf/<engine name>/<host name>。

       可以看到server.xml中預設沒有定義Context,但存在/conf/context.xml,在前面說Tomcat配置檔案時曾介紹過,context.xml為部署與此Tomcat例項上所有的web應用程式提供的預設配置檔案,刪除註釋後其內容如下:

       通過它可以找到預設的和各web應用程式提供部署描述符檔案web.xml,/conf/web.xml定義了Tomcat提供的預設Servlet處理程式,主要用來處理靜態資源請求;而各webapp的web.xml可以定義其他的動態請求url對映到不同Servlet程式處理。

       常用的屬性定義有:

      1) 、docBase:相應的Web應用程式的存放位置;也可以使用相對路徑,起始路徑為此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關係,比如,如果appBase為deploy,而docBase絕不能為deploy-bbs類的名字;

      2) 、path:相對於Web伺服器根路徑而言的URI;如果為空"",則表示為此webapp的根路徑;如果context定義在一個單獨的xml檔案中,此屬性不需要定義;

      3)、reloadable:是否允許重新載入此context相關的Web應用程式的類;預設為false;

       更多Context配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The Context Component

5-7、Realm元件

       Realm(領域)表示分配給這些使用者的使用者名稱,密碼和角色(類似於Unix組)的"資料庫"。一個Realm(領域)表示一個安全上下文,它是一個授權訪問某個給定Context的使用者列表和某使用者所允許切換的角色相關定義的列表。

       Catalina容器(Engine,Host或Context)可以包含不超過一個Realm元素(但自身可以巢狀)。此外,與引擎或主機關聯的領域由低階容器自動繼承,除非下級容器顯式定義了自己的領域。如果沒有為引擎配置領域,將自動為引擎配置空領域的例項。

       定義Realm時惟一必須要提供的屬性是classname,它是Realm的多個不同實現,用於表示此Realm認證的使用者及角色等認證資訊的存放位置,Tomcat中實現了多種不同的Realm,如下:

      UserDatabaseRealm:基於UserDatabase檔案(通常是tomcat-user.xml)實現使用者認證,它實現是一個完全可更新和持久有效的MemoryRealm,因此能夠跟標準的MemoryRealm相容;它通過JNDI實現;

      LockOutRealm:提供鎖定功能,以便在給定時間段內出現過多的失敗認證嘗試時提供使用者鎖定機制;

      JAASRealm:基於Java Authintication and Authorization Service實現使用者認證;

      JDBCRealm:通過JDBC訪問某關係型資料庫表實現使用者認證;

      JNDIRealm:基於JNDI使用目錄服務實現認證資訊的獲取;

      MemoryRealm:查詢tomcat-user.xml檔案實現使用者資訊的獲取。

       可以看到預設配置檔案中定義了一個LockOutRealm並巢狀一個UserDatabaseRealm的Realm來通過tomcat-user.xml檔案實現使用者認證。

       更多Realm配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The Realm Component

5-8、Valve元件

       Valve(閥門)類似於過濾器,用來攔截請求並在將其轉至目標之前進行某種處理操作;它可以工作於Engine和Host/Context之間、Host和Context之間以及Context和Web應用程式的某資源之間。

       Valve常被用來記錄客戶端請求、客戶端IP地址和伺服器等資訊,這種處理技術通常被稱作請求轉儲(request dumping)。請求轉儲valve記錄請求客戶端請求資料包中的HTTP首部資訊和cookie資訊檔案中,響應轉儲valve則記錄響應資料包首部資訊和cookie資訊至檔案中。

       一個容器內可以建立多個Valve,而且Valve定義的次序也決定了它們生效的次序。不同型別的Value具有不同的處理能力,Tomcat中實現了多種不同的Valve:

      AccessLogValve:訪問日誌Valve

      ExtendedAccessValve:擴充套件功能的訪問日誌Valve

      RequestDumperValve:請求轉儲Valve;

      RemoteAddrValve:基於遠端地址的訪問控制;

      RemoteHostValve:基於遠端主機名稱的訪問控制;

      SemaphoreValve:用於控制Tomcat主機上任何容器上的併發訪問數量;

      ReplicationValve:專用於Tomcat叢集架構中,可以在某個請求的session資訊發生更改時觸發session資料在各節點間進行復制;

      SingleSignOn:將兩個或多個需要對使用者進行認證webapp在認證使用者時連線在一起,即一次認證即可訪問所有連線在一起的webapp;

      ClusterSingleSingOn:對SingleSignOn的擴充套件,專用於Tomcat叢集當中,需要結合ClusterSingleSignOnListener進行工作。

       通過屬性className定義相關的java實現的類名來選擇Value。如預設配置檔案中定義了一個AccessLogValve的Value來記錄訪問日誌到檔案中。

       更多Valve配置資訊請參考:《Apache Tomcat 8 Configuration Reference》 The Valve Component

5-9、其他元件

1、Logger

      日誌記錄器(Logger):用於記錄元件內部的狀態資訊,可被用於除Context之外的任何容器中。日誌記錄的功能可被繼承,因此,一個引擎級別的Logger將會記錄引擎內部所有元件相關的資訊,除非某內部元件定義了自己的Logger元件(前面介紹的AccessLogValve使用自包含的邏輯來寫它的日誌檔案,以獲得更好的效率)。

2、Listener

      Listener用於建立和配置LifecycleListener物件,而LifecycleListener通常被開發人員用來建立和刪除容器。

3、Loader

      Java的動態裝載功能是其語言功能強大表現之一,Servlet容器使用此功能在執行時動態裝載servlet和它們所依賴的類。Loader可以用於Context中控制java類的載入,即WebApp類載入器

4、Resources

      經常用於實現在Context中指定需要裝載的但不在Tomcat本地磁碟上的應用資源,如Java類,HTML頁面,JSP檔案等。

5、GlobalNamingResources

      應用於整個伺服器的JNDI對映,此可以避免每個Web應用程式都需要在各自的web.xml建立,這在web應用程式以WAR的形式存在時尤為有用。它通常可以包含三個子元素:Environment、Resource和ResourceEnvRef。

6、WatchedResource

      WatchedResource可以用於Context中監視指定的webapp程式檔案的改變,並且能夠在監視到檔案內容發生改變時重新裝載此檔案。

7、Manager

      Manger物件用於實現HTTP會話管理的功能,Tomcat中有5種Manger的實現:

1) 、StandardManager

      Tomcat6的預設會話管理器,用於非叢集環境中對單個處於執行狀態的Tomcat例項會話進行管理。當Tomcat關閉時,這些會話相關的資料會被寫入磁碟上的一個名叫SESSION.ser的檔案,並在Tomcat下次啟動時讀取此檔案。

2) 、PersistentManager

      當一個會話長時間處於空閒狀態時會被寫入到swap會話物件,這對於記憶體資源比較吃緊的應用環境來說比較有用。

3)、DeltaManager

      屬於ClusterManager,用於Tomcat叢集的會話管理器,它通過將改變了會話資料同步給叢集中的其它節點實現會話複製。這種實現會將所有會話的改變同步給叢集中的每一個節點,也是在叢集環境中用得最多的一種實現方式。

但叢集節點較多時,會消耗大量的網路資源,一般適用於3、4個節點的叢集。

4)、BackupManager

      屬於ClusterManager,用於Tomcat叢集的會話管理器,與DeltaManager不同的是,某節點會話的改變只會同步給叢集中的另一個而非所有節點。

5)、SimpleTcpReplicationManager

      Tomcat4時用到的版本,過於老舊了。

8、Stores

      PersistentManager必須包含一個Store元素以指定將會話資料儲存至何處。這通常有兩種實現方式:FileStore和JDBCStore。

9、Cluster

      專用於配置Tomcat叢集的元素,可用於Engine和Host容器中。在用於Engine容器中時,Engine中的所有Host均支援叢集功能。在Cluster元素中,需要直接定義一個Manager元素,這個Manager元素有一個其值為org.apache.catalina.ha.session.DeltaManager或org.apache.catalina.ha.session.BackupManager的className屬性。同時,Cluster中還需要分別定義一個Channel和ClusterListener元素。

10、Channel

      用於Cluster中給叢集中同一組中的節點定義通訊"通道"。Channel中需要至少定義Membership、Receiver和Sender三個元素,此外還有一個可選元素Interceptor。

11、Membership

      用於Channel中配置同一通訊通道上節點叢集組中的成員情況,即監控加入當前叢集組中的節點並在各節點間傳遞心跳資訊,而且可以在接收不到某成員的心跳資訊時將其從叢集節點中移除。Tomcat6中Membership的實現是org.apache.catalina.tribes.membership.McastService。

12、Sender

      用於Channel中配置"複製資訊"的傳送器,實現傳送需要同步給其它節點的資料至叢集中的其它節點。傳送器不需要屬性的定義,但可以在其內部定義一個Transport元素。

13、Transport

      用於Sender內部,配置資料如何傳送至叢集中的其它節點。Tomcat有兩種Transport的實現:

1) 、PooledMultiSender

      基於Java阻塞式IO,可以將一次將多個資訊併發傳送至其它節點,但一次只能傳送給一個節點。

2)、PooledParallelSener

      基於Java非阻塞式IO,即NIO,可以一次傳送多個資訊至一個或多個節點。

14、Receiver

       用於Channel定義某節點如何從其它節點的Sender接收復制資料,Tomcat中實現的接收方式有兩種BioReceiver和NioReceiver。 

更多元件及配置資訊請參考:

《Apache Tomcat 8 Configuration Reference》

《Apache Tomcat User Guide》

 

       到這裡,我們對Tomcat有了一個基本的認識:瞭解到Tomcat技術與在Web中的應用、以及Tomcat基本框架及相關配置,後面將更深入瞭解Tomcat:瞭解JavaEE Servlet技術、Tomcat中的一些實現細節,而後再來配置Tomcat+nginx+keepalived的動靜分離、會話保持的高可用叢集……