apache整合tomcat部署集群

近日,由于公司項目需要,所以學習了apache整合tomcat以及集群的一些知識。

  所以做下筆記日后回顧可以用到。

  apache只有處理靜態事物的能力, 而tomcat的強項就是處理動態的請求,所以apache和tomcat整合相互取長補短,由apache作為入口,如果是請求靜態頁面或者是靜態文件,由apache直接提供,如果是請求動態頁面,則讓apache分發到tomcat,由tomcat處理以后再響應給客戶端。

apache和tomcat的整合需要準備的一些軟件列表:

圖1

說明:

1.首先安裝apache服務(httpd-2.2.25-win32-x86-no_ssl.msi),默認是80端口的,如果80端口被占用,則無法安裝成功;

  用一下命令可以查詢80端口被哪個進程id占用,netstat -aon|findstr "80"?

  再用一下命令查詢該進程id是代表哪個進程,tasklist|findstr "2016"

  apache檢查錯誤方法:進入cmd 然后進入 Apache安裝目錄(具體為你自己的安裝目錄)\bin> httpd.exe -w -n "Apache2" -k start

2.打開apache的安裝目錄下面的modules文件夾,把圖1中的mod_jk.so文件放入

3.在apache安裝目錄的conf文件夾下面配置mod_jk.conf文件,如果沒有則新增一個,內容為:

圖2

  圖2中的第一行,指定mod_jk的配置文件,配置tomcat以及負載均衡

  圖2中的第二行和第三行表示,當請求后綴我jsp或者是do的時候,apache把請求轉發給tomcat來處理

3.配置完上面的配置文件以后,在apache的安裝目錄下的httpd.conf文件的末尾,把mod_jk.so模塊以及mod_jk.conf配置文件加載進去

圖3

4.配置apache的安裝目錄下的workers.properties文件,如果該文件不存在,自己新增一個即可

圖4

介紹下圖4中的各個參數:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#server
worker.list = controller????? #控制器名稱
#========tomcat1========
worker.tomcat1.port=8009??????#ajp協議的端口,如果2個tomcat部署在同一個服務器中,那個ajp端口需要不同
worker.tomcat1.host=127.0.0.1?#tomcat的所在主機的ip,如果是本機,則寫本機的ip即可
worker.tomcat1.type=ajp13???? #協議類型
worker.tomcat1.lbfactor=1?????#負載因子
#========tomcat2========
worker.tomcat2.port=9009
worker.tomcat2.host=127.0.0.1
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1????#如果2個tomcat,該參數相同,表示等比例,如果想tomcat負載多一點,只要把這個參數改的大一點即可,具體多少還是得看情況
??
#========controller,負載均衡控制器========
worker.controller.type=lb
worker.controller.retries=3??#請求失敗以后重試次數
worker.controller.balance_workers=tomcat1,tomcat2?? #controller控制的tomcat的名稱,分別為tomcat1和tomcat2,由tomcat中的server.xml中設值
worker.controller.sticky_session=false????#回話是否有粘性,false表示無粘性,同一個回話的請求會到不同的tomcat中處理
worker.controller.sticky_session_force=false?#當一個節點蹦了,如果設值為true,那么服務器返回500錯誤給客戶端,如果設值為false,則轉發給其他的tomcat,但是會丟失回話信息
#更詳細的參數說明:http://tomcat.apache.org/connectors-doc/reference/workers.html

5.安裝好apache服務以后再準備好tomcat(兩個tomcat作為例子)

圖5

tomcat需要配置server.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?xml version='1.0'?encoding='utf-8'?>
<!--如果多個tomcat部署在同一臺服務器中,此處的關閉tomcat的端口需要更改,不能沖突-->
<Server port="8005"?shutdown="SHUTDOWN">
??<Listener className="org.apache.catalina.core.AprLifecycleListener"?SSLEngine="on"?/>
??<Listener className="org.apache.catalina.core.JasperListener"?/>
??<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"?/>
??<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"?/>
??<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"?/>
??<GlobalNamingResources>
????<Resource name="UserDatabase"?auth="Container"
??????????????type="org.apache.catalina.UserDatabase"
??????????????description="User database that can be updated and saved"
??????????????factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
??????????????pathname="conf/tomcat-users.xml"?/>
??</GlobalNamingResources>
??<Service name="Catalina">
?????
????<Executor name="tomcatThreadPool"?namePrefix="catalina-exec-"
????????maxThreads="300"?minSpareThreads="4"/>
????<!--如果使用apache整合,那么此配置可以注釋,因為apache是通過ajp協議來通信的,tomcat并不會直接暴露出來-->
????<Connector port="8080"?protocol="HTTP/1.1"
???????????????connectionTimeout="20000"
???????????????redirectPort="8443"?maxThreads="300"/>
????
?????<!-- Define an AJP?1.3?Connector on port?8009?--><br>??? <!--如果多個tomcat部署在同一個服務器中,此處的ajp協議端口必須不一樣,并且需要增加jvmRoute屬性,該屬性的值即為workers.properties中的tomcat的名稱-->
????<Connector port="8009"?protocol="AJP/1.3"?redirectPort="8443"?jvmRoute="tomcat1"/>
????<Engine name="Catalina"?defaultHost="localhost">
??????<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
?????
??????<Realm className="org.apache.catalina.realm.LockOutRealm">
???????
????????<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
???????????????resourceName="UserDatabase"/>
??????</Realm>
??????<Host name="localhost"??appBase="webapps"
????????????unpackWARs="true"?autoDeploy="true">
????????<Valve className="org.apache.catalina.valves.AccessLogValve"?directory="logs"
???????????????prefix="localhost_access_log."?suffix=".txt"
???????????????pattern="%h %l %u %t "%r" %s %b"?/>
??????</Host>
????</Engine>
??</Service>
</Server>

  另外就是在web項目的web.xml中添加屬性<distributable/>,用于告訴web容器,該項目屬于分布式項目,不然無法session replication

6.?靜態文件直接由apache響應,所需需要把部署的項目中的靜態文件放在apache的安裝目錄下的htdocs文件夾下,偷懶的方法就是直接把tomcat的webapps中的項目拷貝一份放到htdocs中,所以htdocs的作用與tomcat的webapps類似

7.部署的時候經常會出現一些錯誤,當遇到錯誤的時候我經常需要查看日志文件,我經常查看的日志有apache的日志以及tomcat的日志

圖6

apache安裝目錄下的logs文件夾下就存放這apache的相關日志

access.log文件用于記錄apache接收到請求以及響應狀態的日志

error.log文件用于記錄apache的運行錯誤

httpd.pid文件用于記錄進程pid

mod_jk.log文件用于記錄請求轉發給tomcat的日志

圖7

tomcat的日志:

localhost_access_log.日期.txt文件用于記錄tomcat接收到的請求以及響應的狀態等,作用于apache的access.log類似

catalina.日期.txt文件用于記錄tomcat啟動時候控制臺的一些信息以及服務端錯誤信息

localhost.日期.txt文件用于記錄站點訪問信息,Tomcat下內部代碼丟出的日志,文件名localhost.日期.log(jsp頁面內部錯誤的異常,org.apache.jasper.runtime.HttpJspBase.service類丟出的,日志信息就在該文件!)

8.官方文檔中對于集群中session repliction的要求:

圖8

總共8點:

  1).session中的屬性必須全部為實現Serializable

  2).tomcat的server.xml配置文件中的<Cluster>節點的注釋去掉

  3).就是用于用于檢測當前的響應是否涉及Session數據的更新,如果是則啟動Session拷貝操作,這個屬性后面會有一個filter屬性,filter即過濾不需要Session拷貝操作的內容

  4).如果tomcat在同一個機器上的,那么確保tcpListenerPort端口的唯一性

  5).web.xml中必須添加<distributable/>屬性

  6).如果使用mod_jk,那么需要在server.xml中的<Engine/>節點中添加jvmRoute=“tomcat1”屬性,事實證明在ajp端口那邊添加也是可行的

  7).確保所有的tomcat時鐘同步,使用ntp服務器來達成

  8).確保負載均衡器的sticky_session=false已經設置,即設置為非粘性

?

參考:

  1.https://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

  2.http://www.cnblogs.com/dennisit/p/3370220.html

  3.http://502245466.blog.51cto.com/7559397/1280152

?

?

轉載博客,原博客地址:http://www.cnblogs.com/God-froest/p/apache_tomcat.html

轉載于:https://www.cnblogs.com/rainy-shurun/p/5211020.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375059.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cpk

CPK&#xff1a;Complex Process Capability index 的縮寫&#xff0c;是現代企業用于表示制程能力的指標。制程能力是過程性能的允許最大變化范圍與過程的正常偏差的比值。制程能力研究在於確認這些特性符合規格的程度&#xff0c;以保證制程成品不符規格的不良率在要求的水準…

靶場練習第九天~vulnhub靶場之dc-1

一、環境搭建 靶場下載鏈接: 百度網盤 請輸入提取碼 提取碼: ih67 1.查看kali的ip&#xff1a;ifconfig 二、信息收集 1.使用namp命令 主機探測: nmap -sP 192.168.101.0/24 查看靶機開放端口號和服務:nmap -A 192.168.101.111 發現開放80端口,訪問一下192.168.101.111 Dru…

4~20mA模擬輸出(電流環)應用筆記(轉)

4~20mA模擬輸出&#xff08;電流環&#xff09;應用筆記 bpesun163.com 前言 4-20mA.DC(1-5V.DC)信號制是國際電工委員會(IEC):過程控制系統用模擬信號標準。 在工業現場&#xff0c;如果采集的信號經調理后是電壓信號并且進行長線傳輸&#xff0c;會產生以下問題&#xff1a; …

ADO多線程數據庫查詢

ADO多線程數據庫查詢通常會出現3個問題&#xff1a;1、CoInitialize 沒有調用 &#xff08;CoInitialize was not called&#xff09;&#xff1b;所以&#xff0c;在使用任何dbGo對象前&#xff0c;必須手 調用CoInitialize和CoUninitialize。調用CoInitialize失敗會產生"…

PHPExcel

excel文檔處理對象主要用來管理我們的excel文檔&#xff0c;怎么來管理&#xff08;通過屬性和方法來管理&#xff09;&#xff1f;大家知道&#xff0c;類主要是由屬性和方法來組成&#xff0c;通過php程序的手段來管理excel文檔&#xff0c;其實就是通過本對象的屬性和方法來…

靶場練習第十天~vulnhub靶場之dc-2

一、準備工作 靶機下載地址鏈接: 百度網盤 請輸入提取碼 提取碼: ib86 二、信息收集 1.nmap的信息收集 &#xff08;1&#xff09;使用nmap 192.168.101.0/24&#xff0c;發現靶機地址為192.168.101.115 &#xff08;2&#xff09;對靶機做進一步探測&#xff0c;發現靶機開…

Ubuntu 14.10 創建虛擬網卡實現橋接網絡

目標需求&#xff1a;在Ubuntu主機創建一張虛擬網卡&#xff0c;使得搭建在VirtualBox中的其他主機能借助虛擬網卡構建的局域網進行相互間的通訊 步驟一&#xff1a;準備工具包 安裝 uml-utilities 以及 bridge-utils sudo apt-get install uml-utilities bridge-utils 步驟二&…

iOS定時器-- NSTimer 和CADisplaylink

iOS定時器-- NSTimer 和CADisplaylink 一、iOS中有兩種不同的定時器&#xff1a; 1. NSTimer&#xff08;時間間隔可以任意設定&#xff0c;最小0.1ms&#xff09;// If seconds is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 millisecond…

靶場練習第十一天~vulnhub靶場之dc-3

一、準備工作 1.靶場鏈接: 百度網盤 請輸入提取碼 提取碼: 48d3 2.啟動靶場后會遇到如下情況&#xff1a; 2-1具體解決辦法如下&#xff1a; 啟動成功 3.查看kali的ip&#xff1a;ifconfig 二、信息收集 1.nmap的信息收集 &#xff08;1&#xff09;尋找靶機的ip&#xf…

UNIX環境高級編程一書中apue.h找不到

apue.h是作者為了方便自己寫的一個庫&#xff0c;在http://www.apuebook.com選擇你對應書中的source code&#xff0c;然后解壓壓縮包中在/include/apue.h以及/lib/error.c復制到你文件系統中/usr/include中即可。另外在apue.h中#include "error.c"即可。這樣gcc編譯…

大齡程序員怎樣渡過中年危機?(轉)

大齡程序員怎樣渡過中年危機&#xff1f; 作者前言&#xff1a; 話說再有十幾天就進入2016年了&#xff0c;想到這&#xff0c;我不由得五味雜陳。2016年對我來說是一個特殊的年份&#xff0c;因為我即將40歲了&#xff0c;人生正式告別青年期&#xff0c;進入中年了。 在娛樂圈…

靶場練習第十二天~vulnhub靶場之dc-4

一、準備工作 1.靶機下載鏈接 鏈接: 百度網盤 請輸入提取碼 提取碼: 3hq4 2.用ifconfig查看kali的ip 二、信息收集 1.nmap的信息收集 &#xff08;1&#xff09;主機發現 命令&#xff1a;nmap 192.168.101.0/24 &#xff08;2&#xff09;掃描靶機詳細信息 發現主機 192…

網絡命令-nc(二)

繼續Netcat 這個命令吧 1&#xff1a;遠程拷貝文件 在本地輸出 文件debian.img 到 192.168.5.40 主機12345端口監聽 nc -v 192.168.5.40 12345 < debian.img 在192.168.5.40 主機12345端口監聽&#xff0c;將文件指定為debian-copy.img nc -l -v 12345 > debian-copy.im…

靶場練習第十三天~vulnhub靶場之dc-5

一、準備工作 1.靶機環境搭建 下載鏈接: https://pan.baidu.com/s/1csvuJ_NVCBvVr75KhxyM3Q?pwdxie7 提取碼: xie7 2.kali的ip 命令&#xff1a;ifconfig 3.kali和靶機的都設置為NAT模式 二、信息收集 1.nmap的信息收集 &#xff08;1&#xff09;尋找靶機的ip 命令&…

Ubuntu中輸入輸出重定向及管道技術簡述

輸出 1、標準輸出 定義&#xff1a;程序在默認情況下輸出結果的地方&#xff08;stdout&#xff09;。 2、輸出重定向 定義&#xff1a;用于把數據的輸出轉移到另一個地方去。 3、Ubuntu中例子 $ls > ~/ls_out ##不顯示在顯示器上而是輸入到文件ls_out中 uname -r > ls_…

activex打包

http://www.cnblogs.com/weiwin/p/4493835.html activeX 打包 原文 http://www.docin.com/p-409284488.html CAB打包文檔說明 文檔目的本文檔的目的在于說明將ocx和dll以及相關的文件打包成一個CAB包&#xff0c;以便在網頁下調用ocx控件時免去手工將dll和其他一下文件拷貝到客…

靶場練習第十四天~vulnhub靶場之dc-6

一、準備工作 kali和靶機都選擇NAT模式&#xff08;kali與靶機同網段&#xff09; 1.靶場環境 下載鏈接: 百度網盤 請輸入提取碼 提取碼: bazx 2.kali的ip 命令:ifconfig 3.靶機的ip 掃描靶機ip 命令&#xff1a;sudo arp-scan -l 二、信息收集 1.nmap的信息收集 &#…

最短路徑Dijkstra算法和Floyd算法整理、

轉載自&#xff1a;http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路徑—Dijkstra算法和Floyd算法 Dijkstra算法 1.定義概覽 Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法&#xff0c;用于計算一個節點到其他所有節點的最短路徑。主要特點是以…

Java Script 中 ==(Equal) 和 === (Identity Equal) 的區別和比較算法邏輯

判斷兩個變量是否相等在任何編程語言中都是非常重要的功能。 JavaScript 提供了 和 兩種判斷兩個變量是否相等的運算符&#xff0c;但我們開始學習的時候 JavaScript 的時候&#xff0c;就被一遍又一遍的告知&#xff1a; 要求變量的類型和值均相等&#xff0c;才能返回true…

靶場練習第十五天~vulnhub靶場之dc-7

一、準備工作 kali和靶機都選擇NAT模式&#xff08;kali與靶機同網段&#xff09; 1.靶場環境 下載鏈接:https://download.vulnhub.com/dc/DC-7.zip 2.kali的ip 命令:ifconfig 3.靶機的ip 掃描靶機ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 &#xff08;1&…