上一个 目录 索引 下一个 |
Sun Java System Application Server 企业版 7 2004Q2 入门指南

> ## 第 2 章
> 群集方案

> 本章包括以下数节：

> - HTTP 群集方案
> - RMI/IIOP 群集方案

> ##

> HTTP 群集方案

> 下面的图表显示了一个简单的群集方案，该方案由一个带有负载平衡器插件的 Web 服务器、两个 Sun Java System Application Server 实例（配置为使用 HADB 来存储 HTTP 会话数据）和一个用于存储应用程序数据的远程数据库管理系统 (RDBMS) 组成。请注意，您的实际操作部署可以有所不同。例如，您可以使用第三方的负载平衡器代替负载平衡器插件。

> 图 2-1 群集方案实例

> 下面的步骤介绍了处理 HTTP 请求的过程：

> 1. 连接的客户机将一个 HTTP 请求发送到某个由 Web 服务器负责处理的 URL，该 Web 服务器已配置为使用负载平衡器插件处理传入的 HTTP 请求。
> 2. 负载平衡器插件随后将请求转发到群集中的 Sun Java System Application Server 实例之一。插件使用粘性 round-robin（共享）负载平衡来确定目标实例。
> 3. 目标实例接收到转发自负载平衡器插件的请求后，开始一个 HTTP 会话，将 HTTP 会话数据和 J2EE 应用程序数据分别存储到 HADB 和 RDBMS。当客户机继续通过应用程序运行时，将更新 HTTP 会话数据并将其存储到 HADB；同时，RDBMS 中的应用程序数据也会更新。
> 4. 如果由于系统崩溃而导致实例失败，负载平衡器将检测实例是否已经停止对请求的响应。后续请求到来时，负载平衡器会将这些请求转发到群集中运行正常的实例。
> 5. 新的目标实例将检索来自 HADB 的故障转移 HTTP 会话信息，然后继续响应客户机的请求，使客户机能够完成 HTTP 会话，而不会丢失会话数据。

> 有关 Sun Java System Application Server 部署方案的详细信息，请参见 Sun Java System Application Server System Deployment Guide。

> ##

> RMI/IIOP 群集方案

> Sun Java System Application Server 通过在 RMI/IIOP 路径上使用负载平衡和故障切换机制，提供了具有高可用性的 J2EE 应用程序。

> 要配置具有高可用性的 J2EE 应用程序，需要在 IIOP 群集中配置 Application Server 实例，且该 IIOP 群集应具有用于处理 RMI-IIOP 请求的 IIOP 侦听程序。这些 IIOP 侦听程序也称作 IIOP 端点，它们将成为 IIOP 群集的一部分。

> 以下两部分介绍了在 RMI/IIOP 路径上启用 J2EE 应用程序的负载平衡（客户端配置）和高可用性（服务器端配置）所需进行的配置。

> - 服务器端配置
> - 客户端配置

> ### 服务器端配置

> 要启用 IIOP 请求的故障切换，应当配置 IIOP 端点，以组成 Sun Java System Application Server 中的 IIOP 群集。IIOP 端点可以使用管理控制台或命令行界面来定义。

> 首先定义群集中所有非 SSL 端点，RMI/IIOP 请求可以故障转移到该群集。availability-service 元素下的 iiop-cluster 特性定义了 IIOP 端点。然后确保设置了 availability-enabled=true，以启用故障切换。

> 下面的示例显示了 server.xml 文件中的 IIOP 群集配置特性。

> <availability-service availability-enabled="true">

> <iiop-cluster>

> <iiop-server-instance name=server1>

> <iiop-endpoint id=s1_ep1 host=trident port=3700 />

> <iiop-endpoint id=s1_ep2 host=trident port=3800 />

> <iiop-endpoint id=s1_ep3 host=trident port=3900 />

> </iiop-server-instance>

> <iiop-server-instance name=server2>

> <iiop-endpoint id=s2_ep1 host=jupiter port=4700 </>

> <iiop-endpoint id=s2_ep2 host=jupiter port=4800 />

> <iiop-endpoint id=s2_ep3 host=jupiter port=4900 />

> </iiop-server-instance>

> </iiop-cluster>

> </availability-service>

> ### 客户端配置

> 要启用 RMI/IIOP 请求的负载平衡，需要配置客户机应用程序。系统支持以下两种类型的 RMI/IIOP 客户机的负载平衡：

> - 独立的客户机
> - ACC 客户机

> #### 独立的客户机

> 要在独立的客户机中启用负载平衡功能，必须在 JNDI 环境特性或系统特性中定义以下特性。

> - java.naming.factory.initial

> 将此特性设置为 com.sun.appserv.naming.S1ASCtxFactory。

> - com.sun.appserv.iiop.endpoints

> 指定 server.xml 中定义的 IIOP 端点列表。

> - com.sun.appserv.iiop.loadbalancingpolicy

> 如果已指定端点，那么可使用此特性指定负载平衡的策略。用于定义此特性的值基于 JNDI InitialContext。

> 当 RMI/IIOP 客户机调用远程对象上的 InitialContext 查找时，将随机选择一个 Application Server 实例（该实例是 IIOP 群集的一部分）以创建 Bean。该 InitialContext 的所有后续操作都将被指定或固定到同一个 Application Server 实例。

> 要在 RMI/IIOP 客户机中实现负载平衡功能，请执行以下步骤：

> 1. 设置以下 JVM 特性以配置 ORB。

> com.sun.CORBA.connection.ORBSocketFactoryClass=com.sun.enterprise.iiop.EEIIOPSocketFactory
> org.omg.PortableInterceptor.ORBInitializerClass.com.sun.enterprise.iiop.EEORBInitializer

> 2. 将类路径设置为 appserv-rt.jar 和 appserv-rt-ee.jar。这些 jar 文件位于 install_dir/lib 目录中。
> 3. 在实例化 InitialContext 之前，使用 S1ASCtxFactory 类的以下特性：

> Properties env = new Properties();

> env.put(“java.naming.factory.initial”, “com.sun.appserv.naming.S1ASCtxFactory”);

> env.put(“com.sun.appserv.iiop.endpoints”.“trident:3600, exodus:3700”);

> env.put(“com.sun.iiop.loadbalancingpolicy”, “ic-based”);

> //create an initial naming context
> Context initial = new InitialContext(env);

> 此客户机代码通过调用新的 InitialContext(env)（其中的 env 是 JNDI SPI 特性的列表），对 JNDI InitialContext 对象进行了实例化。

> #### ACC 客户机

> 要在 ACC 客户机中启用负载平衡和故障切换功能，必须在 sun-acc.xml 中定义以下特性。

> - com.sun.appserv.iiop.endpoints
> - com.sun.appserv.iiop.loadbalancingpolicy

> 在 sun-acc.xml 文件中定义负载平衡特性，以启用具有高可用性的 ACC 客户机。这些特性在 sun-acc.xml 文件中被定义为特性元素。

> 例如：

> <client-container>

> <target-server name="qasol-e1" address="qasol-e1" port="3700">

> <property name="com.sun.appserv.iiop.loadbalancingpolicy" value="ic-based" />

> <property name="com.sun.appserv.iiop.endpoints" value="qasol-e1:3700,jupiter:3800"/>

> </client-container>

> 上一个 目录 索引 下一个

> 版权所有 2004 Sun Microsystems, Inc. 保留所有权利。