Sun Java System Application Server 9.1 快速入门指南

第 5 章 设置高可用性故障转移

如果使用上一章中设置的配置,则服务器实例出现故障时用户将丢失会话状态。本部分(两个高级主题中的第二个)提供了用于安装高可用性数据库 (high-availability database, HADB)、创建高可用性群集以及测试 HTTP 会话持久性的步骤。

GlassFish v2 不提供 HADB。为了实现高可用性和故障转移,GlassFish 提供内存中复制功能。

Application Server 同时支持 HTTP 会话持久性和有状态会话 Bean 的持久性。本章中的过程包括使用内存中复制功能或 HADB 功能实现高可用性。

假定您在执行本章中的步骤之前已经执行了本快速入门指南前面部分中的步骤。这些步骤按照完成步骤的顺序来介绍。要使用 HADB 功能,需要运行一个具有企业配置文件的域。


注 –

完成此部分中的过程可能需要其他硬件资源。


本主题包含以下几个部分:

高可用性群集和 HADB

Sun Java System Application Server 中的高可用性群集将状态复制服务与先前创建的群集和负载平衡器集成在一起,以启用 HTTP 会话的故障转移。

HttpSession 对象和有状态会话 Bean 状态存储于 HADB(用于存储会话状态的高可用性数据库)中。这种可水平伸缩的状态管理服务可以独立于应用服务器层进行管理。它旨在通过使用负载平衡、故障转移和状态恢复等功能支持高达 99.999% 的服务和数据可用性。

Application Server 不承担状态管理职责,这有很大的优势。Application Server 实例在其生命周期内作为可伸缩和高性能的 JavaTM Platform, Enterprise Edition 5(Java EETM 5 平台)容器运行,并将状态复制委托给外部高可用性状态服务。由于采用这种松散耦合的体系结构,因此可以轻松地向群集中添加应用服务器实例或从群集中删除应用服务器实例。HADB 状态复制服务可以单独伸缩,以获得最佳的可用性和性能。如果应用服务器实例同时还执行复制任务,J2EE 应用程序的性能将会降低,并会受到较长的垃圾收集暂停的限制。

因为每个 HADB 节点均需要 512 MB 的内存,所以必须有 1 GB 内存才能在同一台计算机上运行两个 HADB 节点。如果内存不足,请在不同的计算机上设置每个节点。建议部署时不要只在一台主机上运行双节点数据库,因为这种配置不具有容错能力。

HADB 预安装步骤

此过程涉及最常见的预安装任务。有关其他预安装主题(包括安装 HADB 的先决条件、配置网络冗余以及文件系统支持)的信息,请参见《Sun Java System Application Server 9.1 高可用性管理指南》中的第 2  章 “安装和设置高可用性数据库”

本部分中建议的系统配置值足以运行多达六个 HADB 节点,但不考虑系统上也会使用共享内存的其他应用程序。

Procedure配置 HADB 系统

  1. 获取超级用户权限。

  2. 定义与共享内存和信号有关的变量

    • 对于 Solaris:

      1. /etc/system 文件中添加以下行(或者如果这些行已在文件中以注释的形式存在,请将其取消注释并确保其值如下):

        set shmsys:shminfo_shmmax=0x80000000

        set shmsys:shminfo_shmseg=36

        set semsys:seminfo_semmnu=600

        shminfo_shmmax 设置为系统的内存总数(在十六进制记数法中,所显示的值 0x80000000 表示 2 GB 内存)。

        如果已定义 seminfo_* 变量,请按所示容量增加这些变量。无须更改 seminfo_semmniseminfo_semmns 的默认值。自 Solaris 8 以后,变量 shminfo_shmeg 已废弃。

      2. 使用以下命令重新引导:

        sync; sync; reboot

    • 对于 Linux:

      1. /etc/sysctl.conf 文件中添加以下行(或者如果这些行已在文件中以注释的形式存在,请将其取消注释)。将其值设为计算机上的物理内存容量。请以十进制字节数指定该值。例如,对于具有 2 GB 物理内存的计算机:

        echo 2147483648 > /proc/sys/shmmax

        echo 2147483648 > /proc/sys/shmall

      2. 使用以下命令重新引导:

        sync; sync; reboot

    • 在 Windows 上:无需任何特殊的系统设置。

  3. 如果您在安装独立 Application Server 时使用的是现有的 JDK 软件,请检查 JDK 版本。

    HADB 要求 Sun JDK 1.4.1_03 或更高版本(有关 JDK 版本的最新信息,请参见《Sun Java System Application Server 9.1 发行说明》)。查看已安装的版本,并将 JAVA_HOME 环境变量设置为 JDK 的安装目录(如果尚未设置)。

  4. 如果需要,请在重新引导后重新启动域、Web Server 和节点代理。

    要重新启动域,请使用命令 asadmin start-domain domain1

    要重新启动 Web Server,请在 web_server_install_dir/https- hostname 中执行启动程序。

    要重新启动节点代理,请使用命令 asadmin start-node-agent hostname。用运行 Application Server 的主机的名称替换变量 hostname

安装 HADB

此部分提供了安装高可用性数据库 (HADB) 的步骤。


注 –

如果您计划在 Application Server 计算机上运行高可用性数据库,而且您在安装 Application Server 时安装了 HADB,请跳至启动 HADB


如果您的计算机具有 2 GB 内存和 1 至 2 个 CPU,则可以在装有 Application Server 系统的同一台计算机上安装 HADB 组件。如果不具备上述条件,则需要使用其他硬件。例如:

Procedure安装 HADB

  1. 运行 Application Server 或 Java Enterprise System 安装程序。

  2. 选择与安装 HADB 相对应的选项。

  3. 在您的主机上完成安装。

启动 HADB

此部分介绍了在大多数情况下,通过运行 ma-initd 脚本启动 HADB 管理代理。对于生产部署,将管理代理作为服务启动可以确保其可用性。有关更多信息,请参见《Sun Java System Application Server 9.1 高可用性管理指南》中的“启动 HADB 管理代理”

如果要启动在多台主机上都具有 HADB 节点的数据库,请在每台主机上均启动管理代理。

Procedure在 Solaris 或 Linux 上的 Java Enterprise System 安装中启动 HADB

  1. 转至 /etc/init.d 目录:

    cd /etc/init.d

  2. 运行以下命令启动代理:

    ./ma-initd start

Procedure在 Windows 上的 Java Enterprise System 安装中启动 HADB

默认情况下,HADB 会在 Sun Java System 配置完成和运行时启动。但是,如果您需要手动启动它,请执行以下步骤:

  1. 转至“开始”⇒“设置”⇒“控制面板”,然后双击“管理工具”。

  2. 双击“服务”快捷方式。

  3. 从“服务”列表中选择 "HADBMgmtAgent Service"。

  4. 从“操作”菜单中选择“启动”。

Procedure在 Solaris 或 Linux 上的独立安装中启动 HADB

  1. 转至 Application Server 安装中的 HADB bin 目录:install-dir /hadb/4/bin

  2. 运行以下命令启动代理:

    ./ma-initd start

Procedure在 Windows 上的独立安装中启动 HADB

  1. 在终端窗口中,转至 Application Server 安装中的 HADB bin 目录:install-dir\hadb\4. x\bin

    x 代表 HADB 的发行号。

  2. 运行以下命令启动代理:

    ma -i ma.cfg

配置高可用性群集和应用程序

对于 clusterjsp 应用程序而言,必须将 FirstCluster 群集配置为使用 HADB,而且必须启用高可用性,才能验证 HTTP 会话的持久性。使用 asadmin configure-ha-cluster 命令将现有的群集配置为高可用性群集。有关如何使用此命令的更多信息,请在 asadmin 命令提示符处键入 configure-ha-cluster --help,或者请参见 configure-ha-cluster(1) 手册页。

重新启动群集

必须重新启动群集的实例,才能使在上一部分中进行的更改生效。

Procedure重新启动群集

  1. 在管理控制台中,展开“群集”节点。

  2. 单击 FirstCluster

  3. 在右侧窗格中,单击“停止实例”。

  4. 当实例都停止后,单击“启动实例”。

验证 HTTP 会话故障转移

用来测试会话数据故障转移的步骤与检验负载平衡主题中所述的负载平衡测试步骤相似。不同的是前者在出现故障之后保存会话数据。故障转移对用户来说是透明的,因为样例应用程序配置为在出现故障后自动重试。

Procedure验证 HTTP 会话故障转移

  1. 要显示 clusterjsp 应用程序的首页,请在浏览器中键入以下 URL:

    http://localhost :web_server_port/clusterjsp

    用运行 Web Server 的系统的名称替换 localhost 变量。

    web_server_install_dir/https-hostname/config/server.xmlLS 元素的端口属性值替换 web_server_port 变量。对于此示例,使用端口 38000。

    此时将显示一个与您在验证应用程序部署中看到的页面相似的页面。

  2. 检查显示的会话和主机信息。例如:

    • Executed From Server: localhost

    • Server Port Number: 38000

    • Executed Server IP Address: 192.18.145.133

    • Session ID: 41880f618e4593e14fb5d0ac434b1

    • Session Created: Wed Feb 23 15:23:18 PST 2005

  3. 查看服务器访问日志文件以确定哪个应用服务器实例正在为应用程序服务。日志文件位于以下位置:

    • Solaris Java Enterprise System 安装:

      /var/opt/SUNWappserver/nodeagents/nodeagent_name /i1/logs/access/server_access_log

      /var/opt/SUNWappserver/nodeagents/nodeagent_name /i2/logs/access/server_access_log

    • Linux Java Enterprise System 安装:

      /var/opt/sun/appserver/nodeagents/ nodeagent_name/i1/logs/access/server_access_log

      /var/opt/sun/appserver/nodeagents/ nodeagent_name/i2/logs/access/server_access_log

    • Windows Java Enterprise System 安装:

      install-dir \nodeagents\nodeagent_name\i1\logs\access\server_access_log

      install-dir\nodeagents\nodeagent_name \i2\logs\access/server_access_log

    • 独立的 Application Server 安装:

      install-dir /nodeagents/nodeagent_name/i1/logs/access/server_access_log

      install-dir/nodeagents/nodeagent_name /i2/logs/access/server_access_log

  4. 停止正在为页面服务的 Application Server 实例。

    1. 在管理控制台的左侧窗格中,展开“群集”。

    2. 单击 FirstCluster

    3. 在右侧窗格中,单击“实例”选项卡。

    4. 单击处理请求的服务器实例旁边的复选框,然后单击“停止”按钮。

  5. 重新装入 clusterjsp 样例应用程序页面。

    会话 ID 和会话属性数据被保留。

  6. 查看另一个 Application Server 实例的访问日志,并注意该实例是否在处理请求。

    由于 HTTP 会话被持久地存储在 HADB 中,因此状态故障转移功能会正常执行。除了 HTTP 会话状态,Application Server 还可以在 HADB 中存储 EJB 的状态。

接下来的操作

祝贺您!您现在已经完成了 Application Server 的快速入门。

在此部分中,您安装、配置和启动了 HADB,而且还配置了群集和应用程序使其具有高可用性。有关 Application Server 的其他信息,请参见下一步操作