1. 程式人生 > >Weblogic加Apache的負載均衡以及群集配置

Weblogic加Apache的負載均衡以及群集配置

Weblogic的負載均衡可以通過軟體和硬體的方式實現。硬體可以使用F5等裝置,軟體一般使用apache來實現。下面說明使用apache的具體方法。

Weblogic的負載均衡可以通過軟體和硬體的方式實現。硬體可以使用F5等裝置,軟體一般使用apache來實現。下面說明使用apache的具體方法。

1. 環境準備

    Apache 2.2    http://httpd.apache.org/download.cgi

    Weblogic 9.2

    三臺機器,用途分別如下:


2. 配置weblogic

      

   2.3 配置weblogic.xml檔案

        為了支援session複製,為應用程式新建weblogic.xml檔案,放置到ear檔案的meta-inf目錄下。內容為:

<?xml version="1.0" encoding="GBK"?>

<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90">

  <session-descriptor>

    <persistent-store-type>replicated</persistent-store-type>

    <sharing-enabled>true</sharing-enabled>

  </session-descriptor>

</weblogic-web-app>

 3. 配置apache

   從{weblogic_home}/server/plugin/win/32 目錄,複製mod_wl_22.so 到 {apache_home}/modules目錄下。

   修改httpd.conf檔案,增加如下內容:

    LoadModule weblogic_module modules/mod_wl_22.so

   <IfModule mod_weblogic.c>

      WeblogicCluster 192.168.10.101:7010,192.168.10.102:7011

      MatchExpression *

      WLLogFile "D:/Program Files/Apache Software Foundation/Apache2.2/logs/wlproxy.log"

      Debug On

      DebugConfigInfo On

      KeepAliveEnabled On

      KeepAliveSecs 15

   </IfModule>

 4. 部署應用程式

    啟動machine2上面的admin server,進入控制檯,部署應用程式,注意選擇target時,要指定為cluster_test。

 5. 啟動weblogic

   5.1 啟動machine2上面的admin server

        在machine2機器上,執行命令{weblogic_home}/user_projects/domains/cluster_domain/bin/startWeblogic.cmd

   5.2 啟動machine2上面的server1

        在machine2機器上,執行命令{weblogic_home}/user_projects/domains/cluster_domain /bin/startManagedWeblogic.cmd server1 192.168.10.101:7001

   5.3 啟動machine3上面的server2

        在machine3機器上,執行命令{weblogic_home}/user_projects/domains/cluster_domain /bin/startManagedWeblogic.cmd server2 192.168.10.101:7001

 6. 啟動apache伺服器

 7. 相關約束條件

   7.1 所有Managed server的繫結地址必須是靜態地址,不能是動態地址

   7.2 如果需要在wan上面訪問,admin server所在的機器必須要有對外的IP地址

 8. 問題診斷方法

MulticastMonitor 工具     
        監視群內廣播資料,一般用來檢查群內通訊是否正常。使用方法如下:       

        1. 執行 {weblogic_home}/user_projects/domains/{domain_name}/bin/setdomain.cmd 設定環境變數,如classpath等,

        2. 執行 java weblogic.cluster.MulticastMonitor {群廣播地址} {廣播埠} {域名稱} {叢集名稱}

        3. 執行後可以看到群內各個managed server之間的廣播資料,據此可以判斷每個伺服器的通訊是否正常。

MulticastTest 工具 
        在各個managed server之間傳送資料,一般用來檢查群內各個server之間通訊是否正常。此命令需要在每個server所在的機器上執行。使用方法如下:       

        1. 執行 {weblogic_home}/user_projects/domains/{domain_name}/bin/setdomain.cmd 設定環境變數,如classpath等,

        2. 執行 java utils.MulticastTest -n {訊息名稱} -a {廣播地址} -p {廣播埠} (這些引數不能與已有的重複)

           每個server上執行的訊息名稱不能相同。

           廣播地址不能是已經配置了的群廣播地址,即:需要另外使用一個用來測試用的廣播地址。

附表-外掛的通用引數(大小寫區分):

引數

預設值

描述

WebLogicHost

(如果代理到單個WebLogic伺服器,那麼應該設定該引數)

none

HTTP請求被遞交到該WebLogic Server主機(或者是定義在WebLogic Server中執行的類似於Web server的虛擬主機名)如果使用叢集,那麼應該使用WebLogicCluster引數而不是WebLogicHost引數。

WebLogicPort

(如果代理到單個WebLogic伺服器,那麼應該設定該引數)

none

WebLogic伺服器監聽WebLogic連線請求的埠。(如果在外掛與WebLogic伺服器之間使用SSL,那麼應該把該引數設定為SSL監聽埠(見8-4頁的"配置監聽埠")並將SecureProxy引數設定為ON)。

如果使用WebLogic叢集,那麼應該設定WebLogicCluster引數而不是WebLogicPort引數。

WebLogicCluster

(如果代理到一個WebLogic伺服器叢集,那麼必須設定該引數)

none

叢集中的WebLogic伺服器列表,用於負載平衡目的。該列表由逗號分隔開的host:port組成。例如:

WebLogicCluster myweblogic.com:7001,

yourweblogic.com:7001,theirweblogic.com:7001

如果外掛與WebLogic伺服器之間使用SSL協議,那麼將埠號設定為SSL監聽埠(見8-3頁的"配置監聽埠")並將SecureProxy引數設定為ON。

應該用該引數取代WebLogicHost與WebLogicPort引數,WebLogic Server首先查詢WebLogicCluster引數,如果沒有找到該引數,它將尋找並使用WebLogicHost與WebLogicPort引數。

外掛對所有可用的叢集成員進行輪詢。該引數所指定的叢集列表是伺服器與外掛共同維護的動態列表的初始值。WebLogic伺服器與外掛將根據新加入的、失敗的以及恢復的叢集成員的情況動態地更新叢集列表。

如果將 DynamicServerList引數設定為OFF(只適用於Microsoft Internet Information Server),那麼叢集列表的動態更新被禁用。外掛將請求導向叢集中最初建立cookie的那個伺服器上(請求包含cookie、URL- encoded會話或存於POST資料中的會話資訊)。

PathTrim

none

在請求被轉交到WebLogic伺服器之前,被外掛從原始URL中裁剪掉的字串。例如:如果原始URL為

http://myWeb.server.com /weblogic/foo被傳遞到外掛進行解析且PathTrim引數被設定為/weblogic,那麼傳遞到WebLogic伺服器的URL變 為:http://myweblogic.server.com:7001/foo

PathPrepend

null

加在原始URL前的字首字串,該動作發生在PathTrim被裁剪後,請求轉向WebLogic伺服器之前。

ConnectTimeoutSecs

10

外掛進行WebLogic伺服器主機連線嘗試的時間上限。該值應該大於 ConnectRetrySecs引數。如果超過ConnectTimeoutSecs還沒能連線成功,即使進行了適當次數的連線重試(見 ConnectRetrySecs引數),也將把HTTP 503/Service Unavailable響應返回給客戶端。

可以使用ErrorPage引數定製錯誤響應。

ConnectRetrySecs

2

該引數以秒為單位,設定了兩次WebLogic Server主機(或叢集中的所有伺服器)連線嘗試之間,外掛的休眠時間。該引數的值應該小於ConnectTimeoutSecs。外掛在返回HTTP 503/Service Unavailable響應之前,它將進行的連線次數為ConnectTimeoutSecs除以ConnectRetrySecs所得的值。

如果不希望重試連線,那麼應該將ConnectRetrySecs值應該與ConnectTimeoutSecs相等。不過,外掛會至少進行兩次連線嘗試。

可以用ErrorPage引數定製錯誤響應。

Debug

OFF

設定除錯操作時的日誌型別。在生產系統中不建議你開啟這些除錯選項。

在UNIX系統中,除錯資訊被寫到 /tmp/wlproxy.log檔案中;在Windows NT系統,除錯資訊被寫到c:/temp/wlproxy.log檔案中,通過WLLogFile引數,你可以使用其他路徑下的其他檔案覆蓋檔名、路徑 引數。你可以設定以下日誌選項(其中HFC, HTW, HFW, HTC可以聯合使用,它們之間用逗號隔開,如"HFC, HTW");

ON

  外掛只記錄報告性訊息與錯誤訊息

OFF

  不記錄除錯資訊

HFC

  記錄來自客戶端訊息、報告性訊息以及錯誤訊息的訊息頭。

HTW

  記錄從weblogic傳送來的訊息頭,報告性訊息與錯誤訊息

HFW

  記錄來自weblogic伺服器訊息的訊息頭,報告性訊息與錯誤訊息

HTC

  記錄傳送到客戶端訊息的訊息頭,報告性訊息與錯誤訊息

ALL

  記錄傳送到客戶端以及客戶端傳送的訊息的頭,傳送到WebLogic伺服器以及WebLogic伺服器傳送的訊息頭,報告性訊息,錯誤訊息

WLLogFile

參見Debug引數

指明當Debug引數為ON時,產生日誌檔案的路徑和檔名,在設定該引數前,必須建立相應目錄。

DebugConfigInfo

OFF

啟用特殊查詢引數"_WebLogicBridgeConfig"。該引數可以被用來了解外掛的配置引數的細節。

例如,如果把 DebugConfigInfo設定為ON,那麼"_WebLogicBridgeConfig"被啟用。傳送一個包含查詢字元 串?_WebLogicBridgeConfig的請求,外掛將收集配置資訊有執行時的統計資訊並將這些資訊返回給瀏覽器。在處理該請求時,外掛沒有連線 到WebLogic伺服器。

該引數只應嚴格用於除錯目的。訊息的輸出格式隨版本的變化而不同。為了安全起見,在生產環境中應該將該引數設定為OFF。

StatPath(Microsoft Internet Information Server 外掛沒有這個引數。)

false

如果把該引數設定為真,外掛在把請求傳遞到WebLogic伺服器之前檢查被轉換的路徑是 否存在或及其訪問許可權("Proxy-Path-Translated")。如果檔案不存在,將把HTTP 404 File Not Found響應返回給客戶端。如果檔案存在,但它的許可權不是world-readable,那麼將返回HTTP 403/Forbidden響應。這兩種情況下Web伺服器處理這些響應的預設機制是執行響應的體內容。如果WebLogic伺服器的Web應用與Web 伺服器具有相同的文件根,那麼該選項非常有用。

可以使用ErrorPage引數定製錯誤響應。

ErrorPage

none

可以製作自己的錯誤響應頁面,在Web伺服器不能將請求代理到WebLogic伺服器時使用。

設定該引數的方式有兩種:

  • 作為相對URI(檔名)。外掛自動將返回錯誤的Web應用的上下文路徑加到URI中。對錯誤頁面的請求是否回代理到WebLogic伺服器取決於你對代理的配置(是MIME型別式代理還是路徑式代理)。
  • 作為絕對URI(建議)。使用錯誤頁面的絕對路徑能夠使請求總是被代理到WebLogic伺服器中的正確資源上。例如: http://host:port/myWebApp/ErrorPage.html

HungServerRecoverSecs

300

定義了外掛等待WebLogic伺服器響應請求的時間。在等待了 HungServerRecoverSecs時間後,外掛還沒有得到伺服器的響應,那麼它將宣佈該伺服器已經宕機並失敗轉移到下一個伺服器。應該把該引數 設定為一個較大的值。如果所設定的值小於servlets進行處理的時間,那麼會得到意想不到的後果。

最小值為:10

最大值為:600

Idempotent

ON

如果該引數設定為ON,那麼當伺服器在指定的HungServerRecoverSecs 時間沒有響應,那麼外掛將進行容錯處理。如果設定為OFF,外掛將不進行失敗轉移。如果所使用的是Netscape Enterprise Server外掛或Apache HTTP Server外掛,不同的URL與MIME型別可以有不同的Idempotent引數設定。

CookieName

JSESSIO

NID

如果改變了WebLogic伺服器Web應用中的WebLogic伺服器會話cookie 的名字,那麼相應地應該將外掛的CookieName引數設定為相同的值。WebLogic會話cookie的名字在特定於WebLogic的分發描述符 的<session-descriptor>元素中定義

DefaultFileName

none

如果URI為"/",外掛將執行以下步驟:

1.裁剪掉PathTrim引數所指定的路徑

2.在後面加上DefaultFileName所指定的檔名

3.在前面加上 PathPrepend引數所指定的值這樣處理可以防止WebLogic伺服器的重定向。將DefaultFileName設定為代理WebLogic服 務器的Web應用的預設歡迎頁面。例如,如果DefaultFileName被設定為welcome.html,那麼下面這個HTTP請求:

變為:http://somehost/weblogic/welcome.html。只有當所有被重定向的web應用指定相同的歡迎頁面, 該引數才起作用。可以參見以下頁面的"Configuring Welcome Pages"部分:

對於Apache使用者,所使用的是Stronghold或Raven的版本,在Location塊中定義引數,而非IfModule塊中

MaxPostSize

-1

POST資料的允許的最大長度。如果內容的長度超過MaxPostSize,外掛將返回一個錯誤訊息。如果設定為-1,將不檢查POST資料的長度。設定該引數可以防止通過傳送大量資料使伺服器過載的"拒絕服務攻擊"。

MatchExpression

(該引數只適用於Apache HTTP伺服器)

none

如果採用MIME型別方式代理,應該在一個IfModule塊中使用MatchExpression引數設定檔名模式。

下面的一個例子說明了使用MIME型別方式的代理:

<IfModule mod_weblogic.c>

MatchExpression *.jsp

WebLogicHost=myHost|paramName=value

</IfModule>

下面的一個例子說明了使用路徑方式的代理:

<IfModule mod_weblogic.c>

MatchExpression /weblogicWebLogicHost=myHost|paramName=value

</IfModule>

FileCaching

ON

當該引數設定為ON,如果請求中的POST資料大於2084個位元組,那麼POST資料儲存 在硬碟的一個臨時檔案中,然後以8192位元組為單位傳給WebLogic伺服器。但將FileCaching設定為ON,可能引起的問題是瀏覽器上將顯示 一個進展條表明正在進行下載。即使檔案還在傳輸,瀏覽器也會顯示下在已經完成。

如果該引數設定為OFF,那麼當 POST資料大於2084位元組時,資料儲存在記憶體中並以8192位元組為單位傳送到WebLogic伺服器。將引數設定為OFF可能會引起問題。因為外掛不 能進行失敗轉移,因此如果請求被處理時WebLogic 伺服器宕機了,那麼資料將被丟失。

WlForwardPath

(只有Microsoft IIS才需要定義該單數)

null

如果WLForwardPath設定為"/",那麼所有請求都被代理到WebLogic服 務器。如果只想代理以特定字串開頭的請求,那麼應該將WlForwardPath引數設定為這個字串。例如,將WlForwardPath設定為 /webogic,那麼所有以/weblogic開始的請求都將被代理到WebLogic伺服器。

如果採用路徑方式的代理,那麼必須設定該引數。可以為該引數設定多個字串,字串之間用逗號隔開,例如:WlForwardPath=/weblogic,/bea。

KeepAliveSecs

(不要為Apache HTTP伺服器版本1.3.x定義該引數)

30

該引數定義了隔多長時間後,外掛與WebLogic伺服器之間的非活動連線將被關閉。要使該引數生效,KeepAliveEnabled引數應該設定為true。

該引數的值應該小於或等於在管理控制檯的Server/HTTP標籤頁中Duration欄位的值,或者是伺服器Mbean中的keepAliveSecs屬性的值。

KeepAliveEnabled

True

啟用外掛與WebLogic伺服器之間的連線池。

QueryFromRequest

(只適用於Apache HTTP伺服器)

OFF

如果該引數設定為ON,那麼Apache外掛使用(request_rec *)r->the request將查詢字串傳遞到WebLogic伺服器。(詳細資訊,請參見Apache文件。)這種行為在以下場合非常有用:

當Netscape 版本4.x瀏覽器發出的請求的查詢字串中包含空格。

如果你在HP上使用Raven Apache 1.5.2

如果該引數設定為OFF,那麼Apache外掛使用(request_rec *)r->args將查詢字串傳遞到WebLogic伺服器。

MaxSkips

(在Apache 1.3 中不可用)

10

只有當DynamicServerList設定為OFF時,該引數的設定才生效。如果 WebLogicCluster引數所設定的列表或由WebLogic伺服器返回的動態叢集列表中的WebLogic伺服器失敗了,那麼該失敗的伺服器被 標記為"壞的",同時外掛將連線到列表中的下一個伺服器中。

MaxSkip設定了外掛重試"壞"伺服器的次數。每當外掛接收到一個唯一請求(即不包含cookie的請求)時,它會連線到列表中的一個新伺服器上

DynamicServerList

(只能在Microsfot IIS中設定該引數)

ON

如果該引數設定為OFF,在對由外掛所代理的請求進行負載平衡時,不使用動態叢集列表,而是使用WebLogicCluster引數指定的靜態列表。通常情況下,該引數應該設定為ON。將該引數設定為ON,可能會產生以下影響:

  • 如果靜態列表中的一或多個伺服器失敗了,那麼外掛可能會因為重試連線到失效伺服器而導致效能的降低。
  • 當你在叢集中新增了一個伺服器,如果不重新定義這個引數,外掛就不能將請求代理到這個新伺服器上。WebLogic伺服器會自動地將新伺服器加到動態伺服器列表,從而使新伺服器成為叢集的一部分。