Sun Java System Application Server 9.1 高可用性管理指南

第 5 章 配置 HTTP 负载平衡

本章介绍了 HTTP 负载平衡器插件。其中包括以下主题:

有关其他类型负载平衡的信息,请参见第 10 章,Java 消息服务的负载平衡和故障转移第 11 章,RMI-IIOP 负载平衡和故障转移

本节讨论如何使用 Application Server 随带的 HTTP 负载平衡插件。另一个 HTTP 负载平衡选项是将 Sun Secure Application Switch 和 Application Server 一起使用,以作为基于硬件的负载平衡解决方案。有关配置此解决方案的教程,请参见文章Clustering and Securing Web Applications: A Tutorial

负载平衡器插件的新增功能

在 Sun Java System Application Server 9.1 中,增强了负载平衡器的功能,可通过以下特性提供更大的灵活性和更高的易用性。

自动应用

Application Server 允许将从管理控制台对负载平衡器配置进行的更改通过线路自动发送到 Web Server 配置目录。在 Application Server 的以前版本中,必须导出负载平衡器配置 ,然后将其复制到 Web 服务器配置目录。

加权 Round Robin

负载平衡器启用了改进的 HTTP 请求分发。管理员可以使用名为 "weight" 的属性,指定如何将请求成比例地路由到实例。例如,假定某个群集具有两个实例,管理员为实例 x 指定的权重为 100,为实例 y 指定的权重为 400。现在,对于每 100 个请求,20 个将转到实例 x,80 个将转到实例 y。

用户定义的负载平衡

通过 Application Server,管理员可以定义用于分发 HTTP 请求的自定义策略。自定义策略定义负载平衡器插件必须使用的负载平衡算法。换句话说,管理员可以定义哪个 Application Server 实例将处理 HTTP 请求。要使用此功能,管理员需要开发共享库。例如,开发的共享库可以用于评估提供给它的传入请求头,并遵照某些条件选择可以处理请求的实例。此共享库将由负载平衡器装入。

共享库必须实现一个接口,如 loadbalancer.h(可在 appserver_install_dir/lib/install/templates 下找到)中所定义。

Application Server 还捆绑了一个实现基本 round robin 算法的样例模块 roundrobin.c。管理员可以使用此样例模块作为模板来生成共享库。此样例模块也可在 appserver_install_dir/lib/install/templates 下找到。

Procedure配置用户定义的负载平衡

  1. roundrobin.cappserver_install_dir/lib/install/templates 复制到工作目录(例如:/home/user/workspacelb)。

  2. 使用 ANSI C/C++ 编译器(例如 Sun Studio 编译器或 GCC)编译 roundrobin.c。务必生成动态共享库,而不是生成静态可执行文件。

    1. 如果使用的是 Sun Studio CC 编译器,请通过以下命令进行编译:

      cc -G -I<appserver install dir>/lib/install/templates roundrobin.c -o roundrobin.so
    2. 如果使用的是 GCC,请通过以下命令编译共享库:

      gcc -shared -I<appserver install dir>/lib/install/templates 
      roundrobin.c -o roundrobin.so

      注 –

      如果遇到重定位错误,请使用选项 "-fPIC" 重新编译。命令将与如下所示类似:

      gcc -shared -fPIC -I <appserver install dir>/lib/install/templates 
      roundrobin.c -o roundrobin.so

      在 Microsoft Windows 上,从 http://www.redhat.com/services/custom/cygwin 下载 Cygwin 实用程序。此实用程序已将 GCC 与自身捆绑在一起。使用以下 GCC 命令创建动态链接库 (dynamic link library, dll):

      gcc -shared -I<appserver_install_dir>/lib/install/templates 
      roundrobin.c -o roundrobin.dll
  3. loadbalancer.xml 更改为指向新生成的模块。loadbalancer.xml 在编辑后将如下所示。

    <cluster name="cluster1" policy="user-defined" 
    policy-module="home/user/workspacelb/roundrobin.so">
  4. roundrobin.so 复制到 Web 服务器实例目录。

  5. 启动 Web 服务器(如果它未运行),或者等待,直到重新配置了负载平衡器。

HTTP 负载平衡器如何工作

负载平衡器尝试在多个 Application Server 实例(独立或群集)之间平均分配工作量,从而提高系统的整体吞吐量。

HTTP 负载平衡器对 Java EE 应用服务器上部署的服务启用高可用性。在这样做时,如果检测到原始的处理实例因不可用或异常而无法处理请求,它会将会话请求故障转移到其他服务器实例。为了使 HTTP 会话信息能够保留下来,您必须使用群集配置文件,已安装和设置 HADB,并已配置 HTTP 会话持久性。有关更多信息,请参见第 9 章,配置高可用性会话持久性和故障转移


注 –

负载平衡器不能处理大于 8k 的 URI/URL。


HTTP 负载平衡算法

默认情况下,Sun Java System Application Server 负载平衡器使用粘性 round robin 算法对收到的 HTTP 和 HTTPS 请求进行负载平衡。

新的 HTTP 请求发送到负载平衡器插件时,系统将基于简单的 round robin 方案将该请求转发到某个应用服务器实例。如果请求用于基于会话的应用程序,则这还包括对新会话的请求。来自同一客户机的对同一基于会话的应用程序的后续请求被认为是已分配的请求或粘性请求,并由负载平衡器路由到同一实例。粘性 round robin 由此得名。对非基于会话的应用程序的请求和对基于会话的应用程序的第一个请求称为未分配的请求。粘性是通过使用 Cookie 或显式 URL 重写实现的。负载平衡器会自动确定粘性方法。

负载平衡器插件使用以下方法来确定会话粘性:

从粘性信息中,负载平衡器插件将首先确定请求先前被转发到的实例。如果发现该实例工作正常,负载平衡器插件会将请求转发至该特定应用程序服务器实例。因此,给定会话的所有请求都将被发送到同一个应用程序服务器实例。

设置 HTTP 负载平衡

本节介绍了如何设置负载平衡器插件,并且包含以下各节:

设置负载平衡的先决条件

配置负载平衡器之前,您必须执行以下操作:


注 –

如果具有在不同网络域上安装 Application Server 实例和负载平衡器的部署方案,必须通过使用选项 --agentproperties 指定全限定域名来创建节点代理。例如,asadmin create-node-agent --agentproperties remoteclientaddress=machine1.server.example.com test-na。有关此命令的更多信息,请参见 create-node-agent(1)


设置负载平衡的步骤

使用管理控制台 GUI 或 asadmin 工具在您的环境中配置负载平衡。以下各节为您提供更多信息。

Procedure使用管理控制台设置负载平衡

  1. 创建负载平衡器配置。

    在管理控制台的左框架上,单击“HTTP 负载平衡器”,然后单击“新建”。在“新建 HTTP 负载平衡器”页面中,提供设备详细信息,并选择目标群集或实例。

  2. 添加对群集或独立服务器实例的引用,以供负载平衡器进行管理。

    要使用管理控制台执行此操作,请在左框架上,单击“HTTP 负载平衡器”节点,然后单击该节点下列出的所需负载平衡器。打开“目标”选项卡,单击“管理目标”,然后在“管理目标”页面中选择所需的目标。

    如果您创建了具有目标的负载平衡器配置,并且该目标是负载平衡器引用的唯一群集或独立服务器实例,则请跳过此步骤。

  3. 启用负载平衡器所引用的群集或独立服务器实例。

    要使用管理控制台启用独立服务器实例,请在左框架上,单击“HTTP 负载平衡器”节点,然后单击该节点下列出的所需负载平衡器。打开“目标”选项卡,在“目标”表中单击要启用的实例旁边的复选框,然后单击“启用”。

    要启用群集中的服务器实例,请选择负载平衡器(如上所述),然后在“目标”选项卡中单击所需的群集。现在,打开“实例”选项卡,选择所需的实例,然后从“负载平衡器操作”下拉列表中选择“启用负载平衡”。

    启用群集或独立实例的等效命令是 asadmin enable-http-lb-server

  4. 启用用于负载平衡的应用程序。

    要使用管理控制台执行此操作,请打开“目标”选项卡(如上所述),然后单击所需的群集。现在,打开“应用程序”选项卡,选择所需的应用程序,然后从“更多操作”下拉列表中选择“负载平衡器启用”。

    这些应用程序必须已部署到负载平衡器所引用的群集或独立实例上,并且已启用,可以在群集或独立实例上使用。启用应用程序以用于负载平衡与启用以使用这些应用程序是两个独立的步骤。

  5. 创建运行状况检查器。

    要使用管理控制台执行此操作,请打开负载平衡器的“目标”选项卡(如上一步所述),然后在“目标”表中单击“编辑运行状况检查器”。

    运行状况检查器监视工作异常的服务器实例,以便在这些服务器实例重新正常工作时,负载平衡器可以向它们发送新请求。


    注 –

    如果使用的是 Sun Java System Web Server(6.1 或 7.0),则可以在单个步骤中生成负载平衡器配置文件并通过线路将数据发送到 Web Server,而不是执行步骤 6 和 7。

    要使用管理控制台执行此操作,请单击所需的负载平衡器,然后打开“导出”选项卡。在此选项卡中,单击“立即应用更改”。这会将数据发送到 Web Server 配置目录。


  6. 生成负载平衡器配置文件。

    要使用管理控制台执行此操作,请单击负载平衡器,然后打开“导出”选项卡。在此选项卡中,单击“立即导出”。

    此命令将生成一个配置文件,该配置文件要与 Sun Java System Application Server 附带的负载平衡器插件一起使用。

  7. 将负载平衡器配置文件复制到 Web Server 的 config 目录中,此目录用于存储负载平衡器插件的配置文件。


    注 –

    要在单个步骤中自动生成负载平衡器配置文件并通过线路将数据发送到 Web Server,需要为 SSL 设置配置 Web 服务器并导入 DAS 证书。有关配置 Sun Java System Web Server 的信息,请参见配置 Sun Java System Web Server


Procedure使用 asadmin 工具设置负载平衡

  1. 创建负载平衡器配置。

    为此,请使用命令 asadmin create-http-lb-config


    注 –

    可以使用单个 asadmin 命令 create-http-lb 及其选项执行所有后续步骤(步骤 2 到步骤 7)。有关此命令的更多信息,请参见 create-http-lb(1)


  2. 添加对群集或独立服务器实例的引用,以供负载平衡器进行管理。

    为此,请使用命令 asadmin create-http-lb-ref。有关此命令的更多信息,请参见 create-http-lb-ref(1)

    如果您创建了具有目标的负载平衡器配置,并且该目标是负载平衡器引用的唯一群集或独立服务器实例,则请跳过此步骤。

  3. 启用负载平衡器所引用的群集或独立服务器实例。

    为此,请使用命令 asadmin enable-http-lb-server。有关此命令的更多信息,请参见 enable-http-lb-server(1)

  4. 启用用于负载平衡的应用程序。

    为此,请使用命令 asadmin enable-http-lb-application。有关此命令的更多信息,请参见 enable-http-lb-application(1)

    这些应用程序必须已部署到负载平衡器所引用的群集或独立实例上,并且已启用,可以在群集或独立实例上使用。启用应用程序以用于负载平衡与启用以使用这些应用程序是两个独立的步骤。

  5. 创建运行状况检查器。

    为此,请使用命令 asadmin create-http-health-checker。有关此命令的更多信息,请参见 create-http-health-checker(1)

    运行状况检查器监视工作异常的服务器实例,以便在这些服务器实例重新正常工作时,负载平衡器可以向它们发送新请求。


    注 –

    如果使用 Sun Java System Web Server(6.1 或 7.0),而不是执行步骤 6 和 7,可以在单个步骤中生成负载平衡器配置文件并通过线路将数据发送到 Web Server。

    要使用 asadmin 工具执行此操作,请将 create-http-lb 命令的 --autoapplyenabled 选项设置为 true。有关此命令的更多信息,请参见 create-http-lb(1)


  6. 生成负载平衡器配置文件。

    为此,请使用命令 asadmin export-http-lb-config。有关此命令的更多信息,请参见 export-http-lb-config(1)。此命令将生成一个配置文件,该配置文件要与 Sun Java System Application Server 附带的负载平衡器插件一起使用。

  7. 将负载平衡器配置文件复制到 Web Server 的 config 目录中,此目录用于存储负载平衡器插件的配置文件。


    注 –

    要在单个步骤中自动生成负载平衡器配置文件并通过线路将数据发送到 Web Server,需要为 SSL 设置配置 Web 服务器并导入 DAS 证书。有关配置 Sun Java System Web Server 的信息,请参见配置 Sun Java System Web Server


HTTP 负载平衡器部署

根据您的目的和环境,可以使用不同方法配置负载平衡器,如以下各节所述:

使用群集服务器实例

部署负载平衡器最常用的方法是使用服务器实例的一个或多个群集。默认情况下,群集中的所有实例都具有相同的配置,并被部署了相同的应用程序。负载平衡器在服务器实例之间分配工作量并将请求从异常实例故障转移到正常实例。如果您已配置了 HTTP 会话持久性,则对请求进行故障转移时,会话信息将保留。

如果具有多个群集,可以跨群集对请求进行负载平衡,但是仅在单个群集中的实例之间进行故障转移。在一个负载平衡器中使用多个群集可以轻易启用应用程序的滚动升级。有关更多信息,请参见升级应用程序而不使可用性受到损失


注 –

不能跨群集和独立实例对请求进行负载平衡。


使用多个独立实例

您还可以将负载平衡器配置为使用多个独立实例,并在这些实例之间对请求进行负载平衡和故障转移。但是,在此配置中,您必须手动确保独立实例具有同构环境和部署到其上的相同的应用程序。由于群集自动维护同构环境,因此对于大多数情况,使用群集更好、更容易。

配置负载平衡器

负载平衡器配置在 domain.xml 文件中维护。配置负载平衡器是极其灵活的:

以下各节更详细地介绍如何创建、修改和使用负载平衡器配置:

在 DAS 上配置 HTTP 负载平衡器

在 Application Server 9.1 中,可以使用管理控制台或 asadmin 命令 create-http-lb 在 DAS 上创建负载平衡器配置。以下步骤介绍了如何执行该操作。如果需要有关 asadmin 命令 create-http-lbdelete-http-lblist-http-lbs 的更多信息,请参见《Sun Java System Application Server 9.1 Reference Manual》

在管理控制台中,向下滚动左框架,单击“HTTP 负载平衡器”节点,然后在右侧的“HTTP 负载平衡器”页面中单击“新建”。在“新建 HTTP 负载平衡器”页面中,提供托管负载平衡器的计算机的以下详细信息。

字段 

说明 

名称 

负载平衡器配置的名称。 

已启用 

单击“已启用”复选框将负载平衡器配置更改自动推送到驻留在 Web 服务器配置目录中的物理负载平衡器。 

主机 

安装了 Web 服务器实例的服务器。 

管理端口 

Web 服务器实例使用的管理端口号。 

代理主机 

安装了代理服务器实例的服务器。 

代理端口 

代理服务器使用的端口号。 

也可以使用 asadmin 命令 create-http-lb-config 创建负载平衡器配置。表 5–1 介绍了各个参数。有关命令 create-http-lb-config delete-http-lb-configlist-http-lb-configs 的更多信息,请参见《Sun Java System Application Server 9.1 Reference Manual》

表 5–1 负载平衡器配置参数

参数 

说明 

response timeout 

服务器实例必须返回响应的时间(以秒为单位)。如果在该时间段内未收到任何响应,则服务器将被视为处于异常状态。默认值为 60。

HTTPS routing 

对负载平衡器的 HTTPS 请求是否会导致对服务器实例的 HTTPS 或 HTTP 请求。有关更多信息,请参见配置 HTTPS 路由选择

reload interval 

检查负载平衡器配置文件 loadbalancer.xml 的更改的时间间隔。当检查检测到更改时,系统将重新装入配置文件。0 值禁用重新装入。有关更多信息,请参见启用动态重新配置

monitor 

是否为负载平衡器启用监视功能。 

routecookie 

负载平衡器插件用于记录路由信息的 Cookie 的名称。HTTP 客户机必须支持 Cookie。如果您的浏览器设置为在存储 Cookie 之前进行询问,则 Cookie 的名称为 JROUTE。

target 

负载平衡器配置的目标。指定目标的效果与向该目标添加引用的效果相同。目标可以是群集,也可以是独立实例。

创建 HTTP 负载平衡器引用

当您在负载平衡器中创建对独立服务器或群集的引用时,此服务器或群集将被添加到负载平衡器控制的目标服务器和群集的列表中。所引用的服务器或群集仍需要被启用,然后才能对向其发出的请求进行负载平衡。如果创建了带有目标的负载平衡器配置,则系统已将该目标添加为引用。

要使用管理控制台创建引用,请在左框架上,单击“HTTP 负载平衡器”节点,然后单击该节点下列出的所需负载平衡器。打开“目标”选项卡,单击“管理目标”,然后在“管理目标”页面中选择所需的目标。也可以使用 create-http-lb-ref 创建引用。您必须提供负载平衡器配置名称和目标服务器实例或群集。

要删除引用,请使用 delete-http-lb-ref。要删除某个引用前,必须先使用 disable-http-lb-server 禁用所引用的服务器或群集。

有关这些命令的更多信息,请参见《Sun Java System Application Server 9.1 Reference Manual》

启用用于负载平衡的服务器实例

创建对服务器实例或群集的引用后,请使用 enable-http-lb-server 来启用服务器实例或群集。如果在创建负载平衡器配置时使用了某个服务器实例或群集作为目标,则必须启用该服务器实例或群集。要使用管理控制台执行此操作,请在左框架上,单击“HTTP 负载平衡器”节点,然后单击该节点下列出的所需负载平衡器。现在,打开“目标”选项卡,在“目标”表中单击要启用的实例旁边的复选框,然后单击“启用”。

有关此命令的更多信息,请参见 enable-http-lb-server(1)

启用用于负载平衡的应用程序

由负载平衡器管理的所有服务器都必须具有同构配置,包括部署到这些服务器的相同的应用程序集。部署和启用某个应用程序以便进行访问(在部署期间或部署之后发生)后,您必须启用该应用程序以进行负载平衡。如果没有为负载平衡启用应用程序,则即使已对该应用程序所部署到的服务器的请求执行了负载平衡和故障转移,也不会对该应用程序的请求执行负载平衡和故障转移。

启用应用程序时,请指定应用程序名称和目标。如果负载平衡器管理了多个目标(例如,两个群集),请在所有目标上启用该应用程序。

要使用管理控制台启用应用程序,请在左框架上,单击“HTTP 负载平衡器”节点,然后单击该节点下列出的所需负载平衡器。打开“目标”选项卡(如上所述),然后单击所需的群集。现在,打开“应用程序”选项卡,选择所需的应用程序,然后从“更多操作”下拉列表中选择“负载平衡器启用”。如果要从命令行执行此操作,可以使用命令 asadmin enable-http-lb-application。有关更多信息,请参见 enable-http-lb-application(1)

如果部署了新的应用程序,则还必须启用该应用程序以进行负载平衡并再次导出负载平衡器配置。

创建 HTTP 运行状况检查器

负载平衡器的运行状况检查器将定期检查被标记为异常的所有已配置的 Application Server 实例。运行状况检查器不是必需的,但如果没有运行状况检查器,或者禁用了运行状况检查器,则不会执行异常实例的定期运行状况检查。负载平衡器不能确定异常实例变为正常的时间。

负载平衡器的运行状况检查机制使用 HTTP 与应用程序服务器实例进行通信。运行状况检查器将 HTTP 请求发送给指定的 URL 并等待响应。HTTP 响应标题中的状态码在 100 到 500 之间时表示实例处于正常状态。


注 –

如果在您的部署方案中负载平衡器是一个群集的前端,该群集具有使用启用了客户机证书验证的受保护端口的实例,则运行状况检查器将无法执行实例的运行状况检查。因此,那些实例将始终被标记为异常,且不会向它们发送请求。


创建运行状况检查器

要指定运行状况检查器属性,可以使用管理控制台或 asadmin create-http-health-checker 命令。要在管理控制台中执行此操作,请导航到“HTTP 负载平衡器”节点,展开它并选择负载平衡器。然后,打开“目标”选项卡,在“目标”表中,单击所需目标的“编辑运行状况检查器”链接。指定下列参数。

表 5–2 运行状况检查器参数

参数 

说明 

默认值 

Load Balancer 

单击“已启用”复选框以使所选服务器可用于负载平衡。 

False/Disabled 

Disable Timeout 

此服务器在被禁用后到达停顿状态所用的时间(以分钟为单位)。 

30 分钟 

url 

指定负载平衡器检查的侦听器的 URL 以确定其运行状况。 

"/" 

interval 

指定进行实例的运行状况检查的时间间隔(以秒为单位)。指定 0 将禁用运行状况检查器。 

30 秒 

timeout 

指定超时间隔(以秒为单位),必须在该时间间隔内获得响应才能认为侦听器运行正常。 

10 秒 

如果应用程序服务器实例被标记为异常,运行状况检查器将轮询异常实例以确定实例的状态是否已变为正常。运行状况检查器使用指定的 URL 来检查所有异常的应用程序服务器实例,以确定这些异常的应用程序服务器实例是否已返回到正常状态。

如果运行状况检查器发现某个异常实例已变为正常,该实例将被添加到正常实例列表中。

有关这些命令的更多信息,请参见 create-http-health-checker(1)delete-http-health-checker(1)

正常实例的附加运行状况检查属性

create-http-health-checker 创建的运行状况检查器仅检查异常实例。要定期检查正常实例,请在导出的 loadbalancer.xml 文件中设置某些附加属性。


注 –

只能在导出 loadbalancer.xml 之后,通过对此文件进行手动编辑来设置这些属性。没有等效的 asadmin 命令可以使用。


要检查正常的实例,请设置以下属性。

表 5–3 运行状况检查器手动设置属性

属性 

定义 

active-healthcheck-enabled

True/False 标志,用于表示是否要对正常服务器实例执行 Ping 操作以确定这些实例是否正常。要对服务器实例执行 Ping 操作,请将标志设置为 True。 

number-healthcheck-retries

指定将未响应的服务器实例标记为异常之前,负载平衡器的运行状况检查器执行 Ping 操作的次数。有效范围在 1 到 1000 之间。默认设置值为 3。 

通过编辑 loadbalancer.xml 文件来设置属性。例如:

<property name="active-healthcheck-enabled" value="true"/>
<property name="number-healthcheck-retries" value="3"/>

如果添加了这些属性,随后再次编辑并导出 loadbalancer.xml 文件, 则新导出的配置将不包含这些属性。必须再次将这些属性添加到新导出的配置中。

导出负载平衡器配置文件

Sun Java System Application Server 附带的负载平衡器插件使用名为 loadbalancer.xml 的配置文件。配置负载平衡器后,可以将配置详细信息从 domain.xml 导出到 loadbalancer.xml 文件。可以使用管理控制台或 asadmin 实用程序执行此操作。

Procedure使用管理控制台导出负载平衡器配置

  1. 导航到“HTTP 负载平衡器”节点并展开它。

  2. 单击所需的负载平衡器。

    所有的负载平衡器配置详细信息都显示在“常规”、“设置”和“目标”选项卡中。

  3. 打开“导出”选项卡并单击“立即导出”。

  4. 将已导出的负载平衡器配置文件复制到 Web 服务器的配置目录。

Procedure使用 asadmin 工具导出负载平衡器配置

  1. 使用 asadmin 命令 export-http-lb-config 导出 loadbalancer.xml 文件。有关该命令的更多信息,请参见 export-http-lb-config(1)

    导出用于特定负载平衡器配置的 loadbalancer.xml 文件。您可以指定路径和其他文件名。如果不指定文件名,则此文件将被命名为 loadbalancer.xml. load-balancer-config-name。如果不指定路径,则将在 domain-dir/generated 目录中创建该文件。

    要在 Windows 上指定路径,请用引号将路径引起来。例如,"C:\Sun\AppServer\loadbalancer.xml"

  2. 将已导出的负载平衡器配置文件复制到 Web 服务器的配置目录。

    例如,对于 Sun Java System Web Server,目录位置通常为 web-server-root/config

    Web 服务器配置目录中的负载平衡器配置文件名必须为 loadbalancer.xml。如果您的文件使用其他名称(例如 loadbalancer.xml. load-balancer-config-name),则必须进行重命名。

更改负载平衡器配置

如果您通过创建或删除对服务器的引用、部署新的应用程序、启用或禁用服务器或应用程序等方法来更改负载平衡器配置,请再次导出负载平衡器配置文件并将其复制到 Web 服务器的 config 目录。有关更多信息,请参见导出负载平衡器配置文件

负载平衡器插件将根据在负载平衡器配置中指定的重新装入时间间隔定期检查已更新的配置。在指定的时间值后,如果负载平衡器发现新的配置文件,它将开始使用该配置。

启用动态重新配置

使用动态重新配置时,负载平衡器插件将定期检查已更新的配置。

要启用动态重新配置,请执行以下步骤:


注 –

如果负载平衡器在尝试进行重新配置时遇到硬盘读取错误,它将使用内存中的当前配置。负载平衡器还确保了在覆写现有配置之前,已修改的配置数据符合 DTD。

遇到磁盘读取错误后,将在 Web 服务器的错误日志文件中记录一则警告消息。

Sun Java System Web Server 的错误日志位于:web-server-install-dir/web-server-instance/logs/


禁用(停止)服务器实例或群集

出于任何原因停止应用服务器之前,实例应该完成正在处理的请求。正常禁用服务器实例或群集的进程称为停止。

负载平衡器使用以下策略来停止应用程序服务器实例:

Procedure禁用服务器实例或群集

  1. 运行 asadmin disable-http-lb-server,设置超时值(以分钟为单位)。有关该命令的更多信息,请参见 disable-http-lb-server(1)

  2. 使用 asadmin export-http-lb-config 导出负载平衡器配置文件。有关该命令的更多信息,请参见 export-http-lb-config(1)

  3. 将导出的配置复制到 Web 服务器的 config 目录。

  4. 停止该服务器实例或群集。

禁用(停止)应用程序

在取消部署某个 Web 应用程序之前,该应用程序应该完成正在处理的请求。正常禁用应用程序的进程称为停止。停止应用程序时,您可以指定超时时间。基于超时时间,负载平衡器可使用以下策略停止应用程序:

Procedure禁用应用程序

  1. 使用 asadmin disable-http-lb-application 指定以下内容:

    • 超时(以分钟为单位)。

    • 要禁用的应用程序的名称。

    • 要禁用此应用程序的目标群集或实例。

    有关该命令的更多信息,请参见 disable-http-lb-application(1)

  2. 使用 asadmin export-http-lb-config 导出负载平衡器配置文件。有关该命令的更多信息,请参见 export-http-lb-config(1)

  3. 将导出的配置复制到 Web 服务器的 config 目录。

配置 HTTP 和 HTTPS 故障转移

如果 HTTP/HTTPS 会话所连接的原始应用程序服务器实例变为不可用,负载平衡器插件会将这些会话故障转移到其他应用程序服务器实例上。本节介绍了如何配置负载平衡器插件以启用 HTTP/HTTPS 路由选择和会话故障转移。

HTTPS 路由选择

负载平衡器插件将收到的所有 HTTP 或 HTTPS 请求路由到应用服务器实例。但是,如果启用了 HTTPS 路由选择,则负载平衡器插件将仅把 HTTPS 请求转发给使用 HTTPS 端口的应用程序服务器。HTTPS 路由选择是针对新请求和粘性请求而执行的。

如果收到了 HTTPS 请求且没有正在进行的会话,负载平衡器插件将选择使用已配置的 HTTPS 端口的可用应用程序服务器实例,并将请求转发到该实例。

在正在进行的 HTTP 会话中,如果收到对同一个会话的新 HTTPS 请求,则将使用在 HTTP 会话期间保存的会话和粘性信息来路由 HTTPS 请求。新的 HTTPS 请求将被路由到处理上一个 HTTP 请求的同一服务器上,但是,是在 HTTPS 端口上进行。

配置 HTTPS 路由选择

create-http-lb-config 命令的 httpsrouting 选项用于控制是为正在参与负载平衡的所有应用程序服务器打开还是关闭 HTTPS 路由选择。如果此选项设置为 False,则所有 HTTP 和 HTTPS 请求都将作为 HTTP 请求进行转发。如果设置为 True,则 HTTPS 将作为 HTTPS 请求进行转发。创建新的负载平衡器配置时请设置 HTTPS 路由选择,或者在以后使用 asadmin set 命令进行更改。


注 –

已知问题

负载平衡器对 HTTP/HTTPS 请求处理具有以下限制。

在负载平衡器中使用重定向

使用重定向可将请求从一个 URL 重定向到另一个 URL。例如,使用重定向将用户发送到其他 Web 站点(例如,从旧版本的应用程序重定向到较新版本的应用程序),或者从 HTTP 重定向到 HTTPS 或从 HTTPS 重定向到 HTTP。在应用程序中可按多种方式启用重定向(例如,基于 servlet 的重定向、web.xml 重定向)。不过,通过负载平衡器发送重定向 URL 可能需要对 Application Server 或负载平衡器进行一些其他配置。请注意,重定向与使用 HTTPS 路由选择转发的请求不同。使用重定向时,请将 httpsrouting 设置为 False。如果将 HTTPS 请求配置为转发到 HTTP,请使用 HTTPS 路由选择

以下属性将影响重定向:HTTP 服务或 HTTP 侦听器的 authPassthroughEnabled 属性和 proxyHandler 属性,以及 loadbalancer.xml 文件中的 rewrite-location 属性。

authPassthroughEnabled 属性

当 Application Server authPassthroughEnabled 属性设置为 True 时,有关原始客户机请求的信息(如客户机 IP 地址、SSL 密钥大小和已认证的客户机证书链)将通过使用自定义请求标头发送到 HTTP 侦听器。如果安装了硬件加速器,authPassThroughEnabled 属性允许您使用硬件加速器来进行更快速的 SSL 验证。在负载平衡器中配置硬件加速器比在每个群集 Application Server 实例中配置硬件加速器更为容易。


注意 – 注意 –

仅当 Application Server 位于防火墙之后时,才将 authPassthroughEnabled 设置为 True。


使用 asadmin set 命令在 HTTP 服务或单个 HTTP 侦听器中设置 authPassthroughEnabled 属性。单个 HTTP 侦听器的设置优先于 HTTP 服务的设置。

要在所有 HTTP/HTTPS 侦听器上设置 authPassthroughEnabled 属性,请使用以下命令:

asadmin set cluster-name-config.http-service.property.authPassthroughEnabled=true

要在单个侦听器上设置该属性,请使用以下命令:

asadmin set cluster-name-config.http-service.http-listener. listener-name.property.authPassthroughEnabled=true

proxyHandler 属性

Application Server 的代理处理程序负责检索有关代理服务器(在本例中,为负载平衡器)拦截并转发给 Application Server 的原始客户机请求的信息,并负责使该信息可供作为客户机请求的目标部署在 Application Server 中的 Web 应用程序使用。如果进行拦截的代理服务器是 SSL 终止代理服务器,则代理处理程序将检索有关原始请求的其他信息(如原始请求是否为 HTTPS 请求,以及是否启用了 SSL 客户机验证),并使这些信息可用。仅当将 authPassThroughEnabled 设置为 True 时才使用 proxyHandler 属性。

代理处理程序将在接收到的请求中检查自定义请求标头,这样,代理服务器即可传送有关原始客户机请求的信息,并使此信息可供使用标准 ServletRequest API 的 Application Server 中的 Web 应用程序使用。

代理处理程序实现是可配置的,可以使用 proxyHandler 属性在 HTTP 服务级别全局配置,也可以针对单个 HTTP 侦听器进行配置。proxyHandler 属性的值指定 com.sun.appserv.ProxyHandler 抽象类实现的完全限定类名。只要代理处理程序实现知道 HTTP 请求标头名称,并且了解其值的格式,可配置的代理处理程序实现就允许 Application Server 与任何代理服务器协同工作,这样,代理服务器便可以传送有关原始客户机请求的信息。

Application Server 的代理处理程序将从该请求标头中读取并解析 SSL 证书链。这将允许后端应用服务器实例检索 SSL 终止代理服务器(在本例中,为负载平衡器)拦截的原始客户机请求的有关信息。您可以使用默认的代理处理程序设置,也可以使用 HTTP 服务或 HTTP/HTTPS 侦听器的 proxyHandler 属性自行配置。proxyHandler 属性可用于指定该侦听器或全部侦听器使用的 com.sun.appserv.ProxyHandler 抽象类的自定义实现的完全限定类名。

此抽象类的实现将在给定请求中检查自定义请求标头,这样,代理服务器可将有关原始客户机请求的信息传送至 Application Server 实例,并将该信息返回给其调用方。默认实现将从名为 Proxy-ip 的 HTTP 请求标头中读取客户机 IP 地址,从名为 Proxy-keysize 的 HTTP 请求标头中读取 SSL 密钥大小,并从名为 Proxy-auth-cert 的 HTTP 请求标头中读取 SSL 客户机证书链。Proxy-auth-cert 值必须包含 BASE-64 编码的客户机证书链且无 BEGIN CERTIFICATE 和 END CERTIFICATE 边界,并将 \n 替换为 % d% a

仅当 authPassThroughEnabled 设置为 True 时才可以使用此属性。如果在单个 HTTP 或 HTTPS 侦听器中设置 proxyHandler 属性,则它将覆盖所有侦听器的默认设置。

可使用 asadmin set 命令在 HTTP 服务或在单个 HTTP 侦听器中设置 proxyHandler 属性。

要在所有 HTTP/HTTPS 侦听器中设置 proxyHandler 属性,请使用以下命令:

asadmin set cluster-name-config.http-service.property.proxyHandler= classname

要在单个侦听器上设置该属性,请使用以下命令:

asadmin set cluster-name-config.http-service.http-listener. listener-name.property.proxyHandler= classname

rewrite-location 属性

如果 rewrite-location 属性设置为 True,则它将重写原始请求信息,并会包括协议(HTTP 或 HTTPS)、主机和端口信息。默认情况下,会将 rewrite-location 属性设置为 True,以便保持与以前 Application Server 版本的向后兼容性。

不能通过 asasmin create-http-lb-config 命令或 asadmin set 命令来使用 rewrite-location 属性。要使用该属性,请在导出负载平衡器配置后将其手动添加到 loadbalancer.xml 文件中。例如,将以下内容添加到导出的 loadbalancer.xml 文件中:

<property name="rewrite-location" value="false"/>

设置 rewrite-location 属性时,请记住以下几点:

配置幂等 URL

幂等请求是一种在重试时不会在应用程序中造成任何更改或不一致的请求。在 HTTP 中,某些方法(例如 GET)是幂等的,而其他方法(例如 POST)则不是。重试幂等 URL 不能导致服务器或数据库中的值发生更改。唯一的区别在于用户收到的响应会有所不同。

幂等请求的示例包括搜索引擎查询和数据库查询。基本原则是重试不会导致数据的更新或修改。

要增强已部署的应用程序的可用性,请这样配置环境:使其在由负载平衡器提供服务的所有应用服务器实例上重试失败的幂等 HTTP 请求。此选项用于只读请求(例如,重试搜索请求)。

请在 sun-web.xml 文件中配置幂等 URL。当您导出负载平衡器配置时,幂等 URL 信息将自动被添加到 loadbalancer.xml 文件中。

有关配置幂等 URL 的更多信息,请参见《Sun Java System Application Server 9.1 Developer’s Guide》中的“Configuring Idempotent URL Requests”

配置多个 Web 服务器实例

Sun Java System Application Server 安装程序不允许在单个计算机上安装多个负载平衡器插件。要在单个群集或多个群集中的单个计算机上安装多个带有负载平衡器插件的 Web 服务器,需要手动执行一些步骤来配置负载平衡器插件。

Procedure配置多个 Web 服务器实例

  1. 配置新的 Web Server 实例以使用负载平衡器插件。

    有关详细说明,请参见配置 Sun Java System Web Server

  2. 将 DTD 文件 sun-loadbalancer_1_1.dtd 从现有 Web 服务器实例的 config 目录复制到新实例的 config 目录。

  3. 设置负载平衡器配置文件。执行以下操作之一:

    • 复制现有负载平衡器配置。

      使用现有负载平衡器配置,将 loadbalancer.xml 文件从现有 Web 服务器实例的 config 目录复制到新实例的 config 目录中。

    • 创建新的负载平衡器配置:

      1. 使用 asadmin create-http-lb-config 创建新的负载平衡器配置。

      2. 使用 asadmin export http-lb-config 将新配置导出到 loadbalancer.xml 文件中。

      3. loadbalancer.xml 文件复制到新 Web Server 的 config 目录中。

        有关创建负载平衡器配置并将其导出到 loadbalancer.xml 文件的信息,请参见 在 DAS 上配置 HTTP 负载平衡器

升级应用程序而不使可用性受到损失

将应用程序升级到新版本而不会给用户造成任何可用性方面的损失,这样的升级称为滚动升级。管理好应用程序升级前后的两个版本可以确保应用程序的当前用户能够不中断地完成任务,同时新用户可以透明地获得应用程序的新版本。执行滚动升级时,用户不会察觉在进行升级。

应用程序兼容性

根据应用程序两个版本间变更的大小,滚动升级的难度将有所不同。

如果变更很小(例如静态文本和图像的变更),则此应用程序的两个版本可以兼容,并且可同时在同一群集中运行。

兼容的应用程序必须满足以下条件:

您可以对单个群集或多个群集中兼容的应用程序执行滚动升级。有关更多信息,请参见在单个群集中升级

如果应用程序的两个版本不满足上述所有条件,则应用程序被视为不兼容。在一个群集中执行不兼容的应用程序版本将破坏应用程序数据并导致会话故障转移功能失常。问题取决于不兼容的类型和程度。好的做法是通过创建要在其上部署新版本的“阴影群集”来升级不兼容的应用程序,然后再慢慢停止旧的群集和应用程序。有关更多信息,请参见升级不兼容的应用程序

应用程序开发者和管理员是确定应用程序版本是否兼容的最佳人员。如果不确定,请假定版本不兼容,因为这是最安全的方法。

在单个群集中升级

假如单个群集的配置未与其他任何群集共享,则您可以对部署到此群集的应用程序执行滚动升级。

Procedure在单个群集中升级应用程序

  1. 保存旧版本的应用程序或备份域。

    要备份域,请使用 asadmin backup-domain 命令。有关该命令的更多信息,请参见 backup-domain(1)

  2. 关闭群集的动态重新配置(如果已启用)。

    从管理控制台执行此操作:

    1. 展开“配置”节点。

    2. 单击群集配置的名称。

    3. 在“配置系统属性”页面中,取消选中“已启用动态重新配置”框。

    4. 单击“保存”

    或者,使用以下命令:

    asadmin set --user user --passwordfile password-file cluster-name-config.dynamic-reconfiguration-enabled=false

  3. 将已升级的应用程序重新部署到目标 domain 中。

    如果使用管理控制台进行重新部署,域将自动成为目标。如果您使用 asadmin,请指定目标。由于已禁用动态重新配置,因此旧应用程序将继续在群集上运行。

  4. 使用 asadmin enable-http-lb-application 为实例启用已重新部署的应用程序。有关该命令的更多信息,请参见 enable-http-lb-application(1)

  5. 从负载平衡器停止群集中的一个服务器实例。

    请执行以下步骤:

    1. 使用 asadmin disable-http-lb-server 禁用服务器实例。有关该命令的更多信息,请参见 disable-http-lb-server(1)

    2. 使用 asadmin export-http-lb-config 导出负载平衡器配置文件。有关该命令的更多信息,请参见 export-http-lb-config(1)

    3. 将已导出的配置文件复制到 Web 服务器实例的配置目录。

      例如,对于 Sun Java System Web Server,目录位置为 web-server-install-dir/https-host-name /config/loadbalancer.xml。为确保负载平衡器能够装入新的配置文件,请通过在负载平衡器配置中设置 reloadinterval 来确保启用动态重新配置。

    4. 请等待,直至超时到期。

      监视负载平衡器的日志文件以确保实例已脱机。如果用户看到重试 URL,将跳过停止时间并立即重新启动服务器。

  6. 在群集中的其他实例仍处于运行状态的情况下,重新启动已禁用的服务器实例。

    重新启动操作将使服务器与域同步,并更新应用程序。

  7. 测试重新启动的服务器上的应用程序,以确保应用程序运行正常。

  8. 重新启用负载平衡器中的服务器实例。

    请执行以下步骤:

    1. 使用 asadmin enable-http-lb-server 启用服务器实例。有关该命令的更多信息,请参见 enable-http-lb-server(1)

    2. 使用 asadmin export-http-lb-config 导出负载平衡器配置文件。有关该命令的更多信息,请参见 export-http-lb-config(1)

    3. 将配置文件复制到 Web 服务器的配置目录。

  9. 对群集中的每个实例重复步骤 5 至步骤 8。

  10. 当所有服务器实例都具有新的应用程序并已运行时,您可以再次为群集启用动态重新配置。

在多个群集中进行升级

Procedure在两个或多个群集中升级兼容的应用程序:

  1. 保存旧版本的应用程序或备份域。

    要备份域,请使用 asadmin backup-domain 命令。有关该命令的更多信息,请参见 backup-domain(1)

  2. 关闭所有群集的动态重新配置(如果已启用)。

    从管理控制台执行此操作:

    1. 展开“配置”节点。

    2. 单击其中一个群集配置的名称。

    3. 在“配置系统属性”页面中,取消选中“已启用动态重新配置”框。

    4. 单击“保存”

    5. 对其他群集重复此过程

    或者,使用以下命令:

    asadmin set --user user --passwordfile password-file cluster-name -config.dynamic-reconfiguration-enabled=false

  3. 将已升级的应用程序重新部署到目标 domain 中。

    如果使用管理控制台进行重新部署,域将自动成为目标。如果您使用 asadmin,请指定目标。由于已禁用动态重新配置,因此旧应用程序将继续在群集上运行。

  4. 使用 asadmin enable-http-lb-application 为群集启用已重新部署的应用程序。有关该命令的更多信息,请参见 enable-http-lb-application(1)

  5. 从负载平衡器停止一个群集

    1. 使用 asadmin disable-http-lb-server 禁用此群集。有关该命令的更多信息,请参见 disable-http-lb-server(1)

    2. 使用 asadmin export-http-lb-config 导出负载平衡器配置文件。有关该命令的更多信息,请参见 export-http-lb-config(1)

    3. 将已导出的配置文件复制到 Web 服务器实例的配置目录。

      例如,对于 Sun Java System Web Server,目录位置为 web-server-install-dir/https-host-name /config/loadbalancer.xml。必须为负载平衡器启用动态重新配置(通过在负载平衡器配置中设置 reloadinterval),以便自动装入新的负载平衡器配置文件。

    4. 请等待,直至超时到期。

      监视负载平衡器的日志文件以确保实例已脱机。如果用户看到重试 URL,将跳过停止时间并立即重新启动服务器。

  6. 在其他群集仍处于运行状态的情况下,重新启动已禁用的群集。

    重新启动操作将使群集与域同步,并更新应用程序。

  7. 测试重新启动的群集上的应用程序,以确保应用程序运行正常。

  8. 在负载平衡器中启用此群集:

    1. 使用 asadmin enable-http-lb-server 启用群集。有关该命令的更多信息,请参见 enable-http-lb-server(1)

    2. 使用 asadmin export-http-lb-config 导出负载平衡器配置文件。有关该命令的更多信息,请参见 export-http-lb-config(1)

    3. 将配置文件复制到 Web 服务器的配置目录。

  9. 对其他群集重复步骤 5 至步骤 8。

  10. 当所有服务器实例都具有新的应用程序并已运行时,您可以再次为所有群集启用动态重新配置。

升级不兼容的应用程序

如果应用程序的新版本与旧版本不兼容,请使用以下过程。有关应用程序兼容条件的信息,请参见应用程序兼容性。此外,您必须在两个或更多群集中升级不兼容的应用程序。如果您只有一个群集,则请为升级创建“阴影群集”,如下所述。

升级不兼容的应用程序时,请执行以下操作:

Procedure通过创建第二个群集来升级不兼容的应用程序

  1. 保存旧版本的应用程序或备份域。

    要备份域,请使用 asadmin backup-domain 命令。有关该命令的更多信息,请参见 backup-domain(1)

  2. 在与现有群集相同或不同组的计算机上创建“阴影群集”。如果已经拥有第二个群集,请跳过此步骤。

    1. 使用管理控制台创建新的群集并引用现有群集的命名配置。

      为每台计算机上的新实例自定义端口,以避免与现有的活动端口冲突。

    2. 对于所有与群集相关联的资源,请使用 asadmin create-resource-ref 将资源引用添加到新创建的群集。有关该命令的更多信息,请参见 create-resource-ref(1)

    3. 使用 asadmin create-application-ref 从新创建的群集创建对部署到此群集的所有其他应用程序(当前已重新部署的应用程序除外)的引用。有关该命令的更多信息,请参见 create-application-ref(1)

    4. 使用 asadmin configure-ha-cluster 将群集配置为高可用性群集。有关该命令的更多信息,请参见 configure-ha-cluster(1)

    5. 使用 asadmin create-http-lb-ref 创建对负载平衡器配置文件中新创建的群集的引用。有关该命令的更多信息,请参见 create-http-lb-ref(1)

  3. 赋予应用程序新版本一个名称,此名称应与旧版本的名称不同。

  4. 将新群集作为目标来部署新的应用程序。使用一个或多个不同的上下文根。

  5. 使用 asadmin enable-http-lb-application 为群集启用已部署的新应用程序。有关该命令的更多信息,请参见 enable-http-lb-application(1)

  6. 在另一个群集仍处于运行状态的情况下,启动新群集。

    启动操作将导致群集与域同步,并使用新应用程序进行更新。

  7. 测试新群集上的应用程序,以确保应用程序运行正常。

  8. 使用 asadmin disable-http-lb-server 从负载平衡器上禁用旧群集。有关该命令的更多信息,请参见 disable-http-lb-server(1)

  9. 为延迟会话存在的时间设置超时值。

  10. 使用 asadmin enable-http-lb-server 从负载平衡器上启用新群集。有关该命令的更多信息,请参见 enable-http-lb-server(1)

  11. 使用 asadmin export-http-lb-config 导出负载平衡器配置文件。有关该命令的更多信息,请参见 export-http-lb-config(1)

  12. 将已导出的配置文件复制到 Web 服务器实例的配置目录。

    例如,对于 Sun Java System Web Server,目录位置为 web-server-install-dir /https-host-name /config/loadbalancer.xml。必须为负载平衡器启用动态重新配置(通过在负载平衡器配置中设置 reloadinterval),以便自动装入新的负载平衡器配置文件。

  13. 在超时时间到期或旧应用程序的所有用户都退出后,停止旧的群集并删除旧的应用程序。

监视 HTTP 负载平衡器插件

配置日志消息

负载平衡器插件使用 Web 服务器的日志记录机制来写入日志消息。Application Server 上的默认日志级别被设置为 Sun Java System Web Server (INFO)、Apache Web Server (WARN) 和 Microsoft IIS (INFO) 上的默认日志级别。应用服务器日志级别(FINEFINERFINEST)映射到 Web 服务器上的 DEBUG 级别。

这些日志消息将被写入 Web 服务器日志文件,其形式为可使用脚本进行解析或可被导入电子表格以计算所需的衡量标准的原始数据。

日志消息类型

负载平衡器插件生成以下类型的日志消息:

负载平衡器配置器日志消息

使用幂等 URL 和错误页面设置时,将记录这些消息。

幂等 URL 模式配置的输出包含以下信息:

请求分发和运行时日志消息

在对请求进行负载平衡和分发时,将生成这些日志消息。

配置器错误消息

如果存在配置问题(例如,缺少引用的自定义错误页面),将显示这些错误消息。

启用负载平衡器日志记录

负载平衡器插件记录以下信息:


注 –

启用负载平衡器日志记录后,如果将 Web 服务器日志级别设置为 DEBUG 或设置为打印详细消息,负载平衡器会将 HTTP 会话 ID 写入 Web 服务器日志文件中。因此,如果托管负载平衡器插件的 Web 服务器位于 DMZ 中,请不要在生产环境中使用 DEBUG 或类似的日志级别。

如果必须使用 DEBUG 日志记录级别,请在 loadbalancer.xml 中将 require-monitor-data 属性设置为 false,以关闭负载平衡器日志记录。


Procedure打开负载平衡器日志记录

  1. 设置 Web 服务器中的日志选项。此过程将取决于 Web Server:

    • 对于 Sun Java System Web Server

      在服务器的管理控制台中,转到“Magnus 编辑器”选项卡,然后将 "Log Verbose" 选项设置为 On

    • 对于 Apache Web Server,请将日志级别设置为 DEBUG

    • 对于 Microsoft IIS,请在 sun-passthrough.properties 文件中将日志级别设置为 FINE

  2. 将负载平衡器配置的 monitor 选项设置为 True。

    使用 asadmin create-http-lb-config 命令在最初创建负载平衡器配置时将监视设置为 True,也可以在以后使用 asadmin set 命令将其设置为 True。默认情况下,监视处于禁用状态。

了解监视消息

负载平衡器插件日志消息的格式如下所示: