似水無痕 ^o^ 迪迪派

          ^o^ 努力學習 ^o^ 努力工作 ^o^ 努力養老婆 ^o^

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            5 隨筆 :: 0 文章 :: 35 評論 :: 0 Trackbacks

             說起JBoss集群好像很高深的樣子,其實一點也不恐怖,建立一個集群很簡單,難的是怎么針對具體的應用優化服務器和實現負載均衡(學習中^o^)。本文將帶領大家在JBoss的default目錄下建立一個簡單的Web方面的JBoss集群。

                搭建環境

             兩臺電腦 //其實一臺也夠了,不過需要修改其中一個JBoss監聽的端口,要不然有沖突
             jboss-4.0.4.GA
             apache_2.0.59 //我使用的是apache_2.0.59-win32-x86-no_ssl,其實無所謂的
             mod_jk-apache-2.0.59.so //Apache請求分發的模塊,官網上可以找到

             首先安裝JBoss,我用的是zip格式的,直接解壓縮就可以了,在兩臺電腦里分別安裝。

             接下來在其中一臺電腦上(這里是192.168.0.2)安裝Apache(其實應該再找一臺電腦來安裝的),很簡單,略過^o^(偶是不是很懶^o^)

                配置JBoss

             
          假設兩臺電腦的IP分別為192.168.0.2和192.168.0.3。我們這里使用JBoss的default目錄。

             將如下文件從%JBoss_Home%\server\all\lib里面拷到%JBoss_Home%\server\default\lib目錄下:

             jbossha.jar(加載org.jboss.ha.framework.server.ClusterPartition)
             jgroups.jar(JBoss集群底層通信協議)
             jboss-cache.jar(加載org.jboss.cache.aop.TreeCacheAop)

             還要從%JBoss_Home%\server\all\deploy里把cluster-service.xml和tc5-cluster.sar拷貝到%JBoss_Home%\server\default\deploy里面。

             編輯192.168.0.2的%JBoss_Home%\server\default\deploy\jbossweb-tomcat55.sar\server.xml 
             修改下面代碼:
          <Engine name="jboss.web" defaultHost="localhost">

             修改為:
          <Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">

             其中 jvmRoute是用來讓apache識別的節點名稱,一個節點一個名稱,注意不要有重復的(可以結合IP設置)。

             同理編輯192.168.0.3的%JBoss_Home%\server\default\deploy\jbossweb-tomcat55.sar\server.xml
          注意把jvmRoute設置為node2,可以設置成別的只要和192.168.0.2的不重復就行,但是要和Apache的workers.properties(稍后介紹)下的配置一致。

             在%JBoss_Home%\server\default\deploy\jbossweb-tomcat55.sar\ROOT.war\目錄下添加一個新文件夾\test,并在里面添加如下3個jsp文件:

          index.jsp
           1<%@ page contentType="text/html;charset=ISO8859_1" %> 
           2
           3<html>
           4<head>
           5<title>Test</title>
           6<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
           7</head>
           8
           9<body onload="document.form.name.focus()">
          10<br><br><br>
          11<center>
          12The host is : <%=java.net.InetAddress.getLocalHost().toString()%><br>
          13Your session id is : <%=session.getId()%><br>
          14Your session detail is : <%=session.toString()%><br>
          15Your session context is : <%=session.getSessionContext()%><br><br>
          16Please input your name:<br>
          17<form action="test_action.jsp" method="POST" name="form">
          18    <input type="input" name="name"/>
          19    <input type="submit" value="提交">
          20</form>
          21</center>
          22</body>
          23</html>
          24
          25

          test_action.jsp
           1<%@ page contentType="text/html;charset=ISO8859_1" %> 
           2
           3<html>
           4<head>
           5<title>Test Action</title>
           6<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
           7</head>
           8<%
           9    String name = request.getParameter("name");
          10    session.setAttribute("name",name);
          11    String host = java.net.InetAddress.getLocalHost().toString();
          12
          %>
          13<body>
          14<br>
          15<br>
          16<center>
          17The host is : <%=host%><br><br>
          18Your session id is : <%=session.getId()%><br>
          19Your session detail is : <%=session.toString()%><br>
          20Your session context is : <%=session.getSessionContext()%><br><br>
          21Your name is : <%=name%><br>
          22This name is set into the session.<br>
          23Please click <href="session.jsp">here</a> to check the session valid or not.
          24</center>
          25</body>
          26</html>
          27
          28

          session.jsp
           1<%@ page contentType="text/html;charset=ISO8859_1" %> 
           2
           3<html>
           4<head>
           5<title>Test Action</title>
           6<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
           7</head>
           8<%
           9    String name = null;
          10    if(session.getAttribute("name")!=null)
          11        name = (String)session.getAttribute("name");
          12    String host = java.net.InetAddress.getLocalHost().toString();
          13
          %>
          14<body>
          15<br>
          16<br>
          17<center>
          18The host is : <%=host%><br>
          19Your session id is : <%=session.getId()%><br>
          20Your session detail is : <%=session.toString()%><br>
          21Your session context is : <%=session.getSessionContext()%><br><br>
          22<%
          23    if(name!=null){
          24        out.print("Your name is "+name+"<br>");
          25        out.print("The session is valid.");
          26    }
          27    else{
          28        out.print("The session is invalid!!!");
          29    }
          30
          %>
          31<href="index.jsp">Return!</a>
          32</center>
          33</body>
          34<%
          35    if(session.getAttribute("name")!=null)
          36        session.invalidate();
          37
          %>
          38</html>
          39
          40

             編輯%JBoss_Home%\server\default\deploy\jbossweb-tomcat55.sar\ROOT.war\WEB-INF\web.xml在<web-app>節點下增加如下代碼:
          1<distributable/>
             完成后web.xml代碼如下:
           1<?xml version="1.0" encoding="ISO-8859-1"?>
           2
           3<!DOCTYPE web-app
           4    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
           5    "http://java.sun.com/dtd/web-app_2_3.dtd">
           6
           7<web-app>
           8  <distributable/>
           9  <display-name>Welcome to JBoss</display-name>
          10  <description>
          11     Welcome to JBoss
          12  </description>
          13  <servlet>
          14    <servlet-name>Status Servlet</servlet-name>
          15    <servlet-class>org.jboss.web.tomcat.tc5.StatusServlet</servlet-class>
          16  </servlet>
          17  <servlet-mapping>
          18    <servlet-name>Status Servlet</servlet-name>
          19    <url-pattern>/status</url-pattern>
          20  </servlet-mapping>
          21</web-app>
          22
             看到第8行了嗎?^o^

             到這里JBoss就配置完成了^o^

                配置Apache

             JBoss的Web集群使用apache的mod_jk,瀏覽器請求apache服務器,apache服務器根據workers.properties中的配置進行request分發,apache服務器和Jboss中的Tomcat可以用ajp1.3進行通信的,request通過ajp1.3協議的包裝被發送到Jboss,Jboss執行后返回結果。

             將下載到的mod_jk-apache-2.0.59.so保存到%Apache%\modules\目錄下,并去掉版本號重命名為“mod_jk.so”,如果不改也可以在mod-jk.conf文件(稍后介紹)里修改配置。

             在%Apache%\conf\目錄下新建mod-jk.conf,并將如下代碼添加進去:
           1# Load mod_jk module
           2# Specify the filename of the mod_jk lib
           3LoadModule jk_module modules/mod_jk.so
           4# Where to find workers.properties
           5JkWorkersFile conf/workers.properties
           6# Where to put jk logs
           7JkLogFile logs/mod_jk.log
           8# Set the jk log level [debug/error/info]
           9JkLogLevel debug
          10# Select the log format
          11JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
          12# JkOptions indicates to send SSK KEY SIZE
          13JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
          14# JkRequestLogFormat
          15JkRequestLogFormat "%w %V %T"
          16# Mount your applications
          17#JkMount /application/* loadbalancer
          18JkMount /* loadbalancer
          19# You can use external file for mount points.
          20# It will be checked for updates each 60 seconds.
          21# The format of the file is: /url=worker
          22# /examples/*=loadbalancer
          23JkMountFile conf/uriworkermap.properties
          24# Add shared memory.
          25# This directive is present with 1.2.10 and
          26# later versions of mod_jk, and is needed for
          27# for load balancing to work properly
          28JkShmFile logs/jk.shm
          29# Add jkstatus for managing runtime data
          30<Location /jkstatus/>
          31JkMount status
          32Order deny,allow
          33Deny from all
          34Allow from 127.0.0.1
          35</Location>
             上述代碼的第3行就是配置mod_jk.so模塊的路徑。

             編輯%Apache%\conf\httpd.conf在最后一行添加如下代碼:
          1Include conf/mod-jk.conf

             在 %Apache%\conf\目錄下添加workers.properties文件,該文件就是配置Apache所要將request轉發到的JBoss的路徑信息,代碼如下:
           1# 定義request所要轉發到的節點
           2worker.list=loadbalancer,status
           3# 定義節點 Node1
           4worker.node1.port=8009
           5worker.node1.host=192.168.0.2
           6worker.node1.type=ajp13
           7worker.node1.lbfactor=1
           8worker.node1.cachesize=10
           9# 定義節點 Node2
          10worker.node2.port=8009
          11worker.node2.host=192.168.0.3
          12worker.node2.type=ajp13
          13worker.node2.lbfactor=1
          14worker.node2.cachesize=10
          15# 負載配置
          16worker.loadbalancer.type=lb
          17worker.loadbalancer.balance_workers=node1,node2
          18worker.loadbalancer.sticky_session=0
          19worker.status.type=status

             上述代碼中:
             port是配置JBoss AJP所監聽的端口號,可以在%JBoss_Home%\server\default\deploy\jbossweb-tomcat55.sar\server.xml 看到,如下
          1<!-- A AJP 1.3 Connector on port 8009 -->
          2<Connector port="8009" address="${jboss.bind.address}" 
          3         emptySessionPath="true" enableLookups="false"
          4         redirectPort="8443" protocol="AJP/1.3"/>
             host定義JBoss所在機器的IP地址
             lbfactor定義該節點的權重,數字越大分發到該節點的request越多
             cachesize是servlet線程池的大小(對session復制有影響)

             到這里所有的配置就全部完成啦^o^

             啟動192.168.0.2上的apache和兩臺機器上的JBoss。
             打開瀏覽器,輸入網址訪問apache:http://192.168.0.2/test/index.jsp,回車!看到了吧?

             頁面上有JBoss所在機器的IP地址,刷新頁面還能看到IP在變化,說明apache將request分發到了不同的JBoss上,在輸入框中輸入隨便一個字符串并提交還能測試JBoss 的session復制情況。

          ^o^
          posted on 2007-05-17 21:33 ddpie 閱讀(6631) 評論(8)  編輯  收藏 所屬分類: JBoss

          評論

          # re: 在default目錄下快速配置JBoss集群(Web方面) 2007-12-20 16:15 Alan_xu
          很好的文章,uriworkermap.properties文件沒有創建,需要創建.不然會報錯.  回復  更多評論
            

          # re: 在default目錄下快速配置JBoss集群(Web方面)[未登錄] 2008-02-20 15:58 aa
          e   回復  更多評論
            

          # re: 在default目錄下快速配置JBoss集群(Web方面)[未登錄] 2008-02-20 15:59 x小邱
          恩 ,不錯  回復  更多評論
            

          # re: 在default目錄下快速配置JBoss集群(Web方面)[未登錄] 2009-02-18 10:34 joe
          謝謝你的文章  回復  更多評論
            

          # re: 在default目錄下快速配置JBoss集群(Web方面)[未登錄] 2009-08-23 15:06
          很詳細的介紹,謝謝分享,我決定自己試一試
            回復  更多評論
            

          # re: 在default目錄下快速配置JBoss集群(Web方面) 2011-01-03 14:50 網絡時空
          樓主的文章介紹得太好了,我正需要這篇文章啊。。我的qq號是172145286,想加樓主為好友,交流一下,行否?謝謝了  回復  更多評論
            

          # re: 在default目錄下快速配置JBoss集群(Web方面) 2011-01-03 18:09 網絡時空
          我看在有一篇文章中提到還要進行下面的處理,你的上面文章中,怎么沒有這一點呢?另外如下jboss-web.xml文件是在哪個具體目錄中呢?我是用的jboss4.2.GA?

          在jboss-web.xml中增加以下內容:

          <?xml version="1.0"?>

          <jboss-web>

          <context-root>trms</context-root>

          <replication-config>

          <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>

          <replication-granularity>SESSION</replication-granularity>

          <replication-field-batch-mode>true</replication-field-batch-mode>

          </replication-config>

          </jboss-web>  回復  更多評論
            

          # re: 在default目錄下快速配置JBoss集群(Web方面)[未登錄] 2012-12-04 09:15 至尊寶
          我按照你的操作還是沒有集群成功  回復  更多評論
            

          主站蜘蛛池模板: 金寨县| 工布江达县| 宕昌县| 天柱县| 留坝县| 宁国市| 犍为县| 东丰县| 牡丹江市| 乳山市| 甘孜县| 蛟河市| 金昌市| 黎城县| 娄底市| 富锦市| 德江县| 芜湖县| 三原县| 东安县| 武山县| 鄂温| 长泰县| 沐川县| 黄骅市| 滨海县| 平舆县| 枣阳市| 六盘水市| 成都市| 乡城县| 镇原县| 黄陵县| 普宁市| 曲靖市| 青田县| 阳谷县| 砚山县| 娄底市| 张家川| 宜宾市|