Ⅰ 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。那就说几句:
Application Request Route(ARR)需要先安装这个“Platform installer”,去微软官方下载就好。网页链接
安装之后,可以在iis里看到server farms。
对了,安装的时候要选组件,选三个就够用“Web Deploy V3.0”“Applicaiton Request Router 3 for IIS”“Url Rewriter 2”。分别是web部署、请求路由、地址重写。
右键点选server farms,点击Create Server Farms(创建集群),记得本机要用localhost,再加入其它三个节点就可以了(测试,可以用同路由里的其他地址)
我们进行Health Test(诊断)
通过Verify URL Test (验证URL测试),如果本机和其他两个节点都是pass,那就是成功了。
就能把资源分出去了,本机localhost只作为转发,不提供其他服务,所有资源存储,请求,传输都是其他你创建的几个节点建立的。
集群就创建并测试完毕了。
不过还是得说一句,如果不是特殊要求,而且也不是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?