Oracle RAC (Real Application Cluster,真正应用集群) 由多台Oracle数据库服务器组成,保证了单一节点宕机后失败切换,另一方面,Oracle RAC可进行并行计算和负载均衡,与单一数据库节点相比,性能更加稳定。WebSphere Process Server提供了对Oracle RAC的配置支持,用来保证大数据量处理和系统的实时可靠性。
本文介绍使用Oracle RAC的失败切换功能来介绍WebSphere Process Server对(以下简称WPS)高可用性的支持。在实现此测试过程中,笔者将数据库服务器上的一个节点置为不可用的情景来触发Oracle实施失败切换(failover)功能,与此同时,事件不停息地产生并持续流经到WPS中进行正常处理。笔者使用CitiApp场景来完成这个事件发送过程。为方便起见,本文以Websphere Process Server 6.2 Stand-alone单机架构为例,详细阐述配置步骤及场景测试验证。在网络部署架构(Network Deployment)中,配置过程是类似的。
在本文中,笔者使用两台Linux机器作为Oracle节点,一台共享磁盘阵列来存放Oracle数据文件和日志文件。拓扑图如下所示:
图1:Oracle RAC拓扑结构
在使用多节点的Oracle RAC拓扑结构之前,首先要确保单一节点的Oracle数据库在WPS中正确配置,即本文第二部分所述的单点配置,在此基础上,才能继续进行针对WPS的Oracle RAC即集群配置。
Oracle RAC的单节点配置
配置基于Oracle数据库的WPS通用配置过程包括以下几个部分。
1. 拷贝驱动文件
将Oracle驱动文件(classes12.zip)从Oracle DB服务器拷贝到WPS服务器。
2. 建立Oracle用户
在Oracle中建立多个Oracle用户,以用于WPS的不同用途。在此说明,针对Oracle数据库的内部原理,每个实例(instance)拥有一套独立的系统资源,建立多个实例将消耗巨大的系统资源(CPU,内存,硬盘空间等)。而在一个实例中创建多个用户(或模式,Schema)则可共享一个实例的资源,但实例的配置参数是共享的。读者可以选择创建多个实例以区分不同的实例参数来达到特定的性能要求,或根据本文的推荐,在同一实例中建立不同的模式以示区分。
本文使用的模式/用户名 | WPS中使用的默认名称 | 说明 |
WPCDB | 实例ID的前3个字母+COMM | WPS主要配置用户 |
CEIDB | 实例ID的前3个字母+CEID | 用来配置公共事件基础结构(CEI) |
SCASYSMSG | 实例ID的前3个字母+SS00 | 用来配置服务组件架构(SCA)中系统总线(System Bus)消息引擎(Messaging Engine,ME)的数据存储 |
SCAAPPMSG | 实例ID的前3个字母+SA00 | 用来配置SCA中应用总线(Application Bus)上ME的数据存储 |
CEIMSG | 实例ID的前3个字母+CM00 | 用来配置CEI上ME中的数据存储 |
BPCMSG | 实例ID的前3个字母+BM00 | 用于配置业务流程编排器(Business Process Choreographer, BPC)总线上的数据存储 |
BPCDB | 实例ID的前3个字母+BE00 | 用于业务流程编排器容器(BPC container)的配置 |
BPCOBS 说明:此用户只限于对安装了业务流程编排器浏览器有效 |
实例ID的前3个字母+BC00 | 用于业务流程编排器浏览器(BPC explorer)的配置 |
在Oracle中创建了以上用户后,我们需要在Oracle中将以上用户授予相应权限。以下为授予WPCDB用户的例子,读者需重复此步骤直至以上所有用户均授予了权限。
grant connect, resource, unlimited tablespace to WPCDB;
grant execute on dbms_system to WPCDB;
grant javauserpriv to WPCDB;
3. 安装WPS产品
本文略去安装WPS产品的过程,在过程中注意选择“延迟创建概要文件”。
4. 创建概要文件
在安装产品之后,需要手工创建概要文件。本文推荐使用manageprofiles.bat/manageprofiles.sh命令来手工创建概要文件,而非Profile Management Tool (PMT)。原因是因为,基于oracle的概要文件,在PMT工具中只能使用WPS默认用户名(见表1中的第2列),而不能使用自定义的用户名称,这将使得手工创建的Oracle用户没有用武之地。以下是基于Oracle的manageprofiles命令的一个范例:
manageprofiles.bat -create -templatePath D:\IBM\WPS62GM\profileTemplates\default.wbiserver -profileName oraProfile -enableSecurity false -configureBPC false -dbType ORACLE10G-dbName RAS -ceiDbName RAS -dbDelayConfig true -dbCommonForME true -dbDriverType oracle_thin -dbJDBCClasspath D:\ora_driver -dbServerPort 1521 -configureBSpace false -configureBRM false -dbHostName 9.125.70.176 -winserviceCheck false -dbCommonUserId WPCDB -dbCommonPassword passw0rd -dbCeiUserId CEIDB -dbCeiPassword passw0rd -dbSysMeUserId SCASYSMSG -dbSysMePassword passw0rd -dbAppMeUserId SCAAPPMSG -dbAppMePassword passw0rd -dbCeiMeUserId CEIMSG -dbCeiMePassword passw0rd -dbBPCMeUserId BPCMSG -dbBPCMePassword passw0rd
参数说明:
-dbType: ORACLE10G用来标识使用的是Oracle10g版本数据库
-dbName: Oracle数据库的实例名称
-ceiDBName:同-dbName
-dbDriverType:使用oracle_thin方式的驱动程序
-dbJDBCClasspath: WPS机器上classes12.zip驱动程序的路径
-dbHostName: Oracle数据库主机名/IP地址
-dbCommonUserId:使用已创建的WPCDB用户,用于WPS通用数据库(Common DB)
-dbCeiUserId:使用已创建的CEIDB用户,用于公共事件基础结构(CEI)
-dbSysMeUserId:使用已创建的SCASYSMSG用户,用于服务组件架构(SCA)系统总线上的消息引擎
-dbAppMeUserId:使用已创建的SCAAPPMSG用户,用于服务组件架构上应用总线上的消息引擎
-dbCeiMeUserId:使用已创建的CEIMSG用户,用于公共事件基础结构总线上的消息引擎
-dbBPCMeUserId:使用你哦个已创建的BPCMSG用户,用于业务流程编排器总线上的消息引擎
5. 配置公共数据库
将公共数据库配置脚本目录从WPS机器的<Profile_Home>\dbscripts\CommonDB\Oracle\<DB_Name>上拷贝到Oracle服务器上。注意,将从Windows上生成的shell脚本拷贝到Linux/Unix上时,有可能需要执行dos2unix命令以避免文件格式不识别问题。在Oracle服务器上执行此脚本并确保执行成功。
6. 配置总线
更改每个总线上的数据源信息,以使用正确的模式名称和认证别名。
· 对于CEI总线:
图2:CEI总线配置
确保使用模式名:CEIMSG,认证别名:CEIME_<node_name>.server1_Auth_Alias
· 对于BPC总线:
图3:业务流程编排器总线配置
确保使用模式名:BPCMSG,认证别名:BPCME_<数字>_Auth_Alias
· 对于SCA Application总线:
图4:SCA应用总线配置
确保使用模式名:SCAAPPMSG,认证别名:SCAAPPME<数字>_Auth_Alias
· 对于SCA System总线:
图5:SCA系统总线配置
确保使用模式名:SCASYSMSG,认证别名:SCASYSME<数字>_Auth_Alias
7. 配置CEI
将生成的CEI配置脚本从WPS机器<Profile_Home>\dbscripts\CEI_<DBName>目录拷贝到Oracle数据库某处。,有可能需要执行dos2unix命令已避免文件格式不识别问题。
执行命令:
cr_event_oracle.sh CEI_DB_User_Password sys <sys_password> sid=<sid> racleHome=<Oracle_HOME>
参数说明:
CEI_DB_User_Password:CEIDB用户的密码
SYSUSER:使用sys用户
SYSUSERPWD:sys用户的密码
Sid=<sid>:Oracle数据库实例名
8. 配置BPC container
按照如下步骤配置BPC container:
· 数据源:
模式名:BPCDB
用户名:BPCDB
服务器:oracle服务器IP地址
驱动提供:Oracle10g或11g
图6:BPC container的数据源配置
· 人工任务管理器邮件配置:
取消enable e-mail service选项
图7:人工任务管理器邮件配置
· 安全:
本文中没有使用到安全设置,将其保留为空。若配置了安全,将信息填入。
· 状态观察器
勾选CEI logging for Business Flow Manager
图8:状态观察器
· SCA绑定:
保留为空
· 总线:
模式名:BPCMSG
用户名:BPCMSG
服务器:oracle服务器IP地址
提供者:Oracle10g或11g
图9:业务流程编排器容器的总线配置
点击完成并保存更改。
9. 配置BPC Event Collector
· 数据源:
模式名:BPCOBS
用户名:BPCOBS
· 观察对象
选择server1,若是网络部署(Network Deployment)环境,选择相应的集群名称。
图10:事件收集者
点击OK完成,保存更改。
10. 配置BPC explorer
添加一个新的BPC explorer,勾选“开启报告功能”
图11:BPC explorer
点击OK完成,保存更改
11. 验证数据源连接
在重启环境前,我们需保证所有的数据源连通正常,如果连通不正常,需修复错误,直至所有连接测试通过。
重启WPS server,检查SystemOut.log文件,确保没有任何异常信息。至此,单机版的Oracle数据库配置结束。
RAC RAC的集群配置
为了支持Oracle RAC环境,WPS在数据源的JDBC URL中引入了多重地址列表功能,使得URL地址如下所示:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=9.125.70.176)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=9.125.70.177)(PORT=1521))(FAILOVER=on)(LOAD_BALANCE=on))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=RAS)))
图12:Oracle RAC数据源URL
替换HOST和SERVICE_NAME属性值以满足实际环境。建议读者拷贝以上字符串以避免输入错误。更改每一个数据源的URL信息,保存设置并保证重新测试仍然可以成功。
测试用例场景CitiApp简介
CitiApp基于“快速开发,易于更改”为原则,以Web客户端,SCA模块和BPEL流程组合而成,用户通过登陆JSP页面输入需要处理的数据量,SCA模块随机生成对应的数据,在BPEL流程中对业务对象进行简单处理(如,赋值,更改属性等)再通过JDBC适配器将处理后的业务对象以记录的形式插入应用数据库中。由于该流程简单,部署方便,在用户指定事件数连续不断发送业务请求,适用于进行测试集群环境下的负载均衡和失败切换功能。
CitiApp主要由以下三部分构成:
Web模块: RecoverDriverUI
用户登陆http://<localhost:9080>/RecoveryDriverUI/Driver.jsp输入所需处
理的数据量
SCA模块:AccountRouting
在POJO中通过随机方法生成业务对象(Business Object)并为每个Business Object创建处理实例,通过异步调用进入Account Creation流程。
图13:AccountRouting
BPEL长流程模块
在BPEL长流程中对业务对象进行简单处理,并通过JDBC适配器插入应用数据库中。
配置CitiApp场景
具体如何配置CitiApp场景的过程超出了本文介绍的范畴。总的来说,包括如下步骤:
1) 在Oracle中创建用户rcovflda,并赋予权限
2) 部署应用
3) 配置数据源
4) 创建认证别名和数据源
5) 更改连接工厂属性
6) 更改数据源的RAC字符串格式
测试流程
1. 验证正常情况下的流程
打开citiApp应用的主页:http://<host>:<port>/RecoveryDriverUI/Driver.jsp
图16:CitiApp主页
更改BPEL process/Web service Endpoint URL为实际环境,点击运行。在Oracle中检查用户rcovflda的Account表,若有一条记录,并且WPS SystemOut.log中无错误信息,则表明流程成功。
2. 测试Oracle RAC
为了测试WPS失败切换功能,本文模拟在数据库进行持久的读写操作时将一个节点置为不可用状态。为此,笔者在页面模拟发送大量的事件(大于1000条),同时关闭第二个RAC节点上的数据库(在sys用户下使用shutdown immediate命令)。如果数据库中应用表中的记录仍然在持续增加,而没有受到数据库关闭的影响,由此可以得出结论:数据源中的多重地址列表已经生效,即其中一个节点状态为不可用时,另一个节点仍然可以接管过来进行写入操作,客户的业务流程没有受到影响。
结论
实际测试结果也说明了这一点。当发送完所有事件后,在数据库的应用表中可以看到记录数目等于发送的事件数目,没有事件丢失。这给客户带来的商业价值就在于,以很小的变更(替换多重地址列表的JDBC URL)实现了对数据库容错的支持。只要Oracle RAC配置正确,在WPS这端可充分利用Oracle RAC功能来实现对客户业务流程的高可用性支持。至此,我们可以认为,基于Oracle RAC架构的WPS成功实现了失败切换功能。