Apache連線多臺tomcat,透過JK2

chinaboywg發表於2014-10-23

本文只涉及到Apache如何配置連線到多臺tomcat,同時將使用者的session繫結到最初訪問的tomcat上去。不討論Apachetomcat的安裝,其他配置,以及tomcatcluster等等。

[@more@]

Apache連線多臺tomcat,透過JK2

本文只涉及到Apache如何配置連線到多臺tomcat,同時將使用者的session繫結到最初訪問的tomcat上去。不討論Apachetomcat的安裝,其他配置,以及tomcatcluster等等。

目錄

Apache2.0.53

Tomcat4.1.18

Connector採用JK2

作業系統: windowsxp Linux上都試過

連線單臺tomcat

Apachetomcat連線,配置檔案為: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後,下面有多種方式將2worker應用到系統中

方式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的做法,突然醒悟到應該和workerid有關係。在配置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中做上述修改:

另一workertomcat做同樣處理,發現問題解決了,使用者最初連線到哪個tomcat,以後的使用也就一直使用到這個tomcat,而且增加了tomcatid後,發現使用者的sessionid也發生了變化: 原來的sessionid只是一串數字,但是增加了tomcatid後,發現tomcatid增加到sessionid後面去了:

6906B1F759C99DCF0FF3D56DBC564965.tomcat30
session後面多了“.tomcat30

而沒有設定tomcatid的時候,sessionid就是前面一串字。從這裡看出來,apache就是判斷這串內容轉發到不同的tomcat上去的。

stickySession設定成0,發現Apache傳送過來的Session每次分配一個,看來stickySession設定成功了(文件上根本沒有提到stickySession tomcatidroute相關)

好壞

Apache預設的時候,對於新使用者採用round-rabin方式進行分配tomcatApache自己帶有檢測tomcat好壞的功能,如果一臺tomcat關閉後,Apache會自動將後面所有的連線都轉向到其他的tomcat上去。這時如果已經配置好的tomcat開起來後,Apache會不會自動監測到? Tomcat的文件上說能夠做到的,在lb中配置一下recovery就可以了(前一天已經仔細的看過了tomcat的文件,寫的太簡單了,就是這樣也看到23點鐘)。

文件上說,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

中的改動

jvmRoute="tomcat39">

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23500957/viewspace-1307920/,如需轉載,請註明出處,否則將追究法律責任。

相關文章