Java軟件報表軟件技術博客

          java報表軟件技術匯總 java報表軟件制作 報表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理
           前述:

          windows集群同J2EE的集群不同,因為它是操作系統自帶的集群支持,它沒有J2EE集群對javaweb應用的良好支持,例如session復制以及session粘滯。所以對windows集群,需要特別配置一下,以此來支持集群的功能。

          簡單原理說明:

          Windows集群的均衡負載會根據情況,將外部請求分配給集群內的服務器處理。當一個會話(Session)在A服務器上產生并開始,產生了一部分會話信息將保存到A服務器的內存中。假如這次會話中的一次請求被windows集群的均衡負載調度器分配到了B服務器去處理,那么問題就產生了,B服務器中的內存中并沒有這個會話的信息,那么就會報session timeout

          而我們的配置,會在集群的服務器間建立聯系。當B服務器收到請求,發現這個請求的會話不是自己產生的,那么它會根據請求中的信息,判斷出這個會話是由哪臺服務器產生。接著它會將這個請求通過內網轉發給相應的那臺服務器去處理。這樣相當于就實現了J2EE集群的會話粘滯的功能。簡單的說,會話粘滯就是保持一個會話中的多次交互都由一臺集群中的服務器處理。這樣就不會再產生上述的問題。

          前提:

                   集群的服務器間需要有內網間通信的支持。

                   不同服務器上的報表應用必須是一致的。

          配置步驟:

          集群內的每臺安裝有報表應用的服務器都需要這樣配置。

          1.       關閉現在的報表服務。

          2.       增加配置文件。

          將配置包resource文件夾下的cluster.xml打開。看見如下內容

          <?xml version="1.0" encoding="UTF-8" ?>

          <ClusterConfig useCluster="true">      //useCluster=”true”表示啟用集群配置

          <ClusterService>

                     <ServiceName>A</ServiceName> //給這臺服務器取一個區別于其他機器的別名

                     <ip>192.168.0.1</ip>            //這臺服務器在內網中的IP地址

                     <port>8080</port>              //報表應用的端口

                     <WebAppName>WebReport</WebAppName>  //報表應用的名稱

          </ClusterService>

          <ClusterService>

                     <ServiceName>B</ServiceName>

                     <ip>192.168.0.2</ip>

                     <port>8080</port>

                     <WebAppName>WebReport</WebAppName>

          </ClusterService>

          </ClusterConfig>

          這里的每個ClusterService都是集群中一臺服務器的相關信息。配置好后,系統會根據自身的IP和端口號去匹配找到相應的信息。當然也可能會有一些原因導致系統無法正確的匹配找到。這時您可以設置isSelf屬性來指定自身的屬性。

          例如這個配置文件部署在A服務器下,那么ServiceNameA的那個ClusterService節點后加一個屬性 isSelf=”true”,表示下這是本機的信息。如下所示。

          <?xml version="1.0" encoding="UTF-8" ?>

          <ClusterConfig useCluster="true">

          <ClusterService isSelf="true">

                     <ServiceName>A</ServiceName>

                     <ip>192.168.0.1</ip>

                     <port>8080</port>

                     <WebAppName>WebReport</WebAppName>

          </ClusterService>

          <ClusterService>

                     <ServiceName>B</ServiceName>

                     <ip>192.168.0.2</ip>

                     <port>8080</port>

                     <WebAppName>WebReport</WebAppName>

          </ClusterService>

          </ClusterConfig>         //這個就是指定自身信息的A服務器相應的配置文件了

          ServiceName是為一臺服務器取的別名,只是為了區別標記一下。最好簡單方便,如ABC或者A1A2等。注意!不能是中文。

          IPPORT、和WebAppName上面的注釋中有介紹。

          IP是該臺服務器內網中的IP,就是其它服務器能與之通信的IP

          Port報表應用的端口號,假如是部署在tomcat下,那么就是tomcat的端口號,默認是8080.例如我們的內置服務器是8079.

          WebAppName是報表應用的名稱,我們默認的是WebReport

          簡單的講。如上面的那個例子。B服務器的信息如下。

          <ClusterService>

                     <ServiceName>B</ServiceName>

                     <ip>192.168.0.2</ip>

                     <port>8080</port>

                     <WebAppName>WebReport</WebAppName>

          </ClusterService>

          那么正確的配置的結果,就是在A服務器上,假如有瀏覽器,瀏覽器中輸入

          http://192.168.0.2:8080/WebReport/ReportServer?reportlet=xxx.cpt就能訪問到B服務器上的報表應用。這個url中的IP、端口號和web應用名稱就是上面配置信息里面的。注:xxx.cpt只是舉個例子。

          那么綜上說明,假如集群中多了一臺C服務器,給它取個別名就叫C。內網IP192.168.0.3。裝了tomcat,端口默認是8080。報表應用名稱也是默認是WebReport。那么服務器下的配置文件應該如下所示。

          <?xml version="1.0" encoding="UTF-8" ?>

          <ClusterConfig useCluster="true">

          <ClusterService>

                     <ServiceName>A</ServiceName>

                     <ip>192.168.0.1</ip>

                     <port>8080</port>

                     <WebAppName>WebReport</WebAppName>

          </ClusterService>

          <ClusterService>

                     <ServiceName>B</ServiceName>

                     <ip>192.168.0.2</ip>

                     <port>8080</port>

                     <WebAppName>WebReport</WebAppName>

          </ClusterService>

          <ClusterService>

                     <ServiceName>C</ServiceName>

                     <ip>192.168.0.3</ip>

                     <port>8080</port>

                     <WebAppName>WebReport</WebAppName>

          </ClusterService>

          </ClusterConfig>

          最后,請根據上面的格式,寫好cluster.xml文件,并且將其拷貝到各服務器的報表應用下WEB-INF"resources文件夾下。當然,有isSelf屬性指定的特定服務器的配置文件需要保存到相應的服務器路徑下。

          注意!xml文件的保存格式是 utf-8 no Bom的格式。一般用寫字板打開配置包下的cluster.xml文件,修改保存就可以。

          3.       測試配置是否生效。

          當集群中的服務器都已經按照上述步驟配置好,并且重新啟動報表應用后。依次在各臺服務器上做如下測試。

          例如,現在在A服務器下,先本機測試下報表能否訪問,測一張簡單的模板就行。能正常訪問(ie瀏覽器可能需要將localhost或者127.0.0.1的本機地址添加到信任站點中才能顯示頁面),接著在瀏覽器上輸入:

          http://localhost:8080/WebReport/ReportServer?op=cluster_test

          上述url地址前面部分按情況,請換上相應報表應用的端口號和應用名稱。然后假如本機設置正常就能看到如下的信息:(以上述AB兩臺服務器的配置文件舉例)

          Cluster is start!
          SELF:
          ServiceName:A
          IP:192.168.0.1
          PORT:8080
          WebAppName:WebReport

          Other Server List:
          NO1: ServiceName:B = 192.168.0.2:8080/WebReport
          OK

          這樣說明,配置生效,A服務器能與B服務器間進行通信。再次查看下信息是否有誤。

          那么相應的在B服務器下測試,正確的回應如下。

          Cluster is start!
          SELF:
          ServiceName:B
          IP:192.168.0.2
          PORT:8080
          WebAppName:WebReport

          Other Server List:
          NO1: ServiceName:A = 192.168.0.1:8080/WebReport
          OK

             

          假如,沒有顯示Cluster is start,那么說明該機的配置沒有生效,請檢查配置文件后,重新啟動應用,并且再次依照上面步驟測試。

          假如顯示是這樣:

          Cluster is start!

          Can not find Own Service Info.

          LocalIP:192.168.0.39

          LocalPort:8070

          說明,集群配置了,但是系統無法根據自身找到的IP和端口匹配到配置文件中的信息。而系統找到的IP192.168. 0.39,端口是8070.可能您配置成了192.168.0.388080,那系統就找不到相應的節點信息了。當然由于各種原因可能系統無法拿到正確的IP和端口,這時請您檢查后,設置正確的IP和端口后,在相應的ClusterService的節點上加isSelf屬性(isSelf=”true”)

          假如,SELF:下的信息不正確,或者沒有信息,也請檢查配置文件。

          假如,下面列出的其它機器的信息不正確,或者有遺漏,也請檢查配置信息后,重啟報表應用重試。

          假如,其它服務器的回應,沒有回應OK,例如回應Connection timed out: connect。請檢查下那臺服務器的配置信息,檢查網絡連接,ping下那臺機器的ip地址,看看是否能ping通。然后查看那臺服務器報表應用的端口和應用名稱是否設置正確。

          可以在瀏覽器中輸地址直接在內網中訪問下那臺機上的報表應用,看看設置的ip、端口號等是否設置正確。修改后,重新啟動報表應用,重試。

          假如您覺得一臺臺服務器都這樣去測試太麻煩,您也可以直接改成op=cluster_test_all.(http://localhost:8080/WebReport/ReportServer?op=cluster_test_all)來一起測試。這個其實就是在本機上給其它機器發op=cluster_test的請求,然后把回應一起顯示出來。例如這樣。

          Cluster is start
          SELF:
          ServiceName:A
          IP:192.168.100.39
          PORT:8080
          WebAppName:WebReport

          Other Server List:
          NO1: ServiceName:B = 192.168.100.39:8070/WebReport
          ------------------------------------------
          Test it(op = cluster_test) - RE:
          Cluster is start! SELF:
          ServiceName:B
          IP :192.168.100.39
          PORT :8070
          WebAppName :WebReport

          Other Server List:
          NO1: ServiceName:A = 192.168.100.39:8080/WebReport
          - OK


          ------------------------------------------

          這個可能回應的時間比較長,所以假如長時間沒有回應,說明某臺機器的配置有問題,還是需要照上面的步驟一臺臺機器去測試。

          4.       結束

          當以上檢查步驟結束。所有服務器都檢查,發現正確后。恭喜,配置就完成了。

          假如您在配置過程中,有無法解決的問題,請與我們聯系。



          主站蜘蛛池模板: 元江| 平原县| 屯昌县| 华池县| 秦安县| 南江县| 双辽市| 宁陵县| 商丘市| 西乡县| 凤阳县| 宁都县| 若尔盖县| 疏附县| 本溪市| 嘉善县| 南通市| 即墨市| 盘锦市| 长子县| 武强县| 麦盖提县| 凭祥市| 合肥市| 区。| 南康市| 安多县| 洛宁县| 赞皇县| 汝城县| 高台县| 东海县| 确山县| 赫章县| 朝阳区| 运城市| 交城县| 富锦市| 宁化县| 邓州市| 临朐县|