應公司要求,最近在學習weblogic集群這塊的知識,下面我把我這幾天學到的,以及過程中遇到的問題及如何解決的,分享給大家。首先,weblogic是Orcale公司的一款產品,至於其作用,我想就不用我說了。但是關於weblogic里面的幾個專業名詞,我想還是有必要去說一下的。
1.Server
用過tomcat的朋友應該清楚,當我們有多個項目部署在同一個tomcat服務器下的時候,我們只需要啟動這個tomcat就可以根據目錄的不同,訪問這些應用,此時我們用的端口號不需要改變。在weblogic服務器中,一個server同等於一個tomcat。首先我們在創建一個server的時候需要給它指定一個ip和端口(這個ip可以是一台遠程機器的ip)。創建好server以后,我們就可以將項目部署在其中了。如果我們有多個項目,並且我希望每個項目能對應不同的端口,那么我們就可以通過創建多個server來實現。有時候我們稱server為'節點',所以以后聽到別人說節點的時候也不要茫然,說的就是它了。
2.Cluster
這個,就是我們本文要講的重點,集群。按照我個人的理解,集群就是把具有相同應用的一些server,放在一起,統一管理。舉個很簡單的例子,就是我現在有項目,我分別放在三個不同的server里面(先別管我為什么放三個不同的server中)。那么問題來了,我項目要有改動了怎么辦?分別去各自的server中重新部署?別開玩笑了,萬一不是三個是十個呢?萬一不是在同一台機器上呢(前面說了,可以是一台遠程機器)?
我們帶着這個問題再來看一下集群,放在一起....統一管理....
現在明白了吧,這就是集群給我們帶來的便利,將這些server加入到同一個集群當中,如果項目有變動的話,我們只需要在部署項目的時候,通過集群去部署,那么weblogic會自動幫我們將應用分配到各個子節點中。
3.domain
domian我們有時候也會把它稱作為'域',他就相當於一個大的容器,里面可以存放很多server,其中有一個默認的server,它會隨着域的啟動而啟動。有一點我們必須要清楚,就是當你想要啟動某個domain下的server的時候,必須先啟動這個domain。Cluster和domain之間的關系也差不多如此,總之呢,先有domain再談其他。如果還不理解,沒有關系,看完下面這幅圖,我想你大概也就明白了。
到這里我想應該都清楚什么是集群,以及集群的作用了吧。接下來,我給大家講一下,一般什么時候需要用到集群。
不知大家是否還在疑惑,前面,為什么我說要把同一個項目,分別部署到多個server中呢?其實這樣做的目的,是為了減輕服務器的壓力,當一個web項目並發訪問人數過多的時候,可能會造成服務器壓力過大而崩潰,如果能將用戶均勻的分散到多個服務器上,顯然能夠很好解決這個問。如果想讓用戶的訪問分散到各個服務器,同時又不讓客戶端察覺,除了用Cluster來同步應用以外,這里我們還需要用到另一個技術,就是代理,代理服務器只有一個,用戶如果要訪問應用,只需要訪問代理服務器就可以了,然而將用戶分配至各個server的應用上的工作,則由代理來做。
有了以上基礎,下面我將正式教大家部署集群和代理。
就拿上面的那幅圖來舉例子。假設我現在有個shop應用,我需要把它分別部署在個不同的機子上,一台IP為100,另一台IP是133。在這里,我把代理服務器和集群單獨放在另一台機子上IP為125。我們把這個125:7001節點稱之為管理節點,100:7100和133:7200為受管服節點。
首先先創建一個125:7001的domian(提示如果沒有多台機子可以在同一台機子創建多個domain測試)
配置完管理管理服務器之后,我們來創建對應的兩個子節點的domain。
前面的步驟都是一樣的。
后面直接下一步,下一步。
這樣第一個字節點就配好了,第二子節點也是這樣配,這里我就不再重復去說了。此時啟動服務器,登陸控制台,就是下面這個樣子了,圖中我是建了3個子節點。
再說一下通過集群配置數據源和部署應用。這里我只是簡單說一下與傳統方式配置數據源和部署應用的不同之處。如果對傳統的部署方式不了解,可以看我寫的另外一篇專門講關於數據源配置和應用部署的文章:
配置應用的時候也是如此,注意選擇集群。配置完之后呢,集群這一塊基本上就結束了。哦對,還得說一下如何啟動子服務。
首先我們需要啟動命令行工具,運行-cmd
然后將目錄切換到adminDaomain目錄下
執行如上命令:startManagedWebLogic.cmd + 受管服務名(子) + 管理者IP:端口
等待片刻,直到命令行末端出現RUNNING表示子服務啟動成功
接下來,我們來說一下設置代理。
我們先創建一個代理應用,這里講取名為defalutProxy
我們只需要在web-inf下創建兩個xml文件就可以了。web.xml和weblogic.xml
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app> 3 <init-param> 4 <param-name>DebugConfigInfo</param-name> 5 <param-value>ON</param-value> 6 </init-param> 7 <servlet> 8 <servlet-name>HttpClusterServlet</servlet-name> 9 <servlet-class>weblogic.servlet.proxy.HttpClusterServlet</servlet-class> 10 <init-param> 11 <param-name>WebLogicCluster</param-name> 12 <param-value> 13 192.168.0.100:7100|192.168.0.133:7200 <!-- 根據個人情況將此處改為自己設置的子節點IP和端口 --> 14 </param-value> 15 </init-param> 16 <init-param> 17 <param-name>DebugConfigInfo</param-name> 18 <param-value>ON</param-value> 19 </init-param> 20 <init-param> 21 <param-name>verbose</param-name> 22 <param-value>true</param-value> 23 </init-param> 24 </servlet> 25 26 <servlet-mapping> 27 <servlet-name>HttpClusterServlet</servlet-name> 28 <url-pattern>/</url-pattern> 29 </servlet-mapping> 30 <servlet-mapping> 31 <servlet-name>HttpClusterServlet</servlet-name> 32 <url-pattern>*.jsp</url-pattern> 33 </servlet-mapping> 34 <servlet-mapping> 35 <servlet-name>HttpClusterServlet</servlet-name> 36 <url-pattern>*.htm</url-pattern> 37 </servlet-mapping> 38 <servlet-mapping> 39 <servlet-name>HttpClusterServlet</servlet-name> 40 <url-pattern>*.html</url-pattern> 41 </servlet-mapping> 42 </web-app>
weblogic.xml
1 <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic 810-web-jar.dtd"> 2 <weblogic-web-app> 3 <context-root>/</context-root> 4 </weblogic-web-app>
創建好代理應用之后,我們再返回weblogic 125:7100控制台,將應用部署到adminserver中。
后面只需要下一步下一步就可以了,很簡單。代理應用的部署,與普通應用部署沒什么區別。
現在,我們集群和代理統統部署好了,我們就該來測試一下效果了。
怎么測試呢?很簡單。就像平常訪問web應用那樣訪問就好了。如果分別部署在不同server中的項目都能正常訪問,那說明集群這塊就徹底OK了。至於代理嘛,,你就假設你管理節點里面也部署了這個項目(事實上沒有不,你是知道的),然后我們就像訪問其他兩個子server下的項目一樣去訪問試試吧,如果能訪問到,就說明代理也起作用了...
還有一個測試方法比較不錯,寫一個jsp頁面,頁面內容為打印當前server的名稱,這樣當我們在前前台通過代理訪問項目的時候,就可以清楚的知道每次訪問的是哪個server里面的jsp頁面。
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="java.io.PrintWriter"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>測試頁面</title> </head> <body> <% String servername = System.getProperty("weblogic.Name"); PrintWriter writer = response.getWriter(); writer.write("<http><body>"+servername+"</body></html>"); System.out.println(servername); %> </body> </html>
好了,還有一點要注意的是,部署和訪問的時候,子節點一定要開啟,明白了嗎?