Apache連線多臺tomcat,透過JK2
本文只涉及到Apache如何配置連線到多臺tomcat,同時將使用者的session繫結到最初訪問的tomcat上去。不討論Apache、tomcat的安裝,其他配置,以及tomcat的cluster等等。
[@more@]Apache連線多臺tomcat,透過JK2
本文只涉及到Apache如何配置連線到多臺tomcat,同時將使用者的session繫結到最初訪問的tomcat上去。不討論Apache、tomcat的安裝,其他配置,以及tomcat的cluster等等。
目錄
Apache
Tomcat
Connector採用JK2
作業系統: 在windowsxp 和 Linux上都試過
連線單臺tomcat
Apache和tomcat連線,配置檔案為:workers2.properties。如果透過mod_jk, 配置檔案為workers.properties,這個網上資料太多了,這裡不討論 (怎麼編譯、安裝動態連線庫自己查資料,tomcat.apache.org上面寫的非常詳細,照著做就可以了)
配置檔案workers2.properties: --- 具體的配置檔案引數什麼意思,上tomcat.apache.org上去查,我也不是很清楚,現在夠用即可.
[shm] file=${serverRoot}/logs/shm.file size=1048576 [channel.socket:172.18.3.39:8009] info=Ajp13 forwarding over socket keepalive=1 port=8009 host=172.18.3.39 #配置了一個worker [ajp13:172.18.3.39:8009] channel=channel.socket:172.18.3.39:8009 [uri:/*.jsp] Worker=ajp13:172.18.3.39:8009 |
連線多臺tomcat
Apache連線tomcat透過worker方式進行連線,如果要連線多臺tomcat,只需要配置多個worker就可以了。
配置檔案:workers2.properties
[shm] file=${serverRoot}/logs/shm.file size=1048576 # 一個worker [channel.socket:172.18.3.39:8009] info=Ajp13 forwarding over socket keepalive=1 port=8009 host=172.18.3.39 [ajp13:172.18.3.39:8009] channel=channel.socket:172.18.3.39:8009 #另一個worker [channel.socket:172.18.3.30:8009] info=Ajp13 forwarding over socket keepalive=1 port=8009 host=172.18.3.30 [ajp13:172.18.3.30:8009] channel=channel.socket:172.18.3.30:8009 配置好worker後,下面有多種方式將2個worker應用到系統中 方式1: 採用worker list的方式 [uri:/*.jsp] Worker.list=ajp13:172.18.3.39:8009, ajp13:172.18.3.30:8009 方式2:採用lb的方式 [lb:balanced] worker=ajp13:172.18.3.30:8009 worker=ajp13:172.18.3.39:8009 stickySession=1 [uri:/*.jsp] group=balanced |
透過上述2種方式,都可以將Apache連線到多臺tomcat上。但是發現問題,應用是需要登陸的,透過上述的配置方式,發現每點選一次頁面,apache會連線到不同的tomcat,這樣造成了剛才的登陸實效。
如何使用stickySession
意思就是使用者剛上來,訪問的是哪個tomcat,以後他訪問的請求都往這個tomcat上發,直到使用者關閉了瀏覽器。
就是這個問題搞到凌晨3點半!上午到公司來又弄了半天。
查jk2的文件,說是設定lb的引數stickySession=1,這樣apache會根據sessionid,將使用者的請求傳送到原來使用的那臺tomcat上去的,又說了這個引數值預設就是1。那麼這個引數根本不需要進行配置的,但是現在發現每請求一次,apache都切換一次tomcat。
這個問題只能到網上去查,找了老半天,發現問這個問題的人還真的不少。問得人多沒有人回答。耐著性子一個個點下去看。發現在有一篇文件中提到修改tomcat的配置,
|
在tomcat的配置檔案server.xml中,將jvmRoute引數設定成和tomcatid一樣,再聯絡一下看其他的關於Apache處理worker的做法,突然醒悟到應該和worker的id有關係。在配置worker的地方將這2個引數加進去: tomcatid, route
[channel.socket:172.18.3.39:8009] info=Ajp13 forwarding over socket debug=0 keepalive=1 port=8009 host=172.18.3.39 tomcatid=tomcat39 route=tomcat39 注: l 此處的tomcatid, route 的值必須和 jvmRoute的值設定成一樣 ---- 文件上這麼寫的,沒有除錯過寫成不一樣情況如何 l 連線配置成lb方式 |
然後再tomcat的配置檔案server.xml中做上述修改:
|
另一worker、tomcat做同樣處理,發現問題解決了,使用者最初連線到哪個tomcat,以後的使用也就一直使用到這個tomcat,而且增加了tomcatid後,發現使用者的sessionid也發生了變化: 原來的sessionid只是一串數字,但是增加了tomcatid後,發現tomcatid增加到sessionid後面去了:
6906B |
而沒有設定tomcatid的時候,sessionid就是前面一串字。從這裡看出來,apache就是判斷這串內容轉發到不同的tomcat上去的。
將stickySession設定成0,發現Apache傳送過來的Session每次分配一個,看來stickySession設定成功了(文件上根本沒有提到stickySession和 tomcatid、route相關)
好壞
Apache預設的時候,對於新使用者採用round-rabin方式進行分配tomcat,Apache自己帶有檢測tomcat好壞的功能,如果一臺tomcat關閉後,Apache會自動將後面所有的連線都轉向到其他的tomcat上去。這時如果已經配置好的tomcat開起來後,Apache會不會自動監測到? Tomcat的文件上說能夠做到的,在lb中配置一下recovery就可以了(前一天已經仔細的看過了tomcat的文件,寫的太簡單了,就是這樣也看到2,3點鐘)。
文件上說,recovery的預設設定的時間是60second,在除錯期間,將這個設定時間調的短一些,設定成10秒。
前臺訪問頁面,透過log判斷使用的是tomcat39,將正在使用的tomcat39關閉。再訪問頁面,發現自動切換到另一個tomcat上去了—tomcat30,不斷地訪問,請求會繫結這個tomcat。
將關閉的tomcat39重新開起來,使用者訪問的還是tomcat30,不會切換到tomcat39上去。將tomcat30關閉,訪問又切換到tomcat39上來了,這個證明Apache已經判斷到tomcat39恢復正常了。
[shm] file=${serverRoot}/logs/shm.file size=1048576 # worker 39 [channel.socket:172.18.3.39:8009] info=Ajp13 forwarding over socket debug=0 keepalive=1 port=8009 host=172.18.3.39 tomcatid=tomcat39 route=tomcat39 [ajp13:172.18.3.39:8009] channel=channel.socket:172.18.3.39:8009 # worker 30 [channel.socket:172.18.3.30:8009] info=Ajp13 forwarding over socket debug=0 keepalive=1 port=8009 host=172.18.3.30 tomcatid=tomcat30 route=tomcat30 [ajp13:172.18.3.30:8009] channel=channel.socket:172.18.3.30:8009 # load balance [lb:balanced] worker=ajp13:172.18.3.30:8009 worker=ajp13:172.18.3.39:8009 stickySession=1 recovery=10 [uri:/*.jsp] group=balanced |
中的改動
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23500957/viewspace-1307920/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Apache httpd-2.0.47 + Tomcat 5.0 OR tomcat-4.1.24 + jk2 +(轉)ApachehttpdTomcat
- CentOS-6.5-64bit 通過mod_jk連線Apache和TomcatCentOSApacheTomcat
- 如何透過DBeaver 連線 TDengine?
- apache-tomcat模式下連線池的問題?ApacheTomcat模式
- 透過Amoeba連線mysql報錯MySql
- 筆記本透過網線遠端連線另一臺非聯網臺式主機筆記
- adb透過wifi連線手機WiFi
- 臺達DVP系列PLC如何透過RS485連線到華為雲平臺
- SSH 透過跳板機連線目標機
- 樹莓派透過nmcli命令連線WIFI樹莓派WiFi
- apache 與jboss連線Apache
- appium如何連線多臺裝置APP
- Tomcat連線池使用Tomcat
- myeclipse連線tomcatEclipseTomcat
- gRPC(五)進階:透過TLS建立安全連線RPCTLS
- 如何設定透過TeamViewer連線群暉NASView
- Oracle透過gateway連線sqlserver2008OracleGatewaySQLServer
- 求助:如果透過weblogic的datasource獲取連線!!!Web
- Apache APISIX透過頁面配置路由ApacheAPI路由
- 通過外來鍵連線多個表
- MySQL sleep連線過多 解決辦法MySql
- 使用 Java 客戶端透過 HTTPS 連線到 EasysearchJava客戶端HTTP
- 透過WLAN測試驗證網路的連線性
- DOCKER簡明教程 : 透過容器連線REDIS資料庫DockerRedis資料庫
- Tomcat 的 JDBC 連線池TomcatJDBC
- tomcat連線池問題Tomcat
- Tomcat+Mysql連線池TomcatMySql
- tomcat 配置JDBC連線池TomcatJDBC
- Nagios透過check_http監控一臺web應用伺服器上多個tomcat服務iOSHTTPWeb伺服器Tomcat
- (五)透過Python的select監控多個描述符實現併發連線Python
- tomcat5.0.28中可以透過連線下載英文檔案,卻不能下載中文檔案,為什麼?Tomcat
- 【Mysql】連線數過多,應急處理方法MySql
- 記一次oracle透過dblink連線mysql實施OracleMySql
- 使用VB透過RFC連線並處理SAP資料例子
- 求救:jdbc與mysql透過Servlet操作後連線關閉不了JDBCMySqlServlet
- 透過PHP連線My SQL的兩種方法簡介(轉)PHPSQL
- C#/C++ 透過ODBC連線OceanBase Oracle租戶C#C++Oracle
- 某客戶系統tomcat連線池連線異常Tomcat