在介紹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要成對出現.