JaveShare&OpenSpace

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            7 Posts :: 0 Stories :: 7 Comments :: 0 Trackbacks

          2006年10月25日 #

          提問:茉莉花、太陽花、玫瑰花哪一朵花最沒力?


          回答:茉莉花。


          原因:好一朵美麗(沒力)的茉莉花。


          提問:猩猩最討厭什么線?


          回答:平行線。


          原因:平行線沒有相交(香蕉)。


          提問:橡皮、老虎皮、獅子皮哪一個最不好?


          回答:橡皮。


          原因:橡皮擦(橡皮差)。


          提問:布和紙怕什么?


          回答:布怕一萬,紙怕萬一。


          原因:不(布)怕一萬,只(紙)怕萬一。


          提問:鉛筆姓什么?


          回答:蕭。


          原因:削(蕭)鉛筆。



          提問:麒麟到了北極會變成什么?



          回答:冰淇凌。



          原因:冰淇凌(冰麒麟)。



          提問:哪位歷史人物最欠扁?



          回答:蘇武。



          原因:蘇武牧羊北海邊(被海扁)。



          提問:從1到9哪個數(shù)字最勤勞,哪個數(shù)字最懶惰?



          回答:1懶惰;2勤勞。



          原因:一(1)不做二(2)不休。



          提問:怎樣使麻雀安靜下來?



          回答:壓它一下。



          原因:鴉雀無聲(壓雀無聲)。



          提問:歷史上哪個人跑的最快?



          回答:曹操



          原因:說曹操曹操到



          問題:米她媽是誰



          答案:花



          原因:花生米



          小白加小白等于什么?



          等于小白兔



          原因:小白TWO




          30-50哪個數(shù)字比熊的大便厲害!!



          答案:40(事實勝于雄(熊)辯
          posted @ 2006-10-25 16:39 ~哈哈~ 閱讀(361) | 評論 (0)編輯 收藏

          一、集群的基本概念

          Cluster 集群技術(shù)可如下定義 : 一組相互獨立的服務(wù)器在網(wǎng)絡(luò)中表現(xiàn)為單一的系統(tǒng),并以單一系統(tǒng)的模式加以管理。此單一系統(tǒng)為客戶工作站提供高可靠性的服務(wù)。

          大多數(shù)模式下,集群中所有的計算機擁有一個共同的名稱,集群內(nèi)任一系統(tǒng)上運行的服務(wù)可被所有的網(wǎng)絡(luò)客戶所使用。 Cluster 必須可以協(xié)調(diào)管理各分離的組件的錯誤和失敗,并可透明地向 Cluster 中加入組件。

          一個 Cluster 包含多臺 ( 至少二臺 ) 擁有共享數(shù)據(jù)存儲空間的服務(wù)器。任何一臺服務(wù)器運行一個應(yīng)用時,應(yīng)用數(shù)據(jù)被存儲在共享的數(shù)據(jù)空間內(nèi)。每臺服務(wù)器的操作系統(tǒng)和應(yīng)用程序文件存儲在其各自的本地儲存空間上。

          Cluster 內(nèi)各節(jié)點服務(wù)器通過一內(nèi)部局域網(wǎng)相互通訊。當(dāng)一臺節(jié)點服務(wù)器發(fā)生故障時,這臺服務(wù)器上所運行的應(yīng)用程序?qū)⒃诹硪还?jié)點服務(wù)器上被自動接管。當(dāng)一個應(yīng)用服務(wù)發(fā)生故障時,應(yīng)用服務(wù)將被重新啟動或被另一臺服務(wù)器接管。當(dāng)以上任一故障發(fā)生時,客戶將能很快連接到新的應(yīng)用服務(wù)上。

          二、jboss-4.0.2集群配置指南
          版權(quán)申明: 轉(zhuǎn)載請保留以下作者信息
          作者:
          bromon原創(chuàng)
          關(guān)鍵詞:JBoss 4.0.2??Clustering

          本文主要講解JBoss cluster的基本知識以及簡單的配置方法,其間涉及了一些jboss的補充知識。

          一、材料準(zhǔn)備:

          1、JBoss 4.0.2 ??

          JBoss各個版本之間差異比較大,即使同為jboss 4.x的版本,內(nèi)部組件的版本也不一致,所以請盡量使用同一版本的server。目前已經(jīng)證明可以配置cluster的版本多為jboss 3.2.6和jboss 4.0.2。

          2、Apache 2.0.54
          ?? 下載地址:http://archive.apache.org/dist/httpd/httpd-2.0.54.tar.gz
          3、Apache mod_jk-1-2-13-apache-2-0-54
          ?? 下載地址:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.14/jakarta-tomcat-connectors-jk-1.2.14-linux-rhel3-i386-prefork.so

          二、安裝:

          1、jboss4.0.2與apache 2.0.54的安裝請自行搞定。假設(shè)jboss的安裝目錄為%jboss%,apache安裝目錄為%apache%。

          2、mod_jk的安裝。

          從apache.org獲得文件mod_jk-1-2-13-apache-2-0-54.so,將該文件拷貝到%apache%\ modules。

          三、jboss cluster入門

          ????Jboss 支持如下類型的cluster:EJB、web、JNDI、JMS,我們主要了解web cluster。

          Web cluster實際上可以劃分為兩個話題:負載均衡 (load balance) 和狀態(tài)同步。它們是互相獨立的,單獨配置。

          負載均衡的概念比較簡單,重要的是負載均衡的粒度。可以選擇針對每個request的均衡,或者是針對每個用戶的均衡。選擇不同的粒度,需要不同的狀態(tài)同步方式。

          1、基于request的負載均衡

          ???? 該種方式下,負載均衡器 (load balancer)會根據(jù)各個node的狀況,把每個http request進行分發(fā)。使用這樣的均衡策略,就必須在多個node之間復(fù)制用戶的session,實時保持整個cluster的用戶狀態(tài)同步,這種操作被稱為session復(fù)制 (session replication)。Jboss的實現(xiàn)原理是使用攔截器(interceptor),根據(jù)用戶的同步策略攔截request,做同步處理后再交給server產(chǎn)生響應(yīng)。

          ????該方法的優(yōu)點是客戶不會被綁定都具體的node,只要還有一個node存活,用戶狀態(tài)都不會丟失,cluster都能夠繼續(xù)工作。缺點是node之間通信頻繁,響應(yīng)速度有影響,多并發(fā)、高頻操作的情況下性能下降比較厲害。

          2、基于用戶的負載均衡

          該種方式下,當(dāng)用戶發(fā)出第一個request后,負載均衡器動態(tài)的把該用戶分配到某個節(jié)點,并記錄該節(jié)點的jvm路由,以后該用戶的所有request都會被綁定這個jvm路由,用戶只會與該server發(fā)生交互,這種策略被稱為粘性session(session sticky)。

          該方法的優(yōu)點是響應(yīng)速度快,多個節(jié)點之間無須通信。缺點也很明顯,某個node死掉以后,它負責(zé)的所有用戶都會丟失session。

          四、實戰(zhàn)

          1、負載均衡

          ????Jboss的負載均衡目前有兩種方案,一是使用apache的mod_jk,二是使用jboss自帶的負載均衡模塊。下面分別講解這兩種配置。

          mod_jk的配置

          1、請確認%apache%\modules下已經(jīng)有mod_jk-1-2-13-apache-2-0-54.so文件。

          2、修改%apache%\conf\httpd.conf????在文件末尾添加:????Include conf/mod_jk2.conf

          3、在%apache%\conf下新建文件????mod_jk2.conf????????文件內(nèi)容如下:

          # Load mod_jk module. Specify the filename
          # of the mod_jk lib you’ve downloaded and
          # installed in the previous section
          LoadModule jk_module modules/mod_jk-1-2-13-apache-2-0-54.so
          # Where to find workers.properties
          JkWorkersFile conf/workers2.properties
          # Where to put jk logs
          JkLogFile logs/mod_jk.log
          # Set the jk log level [debug/error/info]
          JkLogLevel info
          # Select the log format
          JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
          # JkOptions indicate to send SSL KEY SIZE,
          JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
          # JkRequestLogFormat set the request format
          JkRequestLogFormat "%w %V %T"
          JkMount /* loadbalancer


          其中JkMount /* loadbalancer的意思是,把所有的請求都發(fā)給loadbalancer處理。可以通過修改url來控制發(fā)送某些request。

          4、在%apache%\conf下新建文件????workers2.properties????????其內(nèi)容為:

          worker.list=loadbalancer,server1,server2

          # Define the first node...
          worker.server1.port=8009
          worker.server1.host=172.16.0.116
          worker.server1.type=ajp13
          worker.server1.lbfactor=1
          worker.server1.local_worker=1
          worker.server1.cachesize=10

          # Define the first node...
          worker.server2.port=8009
          worker.server2.host=172.16.32.88
          worker.server2.type=ajp13
          worker.server2.lbfactor=1
          worker.server2.local_worker=1
          worker.server2.cachesize=10

          # Now we define the load-balancing behaviour
          worker.loadbalancer.type=lb
          worker.loadbalancer.balanced_workers=server1,server2
          worker.loadbalancer.sticky_session=1


          其中對于node的命名規(guī)則是worker.節(jié)點名.xxxx。所以上述文件定義了兩個節(jié)點:server1和server2。8009端口是jboss默認的ajp端口,另外需要注意的是worker.server2.lbfactor參數(shù),它是節(jié)點的負載加權(quán),它的值越大,獲得負載的機會就越大。可以根據(jù)node的硬件性能進行調(diào)整。worker.loadbalancer.sticky_session參數(shù)是指定是否使用粘性session。

          所有需要負載均衡的節(jié)點,都必須在worker.loadbalancer.balanced_workers參數(shù)中列舉出來。

          請記住所有node的名稱和它對應(yīng)著哪臺機器,后面的配置中會使用。

          嘗試啟動apache:%apache\bin\apache.exe,正常情況下沒有任何提示。如果你使用的jk是2.0的,那么配置文件的寫法完全不同,由于mod_jk2已經(jīng)停止開發(fā),所以apache并沒有提供任何講解,對于配置文件的編寫也沒有任何指導(dǎo)。

          Jboss自帶均衡器的配置

          ???? 將文件夾%jboss%\docs\examples\varia\loadbalancer\loadbalancer.sar拷貝到%jboss%\ server\all\deploy下,并且修改loadbalancer.sar\loadbalancer.sar\META-INF\jboss- service.xml,在<host>標(biāo)簽中類出所有節(jié)點,在<sticky-session>標(biāo)簽中指定是否使用粘性 session。配置完成。

          ????該均衡器的缺點是負載能力相對不高,配置參數(shù)太少,比如無法指定不同節(jié)點的負載加權(quán),所以后面都以mod_jk為例,不再講解jboss自帶的負載均衡器的內(nèi)容。


          ????負載均衡的配置基本完成,啟動jboss,其中過程中會列出DefaultPatition中所有的節(jié)點:

          run.bat -c all

          2、session sticky配置

          ????apache 應(yīng)該會以粘性session的方式分發(fā)請求。部署一個應(yīng)用測試一下,你會發(fā)現(xiàn)粘性session沒有起作用。因為我們還沒有給jboss配置jvm路由 ( jvmRoute),apache就無法知道究竟哪些session是屬于哪個節(jié)點的。我們繼續(xù)往下:

          ????修改server1機器上的jboss的配置文件:%jboss%\server\all\deploy\jbossweb-tomcat55.sar\ META-INF\ jboss-service.xml

          ????在110行有:<attribute name="UseJK">false</attribute>,將它改為true。值得注意的是在這行標(biāo)簽上面有一段注釋,要求你在server.xml中必須有:
          Engine name="jboss.web" jmvRoute="Node1" defaultHost="localhost"

          ????請注意這里有一個氣死人不償命的小bug,jboss的官方文檔把 jvmRoute寫成了jmvRoute,就是v和m兩個字母的顛倒讓我郁悶了三天,翻遍了jboss.com和theserverside.com。都是直接拷貝的錯,吐血吐到脫水啊。

          ????下面需要修改server1上的%jboss%\server\all\deploy\jbossweb-tomcat55.sar\ server.xml,在32行左右有:

          <Engine name="jboss.web" defaultHost="localhost">


          給它增加一個jvmRoute屬性:

          <Engine jvmRoute="server1" name="jboss.web" defaultHost="localhost">


          請注意,jvmRoute的值必須和mod_jk中的節(jié)點名字正確對應(yīng),否則無法正確路由。Cluster中的所有節(jié)點都應(yīng)該做相應(yīng)的配置。

          Jboss的配置完成了,下面需要在你的web應(yīng)用中修改配置文件,讓它支持集群。

          在WEB-INF\web.xml中加入屬性:????<distributable/>

          Ok,基于用戶的cluster完成了,每個用戶會綁定都某個節(jié)點上進行交互。這種綁定是如何完成的呢?原來apache把客戶分發(fā)到節(jié)點后,該節(jié)點會在用戶的session id后面加上此節(jié)點的路由名稱,變成這個樣子:

          Efdfxxd98daja87daj76da2dka**,server1

          ????有了這個標(biāo)志,就能分辨該session屬于哪個節(jié)點。

          3、session replication配置

          ???? 下面要做的是基于request的cluster,也就讓各個節(jié)點之間互相復(fù)制session狀態(tài)。有兩種復(fù)制模式,同步與異步。使用同步的方式, jboss會把session復(fù)制的操作和對request的響應(yīng)放到一個應(yīng)用事務(wù)(application transaction),session 復(fù)制完成后才去處理request。異步復(fù)制則發(fā)送session復(fù)制的消息后馬上處理request,session復(fù)制則會稍有延遲。但是在多框架的 web頁面中,這樣的集群方式會有問題。由于frame在同一時間發(fā)出多個request,會造成一些混亂,這也是采用基于用戶的集群方式的原因之一。

          ????JBoss 4.0.2 中采用了Jboss cache來實現(xiàn)session復(fù)制,實際上就是一個分布式緩存,由于session id中包含了jvm route,所以能夠分辨session屬于哪個節(jié)點。Session的更新類似于hibernate中的樂觀鎖,有了更新之后就讓session的版本號增加,其他節(jié)點通過對比版本號來決定是否同步session狀態(tài)。

          ????配置session replication首先需要編輯
          %jboss% server\all\deploy\jbossweb-tomcat55.sar\META-INF\ jboss-service.xml,88行左右有:

          <attribute name="SnapshotMode">instant</attribute>


          這就是剛才提到的復(fù)制模式,instant為立即復(fù)制,如果設(shè)為interval 那么系統(tǒng)會在延遲一段時間再進行復(fù)制,時間長度在< attribute name="SnapshotInterval">2000</attribute>中指定,單位是毫秒。

          單獨配置這一個地方還不夠,在%jboss% server\all\deploy\ tc5-cluster-service.xml中有:

          <attribute name="CacheMode">REPL_ASYNC</attribute>


          這里才真正決定復(fù)制是同步的還是異步的,可以指定為REPL_ASYNC(異步)或者REPL_SYNC(同步)。

          在這個文件下面一點,還有一個config標(biāo)簽,里面指定了各個節(jié)點在進行session復(fù)制的時候如何通信,有udp和tcp兩種可選,如果使用udp方式,那么應(yīng)該將udp的lookback屬性指定為true,因為windows上有一個叫做media sense的東西會影響 udp multicast。注意如果你不了解multi address的ip規(guī)則,請不要隨便修改mcast_addr的值。如果采用tcp方式的話,應(yīng)該指定bind_addr的值為本機ip,并且在TCPPING標(biāo)簽的initial_hosts屬性中列出所有節(jié)點,格式是”機器名[端口號]”,比如在我們的例子中,就應(yīng)該這樣配置tcp(以其中一個節(jié)點為例):

          <config>
          <TCP bind_addr="172.16.0.116" start_port="7810" loopback="true"/>
          <TCPPING initial_hosts="172.16.0.116[7810],172.16.32.88[7810]" port_range="3" timeout="3500"
          num_initial_members="3" up_thread="true" down_thread="true"/>
          <MERGE2 min_interval="5000" max_interval="10000"/>
          <FD shun="true" timeout="2500" max_tries="5" up_thread="true" down_thread="true" />
          <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false" />
          ????<pbcast.NAKACK down_thread="true" up_thread="true" gc_lag="100"
          ???????? retransmit_timeout="3000"/>
          ????<pbcast.STABLE desired_avg_gossip="20000" down_thread="false" up_thread="false" />
          ????<pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="false"
          print_local_addr="true" down_thread="true" up_thread="true"/>
          <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
          </config>


          ????JBoss的clustering版主建議盡量使用udp。不過在Sobey內(nèi)部,建議使用tcp方式,經(jīng)測試可能有不明物體在影響udp通信,導(dǎo)致Timeout異常。

          ???? 在%jboss%\ server\all\deploy\ cluster-service.xml中也有關(guān)于udp和tcp的配置信息,在4.0以前版本的jboss中,會以這個文件為主配置,4.0以后都以tc5-cluster-service.xml為主配置。

          ????Jboss的配置完成了,最后需要在web應(yīng)用中增加配置信息,控制session復(fù)制的粒度。在WEB-INF\????jboss-web.xml中增加以下內(nèi)容:

          <replication-config>
          ????<replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger>
          ????<replication-granularity>SESSION</replication-granularity>
          ??</replication-config>


          其中replication-trigger是指定哪些操作引發(fā)session的版本更新,它的取值有:

          SET_AND_GET????????
          SET_AND_NON_PRIMITIVE_GET
          SET


          replication-granularity是復(fù)制粒度,可以取session或attribute。如果取為attribute有可能導(dǎo)致復(fù)制失敗,這是目前版本的jboss cache的一個bug,等待修正。

          部署項目,測試,如果配置沒有問題,可以在%jboss%\0server\all\log\server.log中發(fā)現(xiàn)類似于這樣的信息:

          DEBUG [org.jboss.web.tomcat.tc5.session.JBossCacheManager] check to see if needs to store and replicate session with id Im9-qpuaXppMS+xXwE3M+Q**.server1 

          DEBUG [org.jboss.web.tomcat.tc5.session.ClusteredSession] processSessionRepl(): session is dirty. Will increment version from: 20 and replicate.


          ????Session replication配置的成功率比較低,情況也很復(fù)雜,請仔細操作。

          五、分布式熱部署(distributable hot deploy)

          ???? 在一個節(jié)點很多的cluster中,如果部署應(yīng)用的時候必須把程序文件拷貝到每個機器上的話,那實在太愚蠢了,幸好通過all啟動的jboss自動支持分布式熱部署。把支持cluster的應(yīng)用(通常需要打包成war文件),放到%jboss%\server\all\farm下,那么處于同一 cluster中的其他節(jié)點會自動下載并且部署,jboss把這個稱為Farm deploy。如下圖:

          image

          posted @ 2006-10-25 11:15 ~哈哈~ 閱讀(786) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 唐山市| 皋兰县| 湟源县| 抚州市| 司法| 乃东县| 固阳县| 德昌县| 桐梓县| 韩城市| 乳源| 马边| 华亭县| 永丰县| 拜泉县| 绍兴市| 云霄县| 金坛市| 抚顺市| 崇礼县| 拜泉县| 临洮县| 拉孜县| 大庆市| 晋城| 海原县| 莆田市| 康马县| 吉林省| 南宁市| 彰武县| 昌乐县| 乌兰察布市| 凌海市| 金山区| 宁阳县| 盐边县| 凯里市| 秀山| 红河县| 绥阳县|