天天看點

Apache JK 配置

在介紹JK可配屬性之前,先了解一下它的幾個屬性配置的小知識:

JK的屬性設定格式如下:

worker.<worker name>.<directive>=<value>

a,起始位置永遠以worker為開頭,

b,directive為指令名稱,或稱之為屬性名稱

c,等号後面為所要設定的值

當然,如果你願意也可以在proerties檔案中自定義變量,格式如下:

<variable_name>=<value>

唯一要注意的一點是,變量名不要以worker開頭

worker屬性的繼承(屬性模版):

在實際的配置過程中,可以預先定義worker的一套屬性做為叢集中其它worker的模版。

“reference”屬性就是被用來做這件事情的,使woker之間的屬性複制變的相當的容易,如:

worker.worker1.reference=worker.worker2

接下來,将介紹幾個比較重要的JK屬性:

全局屬性僅有兩個:

#應用伺服器的逗号分隔的名稱清單,上面的例子已經用到

worker.list

#JK的全局池的維護時間間隔,秒為機關

worker.maintain

worker的私有屬性:

type:可以選值為, ajp13, ajp14, jni, lb or status。

AJP(Apache JServ Protocol version 1.3 ),用來在Tomcat與Apache之間通迅的協定,最大的優點就是速度很快。Tomcat社群推建用AJP113協定做為worker的通迅協定,是以用它的worker被稱之為AJP13 worker。

jni,這種類型的woker已經不被推薦使用

lb,為負載器的worker。

stauts, jkstatus,進入頁面察看負載均衡資訊

host: 預設值為localhost

設定worker主機的ip

prot:預設值為8009

設定worker主機的連接配接端口号(本例用的AJP協定,此端口号在server.xml中的Connector标簽中定義)

socket_timeout:預設為0

設定JK與遠端伺服器的Socket連接配接逾時秒數,如果超出此秒數則産生一個錯誤,并再次重試。如果為0,JK會一直等下去。

socket_connect_timeout:預設為socket_timeout*1000

以毫秒數為機關的socket_timeout

socket_keepalive:預設為False

防止防火牆切斷不在使用的連接配接,通過設定為True,通知作業系統向不在使用的連接配接發送KEEP_ALIVE消信。

ping_mode:

此屬性判斷以什麼方式判斷Tomcat是否可用,目前實作是向伺服器發送AJP13的空包(CPing)并且在指定時間内收到适當的響應(CPong),逾時首先參考connect_timeout,如果沒有則參考ping_timeout。一共提供四種判斷心跳的方法:

C(connect):在一個連接配接(連接配接是被複用的)生成前僅檢驗一次。

P(prepost):每次請求前都會判斷服務是否可用

I(interval):在時間間隔周期性的判斷服務是否可用

A:以上所有的組合

ping_timeout:預設為10000

毫秒機關,用來做CPong的逾時

connection_ping_interval:預設為0 / (ping_timeout/1000)*10

ping_mode中所使用的時間間隔

connection_pool_size:

為了提高與Tomcat通迅的性能,JK會維護多個長連接配接做為一個池。它被用來設定每個WebServer(Apache)子程序的最大連接配接數。注意,Apache2.x 在prefork模式下 或 Apache1.3.x 環境下不要此屬性的值超過1。目前最新的2.2版apache Linux編譯後,FC測試預設是prefork模式。

connection_pool_minsize:預設值(connection_pool_size+1)/2

連接配接池中維護最小的連接配接數。注意,Apache2.x 在prefork模式下 或 Apache1.3.x 環境下不要此屬性的值超過1。目前最新的2.2版apache Linux編譯後,FC測試預設是prefork模式。

connection_pool_timeout:預設值0

在連連池中維護的非活動連接配接連續多少秒後被釋放。如果為0,則不釋放。

connection_acquire_timeout:預設值retries*retry_interval

擷取接連的逾時

lbfactor:

負載權重,值越高被分發請求的機率越大。

負載器屬性:

balance_workers:

逗号分隔的worker清單

sticky_session:預設值True

負載噴發采用Session粘貼機制,按SessionID噴發請求。為了保障同一SessionID的請求被分發到同一台伺服器上。

sticky_session_force: 預設值為Flase

如果為True, SessionID并不合法時則傳回500錯誤,否則,丢掉Session并轉發到另外的機器上

good:預設值 a.o,a.n,a.b,a.r

負載器管理的worker有三個狀态:“good”,“bad”和“degraded”,這些狀态被時時臨控。

你可以自定義good的屬性值清單,每個值都是單字母或兩個字母中間加點“.”的格式。

以下單詞的首字母做為值清單的值:“active”,“disabled”,“stopped”,“ok”,“na”,“busy”,“recovering”,“error”。如果僅用單字母組合的話,其中一個worker狀态在此清單中出現,則負載器認為所有的成員都是健康的。如果用"a."組合的話,則負載器僅認為該成員是健康的。

實際上,負載器會首先檢視bad屬性,如果不比對的話,才會檢視good屬性。

bad:預設值 s,e

參考good,預設是“stopped”,“error”才會比對。

prefix: 預設值為 worker

所有狀态的起始字首

retries:預設值為 2

通迅失敗的的重式次數

retry_interval: 預設值為100

每次重式的時間間隔,毫秒機關

session_cookie: 預設值為JSESSIONID

SessioinID的Cookie值

下面介紹一下 JkMount 的配置

第一種情形:部分靜态頁面需要apache處理,不轉發給後端的tomcat

JkMount  /*    router    ###預設将所有請求轉發給tomcat處理

JKUnmount /*.php  router    ###php請求不交給tomcat處理

JKUnmount /*.htm  router    ###htm請求不交給tomcat處理

JKUnmount /*.html  router ###html請求不交給tomcat處理

JKUnmount    /css/*      router    ###css請求不交給tomcat處理

JKUnmount    /js/*        router    ###js請求不交給tomcat處理

JKUnmount  /image/*  router    ###image請求不交給tomcat處理

第二種情形:将所有請求轉發到後端tomcat之後,将不同路徑定位給不同的tomcat

JkMount /*          router

JkMount /login/*    tomcat1

JkMount /shop/*    tomcat2

JkMount /buy/*      tomcat3

注意,這種情形下,必須要有這樣的處理:

worker.list=router,jkstatus,tomcat1,tomcat2,tomcat3

如果是第一種情形,tomcat1,tomcat2,tomcat3是不需要寫在上面這個地方的

而是寫在下面:

worker.router.balance_workers=tomcat1,tomcat2,tomcat3

實際使用中,應該是上述兩種情形相結合使用的較多,将靜态内容交給apache處理,然後将動态内容分布到不同的伺服器上。

JkMount把比對的轉發到指定伺服器.

JkUnMount把比對的不轉發到指定伺服器.

JkUnMount選項的級别高于JkMount.

單獨有JkMount規則有效,但單獨有JkUnMount無效,JkUnMount與JkMount要成對出現.