當前位置:首頁 » 網頁前端 » web怎麼實現群集
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web怎麼實現群集

發布時間: 2022-12-09 15:12:56

Ⅰ linux下websphere群集配置

方法很多,不知道你打算用貴點的還是便宜點的:
兩台web上裝IHS,前面再放兩個伺服器或者pc機,裝edge,配置浮動IP,正常情況下浮動IP在主,主down了,浮動IP自動飄到備機,edge就起到對兩台http
server的負載均衡作用,IHS又可以對應應用伺服器的不同埠。這樣比較便宜。
直接整個F5,放在http
server前面,負載均衡,這樣比較貴。
總感覺這個問題跟什麼操作系統沒關系,什麼操作系統都是這樣。至於DM,不是用來做負載均衡的。最好搞明白集群和負載均衡的區別。

Ⅱ windows 2003網路負載均衡器做Web伺服器集群策略,總是不能成功

向群集中添加其他節點
請打開 群集管理器。在出現的「打開到群集的連接」對話框中,在「操作」中選擇「添加節點到群集」,然後單擊「確定」。然後在「群集或伺服器名」中,或者鍵入一個已存在群集的名稱,從下拉型列表框中選擇一個名稱,或者單擊「瀏覽」以便搜索一個可用的群集。單擊「確定」以便繼續。出現「添加節點向導」。單擊「下一步」以便繼續。完成「添加節點向導」後,單擊「完成」。
警告
如果正在使用共享存儲設備,那麼開機並啟動操作系統時,保證只有一個節點可訪問群集磁碟至關重要。否則,可能會損壞群集磁碟。要防止損壞群集磁碟,請在創建群集之前,只保留一個節點而關閉所有其他節點,或使用其他技術(如邏輯單元號碼或 LUN 屏蔽、選擇性表示或劃分區域)保護群集磁碟。群集服務在一個節點上正常運行後,即可同時添加和配置其他節點。
注意
要執行該過程,您必須是本地計算機 Administrators 組的成員,或者您必須被委派適當的許可權。如果將計算機加入域,Domain Admins 組的成員可能也可以執行這個過程。作為安全性的最佳操作,可以考慮使用運行方式來執行這個過程。
要打開「群集管理器」,請依次單擊「開始」和「控制面板」,雙擊「管理工具」,再雙擊「群集管理器」。也可以從「文件」菜單向一個已存在的群集添加節點,首先單擊「打開連接」以便連接一個已存在的群集。然後,可以單擊「新建」,再單擊「節點」,從「文件」菜單打開「添加節點向導」。您可以安全地取消,並且重新啟動安裝程序。
如果登錄的計算機已經是已存在群集的一個節點,「群集管理器」將默認地連接到該群集。向伺服器群集添加新節點後,使用「群集管理器」以便故障轉移群集磁碟,並驗證群集磁碟聯機返回。有關如何操作的信息,請參閱「相關主題」中的「測試組資源可否故障轉移」。
要在無人參予安裝後向已存在的群集添加節點,請運行一個腳本以便調用 cluster /add: 命令,並在命令行提供所有必須的配置信息。有關無人參與安裝的信息,請參閱「相關主題」中的「計劃無人參與的安裝」。有關群集命令行語法的詳細信息,請參閱「相關主題」中的「Cluster」。

Ⅲ IIS如何實現群集技術

應該是集群吧,如果是php或者jsp我真的不建議你用windows的iis,前端可以用tengine抗並發,後端Apache集群。但是如果你是asp.net的程序,或者什麼要求必須用iis。那就說幾句:

  1. Application Request Route(ARR)需要先安裝這個「Platform installer」,去微軟官方下載就好。網頁鏈接

  2. 安裝之後,可以在iis里看到server farms。

  3. 對了,安裝的時候要選組件,選三個就夠用「Web Deploy V3.0」「Applicaiton Request Router 3 for IIS」「Url Rewriter 2」。分別是web部署、請求路由、地址重寫。

  4. 右鍵點選server farms,點擊Create Server Farms(創建集群),記得本機要用localhost,再加入其它三個節點就可以了(測試,可以用同路由里的其他地址)

  5. 我們進行Health Test(診斷)

  6. 通過Verify URL Test (驗證URL測試),如果本機和其他兩個節點都是pass,那就是成功了。

  7. 就能把資源分出去了,本機localhost只作為轉發,不提供其他服務,所有資源存儲,請求,傳輸都是其他你創建的幾個節點建立的。

  8. 集群就創建並測試完畢了。

不過還是得說一句,如果不是特殊要求,而且也不是net的程序,建議還是在linux上用,前端用nginx-tengine抗並發,後端Apache做集群。

Ⅳ 如何正確設置IBM WebSphere MQ 實現群發消息

1.現在的問題是建立了共享隊列INPUTQ 後,在QMGRI裡面壓根看不到共享隊列。。
誰能告訴我為什麼么?

大哥你怎麼看的?QL CLUSTER屬性設置對了嗎?
DEF QL(YOURQNAME) CLUSTER(REPOS_NAME)
你看的是QCLUSTER嗎?
DIS QC(*)

2.往一個隊列管理器里的隊列里發消息,
其他的所有對立管理器的本地隊列都能收到消息
太簡單了,注意RFHUTIL裡面有個BIND屬性,不要設置成OPEN,必須是NOT_FIXED;或者多次使用amqsputc多次打開,不要一次拚命放消息,都可以看到分發效果,默認負載均衡的演算法是ROUND_ROBIN

3.好了,上面的問題解決了。。
不過現在對WebSphere MQ的功能產生了懷疑,

我真想捧腹大笑

4.應用程序只能主動去詢問MQ,指定的隊列中有消息否。要是這樣的話,那不是要輪詢指定的隊列?難道不能讓MQ將消息直接推送到應用程序么?

去看看TRIGGER, MDB有關的資料,我不想費口舌了。當你學會基礎之前STOP MAKING JUDGEMENTS.

Ⅳ 如何實現WebSphere Application Server 6集群環境下的定時服務

有幾個問題請教高手:
1、如何創建websphere垂直集群?具體步驟。
2、一台機器上已經存在一個供別人使用的custom01節點,那麼該機器還可以安裝DM再建一個集群嗎?
3、websphere6.1中單元(DM)和 Development Manager 有什麼區別嗎?(需簡單易懂的描述)
謝謝大家!
WebSphere Network Deployment 遷移概述
可使用遷移向導或遷移命令執行 WebSphere 遷移。盡管遷移向導提供了一個將配置文件遷移到默認位置的標准方法,但遷移命令可用於將配置文件遷移到安裝樹以外的位置。

圖 1. 遷移向導

在集群生產環境中,系統管理員將使用遷移命令(即 WASPreUpgrade 和 WASPostUpgrade)作為在自動腳本中遷移應用程序和配置的首選方式。這些工具從 WebSphere Application Server Network Deployment V6 復制現有的配置,包括舊的默認值和埠、JVM 參數等設置,並將它們合並到新的 WebSphere Application Server Network Deployment V7 配置中。

WASPreUpgrade 命令創建一個 WebSphere Application Server V6 配置信息的備份,然後,WASPostUpgrade 命令提取由 WASPreUpgrade 創建的備份,將以前的配置移動??到 WebSphere Application Server V7 中。WASPostUpgrade 工具在進行任何更改之前還會創建一個 WebSphere Application Server V7 環境的備份,因為如果發生錯誤,它會嘗試回滾這些變更。

圖 2. 使用 WASPreUpgrade 和 WASPostUpgrade 命令的遷移過程

遷移過程同步被遷移的節點與部署管理器中的數據,在此過程中,新的配置文件的配置內容被上傳到部署管理器,一次上傳一個文件。

在遷移過程中,相同的埠值默認情況下會從 V6.0 Deployment Manager 映射到 V7.0 Deployment Manager,包括 SOAP 連接器。在這個過程中,WASPostUpgrade 通過使用 -replacePorts 參數可以糾正可能發生的任何埠沖突。

大型 WebSphere 網路部署拓撲
WebSphere 網路部署拓撲包括部署管理器以及一個或多個節點,應用程序伺服器駐留在節點上,以運行應用程序。大型部署拓撲通常包含數百個應用伺服器或多個節點。舉一個例子,節點和伺服器均衡搭配的大型網路部署拓撲可能有 30 個節點,每個節點有 ?20 個伺服器,或者其中的節點更多、伺服器更少,可能有 60 個節點,每個節點有 ?20 個伺服器,均由一個部署管理器進行管理。再舉一個例子,包含部署管理在內的稍大型部署拓撲可能是,其中有 25 個節點,每個節點至少有一個應用程序伺服器。然而出於本練習的目的,在隨後的段落中將介紹一個在集群環境中相對較小但復雜的拓撲。

本遷移練習的復雜拓撲
按照以下步驟,針對本次生產中的遷移練習建立一個復雜的拓撲:

在集群環境中,一個部署管理器管理 8 個 AIX 伺服器節點,每個節點管理 2 個 WebSphere Application Server 實例。換句話說,集群中將有 1 個部署管理器,8 個節點代理和 16 個 WebSphere Application Server 實例。部署管理器伺服器和應用程序伺服器都是虛擬伺服器。還有一個接受管理的 WebSphere Application Server 與部署管理器駐留在同一個 AIX 伺服器上。帶有 Message Driven Beans (MDB) 的 J2EE 應用程序被部署在獨立的應用伺服器 - WAS(MDB)。圖 3. 本遷移練習的復雜 WebSphere 部署拓撲

復雜拓撲的運營管理
從部署管理器(如 DMGR1)到單個應用程序伺服器的管理請求通過部署管理器流到與伺服器所駐留的同一節點上的節點代理,最後到應用伺服器本身。 部署管理器只和節點代理通信,每一個節點代理與其各自的應用伺服器進行通信,如 WAS1 或 WAS(MDB)。

環境
WebSphere Application Server Network Deployment V6.0.2 (現有的)。WebSphere Application Server Network Deployment V7.0.0.13 (新的)。AIX 6.1IBM CICS? 3.2LDAPIBM DB2?WebSphere MQ V6在 WebSphere Application Server V6 中關閉了 Global security (全局安全性)。WebSphere Application Server V7.0 的 Deployment Manager 上的安全性在遷移時被禁用。遷移計劃
在 WebSphere Application Server Network Deployment V7 上創建配置文件:
Deployment Manager 配置文件 – 一個部署管理器,管理在其單元中聯合的應用程序伺服器。 Application Server 配置文件:
在集群環境中的 Application Servers 聯合到一個單元中。 Application Server,獨立於集群的應用程序伺服器,由部署管理器管理。 將部署管理器從 WebSphere Application Server Network Deployment V6 遷移到 V7。將集群應用程序伺服器的節點從 WebSphere V6 遷移到新的 V7,並將它與新的 WebSphere Application Server Network Deployment V7 部署管理器聯合。遷移獨立的應用程序伺服器與 MDB J2EE 應用程序。網路部署遷移前的考慮因素
除了 WebSphere Application Server V6 的二進制文件和配置文件之外,需要分配足夠的文件系統空間來滿足 WebSphere Application Server V7 的二進制文件和配置文件。需要設置許可權允許在 WebSphere 和 Update Installer 的二進制文件系統上進行讀、寫或創建。需要安裝 WebSphere Application Server Network Deployment V7 產品,並按拓撲創建配置文件(部署管理器和應用程序伺服器)。部署管理器 WebSphere V7 需要正常運行,因為聯合節點遷移需要一個連接到部署管理器的活動連接。在 WebSphere V7 應用程序伺服器上的任何遷移嘗試中止,都需要通過還原配置文件的備份,或重新創建配置文件來清理配置文件,然後再進行下一次遷移嘗試。請參閱 「如何清理失敗的遷移」 一節。遷移步驟
遷移所需的實用工具和命令可以在 WebSphere V7 bin 目錄中找到,如 '/usr/Websphere/AppServer/v7.0_app1/bin'。在使用 WASPreUpgrade 和 WASPostUpgrade 命令時,可能會在命令行語法中指定 -traceString 參數,以跟蹤代碼。本練習所執行的遷移命令及參數是:

清單 1. WASPreUpgrade 命令
/usr/WebSphere/AppServer/v7.0_MNQ/bin >> ./WASPreUpgrade.sh
/waslogs/was6_to_was7/migration/migration_ABCD_MNQ_app01_026
/usr/Websphere/AppServer/v6.0_MNQ
-oldProfile ABCD_MNQ_app01
-traceString "*=all=enabled"
-traceFile /waslogs/was6_to_was7/trace/WASPreUpgrade_trace.log升級前的步驟可能成功完成,也可能因某些問題而失敗(在隨後的段落中將單獨介紹)。

清單 2. manageprofiles 命令
/usr/WebSphere/AppServer/v7.0_MNQ/bin >> ./manageprofiles.sh
-create -profileName ABCD_MNQ_temp
-profilePath /var/opt/websphere/profiles/ABCD_MNQ _temp
-cellName ABCD_MNQ_cell01
-portsFile /tmp/ports_file.txt -hostName 026 -nodeName ABCD_MNQ_app01_026manageprofiles 命令將創建一個配置文件。

清單 3. WASPostUpgrade 命令
/usr/WebSphere/AppServer/v7.0_MNQ/bin >> ./WASPostUpgrade.sh
/waslogs/was6_to_was7/migration/migration_ ABCD_MNQ_app01_026
-oldProfile ABCD_MNQ_app01
-profileName ABCD_MNQ_temp
-traceString "*=all=enabled"
-traceFile /waslogs/was6_to_was7/trace/WASPostUpgrade_trace.log升級後的步驟可能成功完成,也可能因某些問題而失敗(在隨後的段落中將單獨介紹)。

問題及其解決方法
問題:使用 MIGR0484E/MIGR0272E 遷移應用程序伺服器時,WASPreUpgrade 遷移命令失敗。

清單 4. 使用 MIGR0484E/MIGR0272E 遷移失敗
IBM WebSphere Application Server, Release 7.0
Proct Upgrade PreUpgrade tool, Version 1.0
Copyright IBM Corp., 1997-2008
MIGR0300I: The migration function is starting to save the existing
Application Server environment.
MIGR0302I: The existing files are being saved.
MIGR0484E: No profiles or instances found with name ABCD_MNQ_app01.
MIGR0001I: The class name of the WASPreUpgrade command is WASPreUpgrade
MIGR0272E: The migration function cannot complete the command.在遷移失敗之前執行的步驟是:

WebSphere Application Server V7 Deployment Manager 啟動正常運行,並且 WebSphere Application Server V6 節點代理和應用程序伺服器已停止。Deployment Manager 已成功從 WebSphere Application Server V6 遷移到 V7。解決方法:為了對該失敗進行疑難解答,請通過 ps-ef|grep java 命令的幫助,確保 WebSphere Application Server V6 的 wasprofile 命令沒有運行。還需要確保配置文件注冊表中引用了 ABCD_MNQ_app01 配置文件,可以在文件 profileRegistry.xml 中檢查這一點,該文件位於 '/usr/WebSphere/AppServer/v6.0_MNQ/properties'。

清單 5. ProfileRegistry.xml 文件
profile isDefault="true" name="ABCD_MNQ_app01"
path="/var/opt/websphere/profiles/ABCD_MNQ_app01"
template="/usr/Websphere/AppServer/v6.0_MNQ/profileTemplates/managed"另外,請確認不存在 'profileRegistry.xml_LOCK 文件。

確認所有上述條件後,請注意,ABCD_MNQ_app01 配置文件未在 fsdb 目錄中引用,並且由於這個原因造成遷移失敗。需要將下面的腳本復制到目錄 WAS_HOME Directory /properties/fsdb 中。

清單 6. 復制到 fsdb 目錄的腳本
#!/bin/sh
WAS_USER_SCRIPT=/var/opt/websphere/profiles/ABCD_MNQ_app01/bin/setupCmdLine.sh
export WAS_USER_SCRIPT執行該步驟之後,遷移命令成功運行。

問題:使用 MIGR0286E 時,WASPostUpgrade 遷移命令失敗,原因是 Illegal State Exception。

清單 7. 使用 MIGR0286E 時遷移失敗,原因是 java.lang.IllegalStateException
DSRA7602I: Attempting to delete newly created Derby database
/var/opt/websphere/profiles/ABCD_MNQ_app701/databases/ABCD_MNQ_app01_027.
ABCD_MNQ_app01_027_s01-ImmediateBatchBus_027_s01_122132600_

CLOUDSCAPE_MIGRATION_DELETION_DONE
java.lang.IllegalStateException: java.lang.IllegalStateException:
Depth value 3 must be set
at com.ibm.ws.runtime.component.VariableMapImpl.reload(VariableMapImpl.java:238)
at com.ibm.ws.runtime.component.VariableMapImpl.refresh(VariableMapImpl.java:152)...
at com.ibm.ws.migration.postupgrade.WASPostUpgrade.restore(WASPostUpgrade.java:246)
at com.ibm.ws.migration.postupgrade.WASPostUpgrade.main(WASPostUpgrade.java:539)

Caused by: com.ibm.websphere.management.exception.RepositoryException:
com.ibm.websphere.management.filetransfer.client.TransferFailedException:
Error occurred ring upload to: upload/cells/ABCD_MNQ _cell01/nodegroups/
DefaultNodeGroup/nodegroup.xml.
Exception: java.io.IOException: Read error

Caused by: java.io.IOException: Read error
at java.io.FileInputStream.read(FileInputStream.java:191)
at com.ibm.ws.management.repository.TempFileInputStream.read
(TempFileInputStream.java:91)
at com.ibm.websphere.management.repository.RepositoryInputStream.read
(RepositoryInputStream.java:120)...
at com.ibm.ws.management.filetransfer.client.FileTransferClientImpl.uploadFile
(FileTransferClientImpl.java:302)
.. 30 more

MIGR0286E: The migration failed to complete.解決方法:遷移中同步進程失敗了,因為系統用戶在 AIX 環境中缺少文件句柄。將 AIX nofiles 限制設置(即,ulimit-n)從默認的 2000 增加到 10000,從而解決這個問題。

問題:將集群應用伺服器從 WebSphere Application Server ND V6 遷移到 V7 時,部署管理器似乎在尋找其他應用程序伺服器配置,但它無法找到,並發生了遷移失敗。

解決方法:在本練習特定的這個復雜拓撲中,獨立的應用程序伺服器與部署管理器 (DMGR1) 位於相同的 AIX 伺服器上,該應用程序伺服器的遷移需要在集群應用伺服器的遷移之後進行。決定以這個特定的順序執行遷移,從而解決了這個遷移問題。

問題:因明顯的 「網路連接復位」 或 「網路讀錯誤」 造成遷移失敗。在遷移過程中的文件上傳期間,網路連接被復位,這導致文件上傳失敗。同步進程向遷移工具報告了失敗,遷移工具中止遷移操作。在其他時間,同步進程報告網路讀錯誤,從而導致遷移操作中止。這是在處理與第一次嘗試所不同的文件時發生。看來,節點和部署管理器之間的網路連接在遷移發生時被中斷。

解決方法:初看起來,這似乎是一個網路問題,因為部署管理器切斷了連接,遷移節點只能感知其連接莫名其妙地被中止。不需要考慮網路問題,因為部署管理器伺服器和故障的應用伺服器都是在虛擬機管理程序中的虛擬伺服器。事實上,遷移工具的傳入數據使部署管理器的連接達到飽和,並且部署管理器達到了對在該通道允許的開放連接數所設置的上限。我們注意到,在部署管理器的 SystemOut 日誌中,TCP Channel 'TCP_1' 已經超過了配置的最大開放連接數量 100。

下圖說明了這個設置:

圖 4. WC_adminhost 埠上的 TCP 通道的最大開放連接數

圖 5. WC_adminhost_secure 埠上的 TCP 通道的最大開放連接數

這個問題解決方法是,在遷移練習中將 WC_adminhost 和 WC_adminhost_secure 埠的 TCP 通道的最大開放連接數從 100 提高到 20000。

問題:作為遷移驗證的一部分,應用程序伺服器在啟動時就出現了問題,'ibmasyncrsp' 進程無法啟動。

清單 8. 系統應用程序 'ibmasyncrsp' 無法啟動
00000021 ApplicationMg A WSVR0200I: Starting application: ibmasyncrsp
00000021 ApplicationMg A WSVR0203I:
Application: ibmasyncrsp Application build level: 1 [2]
00000020 ApplicationMg A WSVR0200I: Starting application: MNQ_v3.30_HF11
ApplicationMg A WSVR0204I: Application: MNQ_v3.30_HF11
Application build level: Unknown
00000021 FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I:
FFDC Incident emitted
00000021 DeployedAppli W WSVR0206E: Mole, ibmasyncrsp.war, of application,
ibmasyncrsp.ear/deployments/ibmasyncrsp, failed to start
00000021 ApplicationMg W WSVR0101W: An error occurred starting, ibmasyncrsp
00000021 ApplicationMg A WSVR0217I: Stopping application: ibmasyncrsp
00000021 FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I:
FFDC Incident emitted解決方法:在本練習中,在開始遷移之前,已經通過 Admin Console 將「default_host」 的定義從 'default_host' 修改為 'MNQ_default_host',並且已為應用程序更新了 Virtual Host 映射。但是,在遷移之後,系統應用程序似乎仍引用 'default_host' 而不是 'MNQ_default_host',並且 Application Server 啟動跟蹤顯示 「open for e-business, problems occurred ring startup」。

Ⅵ 如何搭建WebSphere MQ 群集

websphere mq : 用於傳輸信息 具有跨平台的功能。
1 安裝websphere mq 並啟動
2 websphere mq 建立 queue Manager (如:MQSI_SAMPLE_QM)
3 建立queue 類型選擇 Local類型 的 (如lq )
3 建立channels 類型選擇Server Connection (如BridgeChannel)

java 代碼如下:

package test.mq;
import com.ibm.mq.*;
/*
* 成功的訪問mq 的java 類
*/
public class FirstMqTest {
// public static void main(String[] args[]){
// FirstMqTest first = new FirstMqTest();
// first.test();
// }
public static void main(String args[]){
FirstMqTest first = new FirstMqTest();
first.test();

}
public void test(){
String qManager = "MQSI_SAMPLE_QM"; //QueueManager name
String qName = "lq";//Queue Name
try {
//configure connection parameters
MQEnvironment.hostname="172.16.17.123";//MQ Server name or IP
//MQEnvironment.port=1414;//listenr port
MQEnvironment.channel="BridgeChannel";//Server-Connection Channel
MQEnvironment.CCSID =1381;
// Create a connection to the QueueManager
System.out.println("Connecting to queue manager: "+qManager);
MQQueueManager qMgr = new MQQueueManager(qManager);
// Set up the options on the queue we wish to open
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
// Now specify the queue that we wish to open and the open options
System.out.println("Accessing queue: "+qName);
MQQueue queue = qMgr.accessQueue(qName, openOptions);
// Define a simple WebSphere MQ Message ...
MQMessage msg = new MQMessage();
// ... and write some text in UTF8 format
msg.writeUTF("Hello, World!");
// Specify the default put message options
MQPutMessageOptions pmo = new MQPutMessageOptions();
// Put the message to the queue
System.out.println("Sending a message...");

/*
* 在此測試一下 mq 的傳輸次列
*
*/
for(int j=0;j< 5;j++){
String str ="test11111111111";
str = str+j;
msg.writeUTF(str);
queue.put(msg, pmo);
}
queue.put(msg, pmo);
// Now get the message back again. First define a WebSphere MQ message
// to receive the data
MQMessage rcvMessage = new MQMessage();

// Specify default get message options
MQGetMessageOptions gmo = new MQGetMessageOptions();
// Get the message off the queue.
System.out.println("...and getting the message back again");
queue.get(rcvMessage, gmo);
// And display the message text...
String msgText = rcvMessage.readUTF();
System.out.println("The message is: " + msgText);
// Close the queue
System.out.println("Closing the queue");
queue.close();
// Disconnect from the QueueManager
System.out.println("Disconnecting from the Queue Manager");
qMgr.disconnect();

Ⅶ Web的句法群集

亂七八糟!

Ⅷ Domino群集服務中web服務可以群集切換嗎,不影響用戶使用

Cluster只是針對CS端的,也就是Notes可以做到實效轉移,web默認不可以。可以通過配置文檔中的ICM配置實現

58590632 Lotus技術交流群

Ⅸ 如何實現WebSphere Application Server 6集群環境下的定時服務

1、 概述
在很多企業應用中有時需要在特定的時間運行一段代碼,比如銀行需要在晚上系統相對空閑的時間
內進行日結的對帳,那麼到了規定時間系統需要觸發對帳服務運行對帳程序,現在EJB定時器服務能解決這個問題,它是一個可靠的、事務性的、提供容器的服
務,允許Bean提供者注冊定時反饋的企業Beans,它可以在特定時刻發生,或在某段時間之後發生,或以一定時間間隔重復發生。由於這個服務是可靠的,
容器破壞的時候定時依然有效,企業Beans的激活與失效、裝載與保存周期都由定時器注冊。定時器服務由EJB容器實現,定時器服務可以通過
EJBContext介面新增的getTimerService()方法來訪問,它返回實現TimerService介面的對象:這個介面允許創建不同的
定時器來支持在不同時間、不同時間間隔、不同時間周期時發生的定時反饋。使用定時器服務的企業Beans的Bean類必須實現
javax.ejb.TimedObject介面。在EJB2.1中,只有無序的會話Beans和實體Beans可以注冊為定時器服務。這個功能在以後的
規范中可能會擴展到其它類型的Bean。
定時器服務適合長時間的業務處理模型,但並不適合用於實時的事件模型。
在 WebSphere Application Server
6中,EJB 定時服務將 EJB
計時器作為新的調度程序服務任務實施。預設情況下,內部調度程序實例用於管理那些任務,定時任務存放在與伺服器進程關聯的 Cloudscape
資料庫中。在集群環境中,任務必須存放在企業關系型資料庫中。下面我們以DB2為例講述怎樣在集群環境中配置定時服務。
回頁首
2、 創建用於定時服務的資料庫

個定時服務程序都需要一個資料庫,以用於存儲它的持久信息。資料庫及其位置應當由應用程序開發者和伺服器管理員決定。
定時服務程序使用這個資料庫來存儲任務,然後運行這些任務。定時服務程序性能極大地依賴於資料庫的性能。如果需要每秒執行更多任務,您可以在更大型的系統
中運行定時服務程序守護程序,或通過使用多個定時服務程序對任務或分區使用的會話 bean
使用集群。但是,定時服務程序資料庫最終會達到飽和狀態,此時您就需要一個更大型或更優異的資料庫系統。
當您在每個定時服務程序配置中指定唯一的表前綴值時,多個定時服務程序可以共享一個資料庫。這一共享可以降低定時服務程序資料庫的管理成本。
TIPS:Oracle
XA 資料庫的限制,Oracle XA 不允許在全局事務環境中執行所需的模式操作。本地事務是不受支持的。如果您的調度程序使用 Oracle
XA 數據源,您可以將調度程序配置臨時更改為使用一個非 XA Oracle 數據源,或者使用提供的 DDL
文件手工創建表。如果使用管理控制台為配置為使用 Oracle XA 數據源的調度程序創建或刪除調度程序表,您將接收到一條
SchelerDataStoreException 錯誤消息並且操作將失敗。
下面我們將以DB2為例講述定時服務:
在機器hostdb上安裝DB2後,打開 DB2 命令行窗口。

保您擁有資料庫系統的管理員許可權,驗證此資料庫確實支持 Unicode(UTF-8)。 否則,此資料庫無法存儲 Java
代碼中可以處理的所有字元,當客戶機使用了不兼容的代碼頁時,這將導致代碼頁轉換問題。要避免死鎖,請確保將 DB2
隔離級別設置為"讀穩定性"。如果需要,請輸入命令 :
db2set DB2_RR_TO_RS=YES

然後重新啟動 DB2 實例以激活這一更改。在 DB2 命令行處理程序中輸入以下命令使用示例名 timerdb 創建資料庫:

db2 CREATE DATABASE scheddb USING CODESET UTF-8 TERRITORY en-us

即可創建名為 timerdb 的 DB2 資料庫。
現已為定時服務創建了 DB2 資料庫。
回頁首

3、 創建定時服務的表空間和表
在WAS6的安裝目錄下,有一個名為scheler的目錄。下麵包含WAS容器用來管理定時服務的各種資料庫SQL定義。
對應於DB2的SQL定義文件名為createSchemaDB2.ddl和createTablespaceDB2.ddl,修改這兩個文件選擇你所要新建的表空間名和你所要的模式名稱。這兩個文件大致內容如下:
createTablespaceDB2.ddl
CREATE TABLESPACE @SCHED_TABLESPACE@ MANAGED BY SYSTEM USING
( '@location@\@SCHED_TABLESPACE@' );

可以修改表空間名稱,這個文件也可不做修改。然後修改createSchemaDB2.ddl
修改後的的結果可以去掉原來的模式名稱,那麼新建用戶表的時候將使用預設連接資料庫的用戶的模式名。

CREATE TABLE "TASK" ("TASKID" BIGINT NOT NULL ,
"VERSION" VARCHAR(5) NOT NULL ,
"ROW_VERSION" INTEGER NOT NULL ,
"TASKTYPE" INTEGER NOT NULL ,
"TASKSUSPENDED" SMALLINT NOT NULL ,
"CANCELLED" SMALLINT NOT NULL ,
"NEXTFIRETIME" BIGINT NOT NULL ,
"STARTBYINTERVAL" VARCHAR(254) ,
"STARTBYTIME" BIGINT ,
"VALIDFROMTIME" BIGINT ,
"VALIDTOTIME" BIGINT ,
"REPEATINTERVAL" VARCHAR(254) ,
"MAXREPEATS" INTEGER NOT NULL ,
"REPEATSLEFT" INTEGER NOT NULL ,
"TASKINFO" BLOB(102400) LOGGED NOT COMPACT ,
"NAME" VARCHAR(254) NOT NULL ,
"AUTOPURGE" INTEGER NOT NULL ,
"FAILUREACTION" INTEGER ,
"MAXATTEMPTS" INTEGER ,
"QOS" INTEGER ,
"PARTITIONID" INTEGER ,
"OWNERTOKEN" VARCHAR(200) NOT NULL ,
"CREATETIME" BIGINT NOT NULL ) IN "@SCHED_TABLESPACE@";

這兩個文件修改完成後,在命令行運行db2cmd轉到db2命令窗口。
然後運行db2batch -d timerdb -f createTablespaceDB2.ddl
和db2batch -d timerdb -f createSchemaDB2.ddl生成定時服務所需要的表空間和表。
運行完成後用下列命令驗證:

Db2 connect to timerdb
Db2 list tables

你將會看到有以下四個表被創建:

Table/View Schema Type
------------ ------------- -----
LMGR ADMIN T
LMPR ADMIN T
TASK ADMIN T
TREG ADMIN T

其中主表task存放了定時程序的相關信息。
回頁首

4、 創建新的集群
分別在hosta,hostb,hostc上完成WAS6安裝後,我們需要創建3個節點來組成一個新的群集。
1)在hosta上創建一個Network DeployManagement節點,啟動概要表創建向導:
選擇創建Deployment Manager概要表:

點下一步直至完成

2)分別在hostc和hostb兩個節點上選擇創建應用伺服器概要表。
3)創建完成後在DeployManager概要上運行startManager.sh啟動Network Manager。
4)啟動完成後打開概要下的日誌文件SystemOut.log查看soap埠,預設為8879。
5)在hostb和hostc兩個應用伺服器節點上運行addNode.sh hosta 8879
6)運行完成後,打開ND管理控制台:http://hosta:9060/ibm/console
7)在伺服器下新建一個群集timertest,創建兩個成員為clus01,clus02。啟動群集。
回頁首

5、 創建定時服務的數據源
進入ND管理控制台,展開資源,點擊JDBC 提供者,選擇要新建的資源所在的伺服器

點新建。按提示輸入所需資料。點數據源,進入數據源頁面。
新建一個名為testtimer的數據源,指定jndi名為jdbc/testtimer

測試連接通過後。做下一步設置。
回頁首

6、 修改伺服器設置
打開管理控制台。
單擊伺服器 >應用程序伺服器 > 伺服器名 > EJB 容器設置 > EJB 定時服務設置。 出現"定時服務設置"面板。
如果您要使用內部或預配置的調度程序實例,則單擊使用內部 EJB 定時服務調度程序實例單選按鈕。
如果您選擇不更改預設的設置,則此實例與 Cloudscape 資料庫相關聯。
更改數據源選擇輸入您所選的數據源別名。選擇前面創建的jdbc/testtimer數據源。
輸入表前綴為你創建表時的用戶預設模式名稱,必須注意的是,在模式名稱後面必須要帶上一個小數點.。具體對應的每個值的意思可以點擊幫助頁面查看。
回頁首
7、 開發基於J2EE標準的定時服務企業bean
下面的例子是在RAD環境下開發,要實現定時服務,EJB必須要實現javax.ejb.TimedObject介面。
EJB裡面需要涉及到的介面或類分別是:
要實現的TimedObject和TimerService,Timer。

EJB中的ejbContext增加了一個方法.getTimerService();用於獲得TimerService類。但這個方法不能在
setEntityContext()、setSessionContext()、setMessageContext()方法中調用。
下面列出了三個介面的定義:
public interface TimedObject{
public void ejbTimeout(Timer timer);
}
public interface TimerService{
public Timer createTimer(Date expiration,Serializable info);
public Timer createTimer(long ration,Serialzable info);
public Timer createTimer(Date initalExpiration,long intervalDuration,Serializable info);
public Timer createTimer(long initalDuration,long intevalDuration,Serializable info);
public java.util.Collection getTimers();
}
public interface Timer{
public void cancel();
public java.io.Serializable getInfo();
public Date getNextTimeout();
public long getTimeRemaining();
public TimerHandle getHandle();//這是一個local對象,不能傳到remote client端使用
}

對於StatelessSessionBean來說,不要在ejbCreate()和ejbRemove()中設置Timer。主要是因為ejbCreate和ejbRemove調用的時間和次數都因Container Vendor而異。可能導致錯誤設置Timer。
對MessageDriven Bean 而言,和Stateless SessionBean的情況基本相似。但是設置Timer應該在onMessage()裡面。通過一個JMS來進行觸發。
ejbTimedout是一個回調方法,執行具體的商業邏輯,那麼怎樣設置什麼時間觸發這個方法呢,我們利用javax.ejb.TimerSevice。該對象我們可以從EJBContext中獲得該對象實例。

定時器創建的特定時間到達後,容器就會觸發ejbTimeout(),運行ejbTimeOut方法提,Bean在終止之前通過調用定時器Cancel方
法取消定時器,它是定時器介面的一部分,如果定時器被取消,ejbTimeout()方法就不會被調用了。定時器介面的getHandle()方法返回一
個序列化的handle對象。接下來,這個持續的Handle能夠"非序列化",通過調用getTimer()方法得到定時器。由於定時器是本地對
象,TimerHandle不必通過Bean的遠程介面或Web Services介面來傳遞。
具體步驟如下:
新建一個EJB項目otherTimer,在這個EJB項目里新建一個otherTimer的會話Bean。
在Bean實體裡面需要實現兩個方法:
startTimer()和ejbTimeOut。

startTimer()方法裡面,我們通過EJBCONTEXT取得一個TimerService然後創建一個Timer。這個timer將在
2005,9月19日晚上8點過5分觸發,觸發後,EJB容器會調用ejbTimeOut()方法運行具體的商業邏輯,並且這個Timer會在80000
毫秒後再次觸發。

javax.ejb.TimerService ts=this.getSessionContext().getTimerService();
System.out.println("啟動一個時鍾!");
Timer timer = ts.createTimer(new Date(105,9,19,20,5,0),80000,"other timer");

回頁首

8、 WAS Scheler實現

於WAS
Scheler實現定時服務,需要配置一個scheler,在WAS管理控制台展開資源,點scheler,新建一個scheler指定
名稱、JNDI名、數據源JNDI名(這里可以用前面設置的jndi/testtimer)和表前綴,跟前面設置伺服器EJB定時服務容器設置類似。
設置完成後就可以使用scheler來實現定時服務了。

EJB模塊中創建一個無狀態會話bean,該 bean 實現了 com.ibm.websphere.scheler.TaskHandler
遠程介面中的 process() 方法。將您要創建的業務邏輯放入 process() 方法中。當運行任務時,將調用 process()
方法。Home 和 Remote 介面在部署描述符 bean 中必須設置如下:
com.ibm.websphere.scheler.TaskHandlerHome
com.ibm.websphere.scheler.TaskHandler

通過使用以下示例工廠方法創建 BeanTaskInfo 介面的一個實例。 使用 JSP 文件、servlet 或 EJB 組件創建實例,如以下代碼示例所示。此代碼必須與先前創建的 TaskHandler EJB 模塊位於同一應用程序中:

Object schelerObj = initialContext.lookup("java:comp/env/Scheler");
BeanTaskInfo taskInfo = (BeanTaskInfo) schelerObj.createTaskInfo(BeanTaskInfo.class)

註:
創建 BeanTaskInfo 對象並不會將任務添加到持久存儲中。它將為必要的數據創建一個佔位符。直到調用調度程序中的 create()
方法,才會將任務添加到持久存儲中。設置 BeanTaskInfo 對象中的參數。 這些參數定義了調用哪些會話 bean
以及何時調用它們。TaskInfo 介麵包含可用於控制任務執行的各種 set() 方法,其中包括運行任務的時間以及運行任務時它執行的操作。
BeanTaskInfo
介面要求使用 setTaskHandler 方法設置 TaskHandler JNDI 名稱或 TaskHandlerHome。如果使用
WASScheler MBean API 來設置任務處理程序,則 JNDI 名稱必須是標準的全局 JNDI 名稱。
使用 TaskInfo 介面 API 方法設置參數,如以下代碼示例所示:

java.util.Date startDate = new java.util.Date(System.currentTimeMillis()+30000);
Object reportGenHomeObj = initialContext.lookup("java:comp/env/ejb/ReportGenerator");
TaskHandlerHome reportGenHome = (TaskHandlerHome)PortableRemoteObject.narrow
(reportGenHomeObj,TaskHandlerHome.class); taskInfo.setTaskHandler(home);
taskInfo.setStartTime(startDate);
scheler.create(taskInfo);

那麼EJB容器將在當前時間的30000毫秒後觸發process方法,在taskinfo裡面可以設置一些其他schler的屬性,比如運行次數,運行間隔等。

Ⅹ 兩台nginx伺服器如何實現web集群

可以使用Nginx ,Haproxy,LVS做負載。
前提是:需要一個外網IP,並且兩個WEB中的應用要同步,資料庫要同步,否則隨便訪問的結果不一樣。

此外你現有兩台數據是怎麼同步的。有內網IP?