负载平衡器配置是 domain.xml 文件中的命名配置。负载平衡器配置非常灵活:
尽管每个负载平衡器只有一个负载平衡器配置,但每个负载平衡器配置可以关联多个负载平衡器。
尽管一个域可以关联多个负载平衡器,但一个负载平衡器只为一个域提供服务。
本节介绍了如何创建、修改和使用负载平衡器配置,其中包括以下主题:
使用 asadmin 命令 create-http-lb-config 创建负载平衡器配置。创建 HTTP 负载平衡器配置介绍了负载平衡器配置参数。有关更多信息,请参见 create-http-lb-config、delete-http-lb-config 和 list-http-lb-configs 的文档。
表 4–1 负载平衡器配置参数
参数 |
说明 |
---|---|
response timeout |
服务器实例必须返回响应的时间(以秒为单位)。如果在该时间段内未收到任何响应,则服务器将被视为处于异常状态。默认值为 60。 |
对负载平衡器的 HTTPS 请求是否会导致对服务器实例的 HTTPS 或 HTTP 请求。有关更多信息,请参见配置 HTTPS 路由选择。 |
|
reload interval |
检查负载平衡器配置文件 loadbalancer.xml 的更改的时间间隔。当检查检测到更改时,系统将重新装入配置文件。值为 0 将禁用重新装入。有关更多信息,请参见启用动态重新配置。 |
monitor |
是否为负载平衡器启用监视功能。 |
负载平衡器插件用于记录路由信息的 Cookie 的名称。HTTP 客户机必须支持 Cookie。如果您的浏览器设置为在存储 Cookie 之前进行询问,则 Cookie 的名称为 JROUTE。 |
|
target |
当您在负载平衡器中创建对独立服务器或群集的引用时,此服务器或群集将被添加到负载平衡器控制的目标服务器和群集的列表中。仍然需要先启用所引用的服务器或群集(使用 enable-http-lb-server),然后才能对该服务器或群集的请求进行负载平衡。如果创建了带有目标的负载平衡器配置,则系统已将该目标添加为引用。
使用 create-http-lb-ref 创建引用。您必须提供负载平衡器配置名称和目标服务器实例或群集。
要删除引用,请使用 delete-http-lb-ref。要删除某个引用,必须先使用 disable-http-lb-server 禁用引用的服务器或群集。
有关更多信息,请参见 create-http-lb-ref 和 delete-http-lb-ref 的文档。
创建对服务器实例或群集的引用后,请使用 enable-http-lb-server 来启用服务器实例或群集。如果在创建负载平衡器配置时使用了某个服务器实例或群集作为目标,则必须启用该服务器实例或群集。
有关更多信息,请参见 enable-http-lb-server 的文档。
由负载平衡器管理的所有服务器都必须具有同构配置,包括部署到这些服务器的相同的应用程序集。部署和启用某个应用程序以便进行访问(在部署期间或部署之后发生)后,您必须启用该应用程序以进行负载平衡。如果没有为负载平衡启用应用程序,则即使已对该应用程序所部署到的服务器的请求执行了负载平衡和故障转移,也不会对该应用程序的请求执行负载平衡和故障转移。
启用应用程序时,请指定应用程序名称和目标。如果负载平衡器管理了多个目标(例如,两个群集),请在所有目标上启用该应用程序。
有关更多信息,请参见 enable-http-lb-application 的联机帮助。
如果部署了新的应用程序,则还必须启用该应用程序以进行负载平衡并再次导出负载平衡器配置。
负载平衡器的运行状况检查器将定期检查被标记为异常的所有已配置的 Application Server 实例。运行状况检查器不是必需的,但如果没有运行状况检查器,或者禁用了运行状况检查器,则不会执行异常实例的定期运行状况检查。
负载平衡器的运行状况检查机制使用 HTTP 与应用程序服务器实例进行通信。运行状况检查器将 HTTP 请求发送给指定的 URL 并等待响应。HTTP 响应标题中的状态码在 100 到 500 之间时表示实例处于正常状态。
要创建运行状况检查器,请使用 asadmin create-http-health-checker 命令。指定下列参数:
表 4–2 运行状况检查器参数
参数 |
说明 |
默认值 |
---|---|---|
url |
指定负载平衡器检查的侦听器的 URL 以确定其运行状况。 |
"/" |
interval |
指定进行实例的运行状况检查的时间间隔(以秒为单位)。指定 0 将禁用运行状况检查器。 |
30 秒 |
timeout |
指定超时间隔(以秒为单位),必须在该时间间隔内获得响应才能认为侦听器运行正常。 |
10 秒 |
如果应用程序服务器实例被标记为异常,运行状况检查器将轮询异常实例以确定实例的状态是否已变为正常。运行状况检查器使用指定的 URL 来检查所有异常的应用程序服务器实例,以确定这些异常的应用程序服务器实例是否已返回到正常状态。
如果运行状况检查器发现某个异常实例已变为正常,该实例将被添加到正常实例列表中。
有关更多信息,请参见 create-http-health-checker 和 delete-http-health-checker 的文档。
create-http-health-checker 创建的运行状况检查器仅检查异常实例。要定期检查正常实例,请在导出的 loadbalancer.xml 文件中设置某些附加属性。
只能在导出 loadbalancer.xml 之后对该文件进行手动编辑来设置这些属性。没有等效的 asadmin 命令可以使用。
要检查正常的实例,请设置以下属性:
表 4–3 运行状况检查器手动设置属性
属性 |
定义 |
---|---|
True/False 标志,用于表示是否要对正常服务器实例执行 Ping 操作以确定这些实例是否正常。要对服务器实例执行 Ping 操作,请将标志设置为 True。 |
|
指定将未响应的服务器实例标记为异常之前,负载平衡器的运行状况检查器执行 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 的配置文件。使用 asadmin 工具可以在 domain.xml 文件中创建负载平衡器配置。配置了负载平衡环境后,请将其导出到文件中。
使用 asadmin 命令 export-http-lb-config 导出 loadbalancer.xml 文件。
导出用于特定负载平衡器配置的 loadbalancer.xml 文件。您可以指定路径和其他文件名。如果不指定文件名,则此文件将被命名为 loadbalancer.xml.load_balancer_config_name。如果不指定路径,则将在 application_server_install_dir/domains/domain_name/generated 目录中创建该文件。
要在 Windows 上指定路径,请用引号将路径引起来。例如 "c:\sun\AppServer\loadbalancer.xml"。
将已导出的负载平衡器配置文件复制到 Web 服务器的配置目录。
例如,对于 Sun Java System Web Server,该位置可能为 web_server_root/config。
Web 服务器配置目录中的负载平衡器配置文件名必须为 loadbalancer.xml。如果您的文件使用其他名称(例如 loadbalancer.xml.load_balancer_config_name),则必须进行重命名。
如果您通过创建或删除对服务器的引用、部署新的应用程序、启用或禁用服务器或应用程序等方法来更改负载平衡器配置,请再次导出负载平衡器配置文件并将其复制到 Web 服务器的 config 目录。有关更多信息,请参见导出负载平衡器配置文件。
负载平衡器插件将根据在负载平衡器配置中指定的重新装入时间间隔定期检查已更新的配置。在指定的时间值后,如果负载平衡器发现新的配置文件,它将开始使用该配置。
要启用动态重新配置,请执行以下步骤:
要创建负载平衡器配置,请将 --reloadinterval 选项与 asadmin create-http-lb-config 一起使用。
此选项用于设置检查负载平衡器配置文件 loadbalancer.xml 的更改的时间间隔。值为 0 将禁用动态重新配置。默认情况下,将以 60 秒的重新装入时间间隔启用动态重新配置。
如果先前已禁用动态重新配置,或者要更改重新装入时间间隔,请使用 asadmin set 命令。
更改重新装入时间间隔后,请再次导出负载平衡器配置文件并将其复制到 Web Server 的 config 目录中,然后重新启动 Web Server。
如果负载平衡器在尝试进行自我重新配置时遇到硬盘读取错误,它将使用内存中的当前配置。负载平衡器还确保了在覆写现有配置之前,已修改的配置数据符合 DTD。
遇到磁盘读取错误后,将在 Web 服务器的错误日志文件中记录一则警告消息。
Sun Java System Web Server 的错误日志位于:web_server_install_dir/webserver_instance/logs/。
出于任何原因停止应用程序服务器之前,您希望实例完成正在处理的请求。正常禁用服务器实例或群集的进程称为停止。
负载平衡器使用以下策略来停止应用程序服务器实例:
如果已禁用某个实例(独立实例或群集的一部分),并且超时尚未到期,粘性请求将继续发送到该实例。但是,新请求将不会发送到已禁用的实例。
超时到期后,该实例将被禁用。从负载平衡器到该实例的所有打开的连接将被关闭。即使并非所有粘连至该实例的会话均已失效,负载平衡器也不会将任何请求发送到该实例。负载平衡器会将粘性请求故障转移到另一个正常实例上。
运行 asadmin disable-http-lb-server,设置超时值(以分钟为单位)。
使用 asadmin export-http-lb-config 导出负载平衡器配置文件。
将导出的配置复制到 Web 服务器的 config 目录。
停止该服务器实例或群集。
在取消部署某个 Web 应用程序之前,您希望此应用程序完成正在处理的请求。正常禁用应用程序的进程称为停止。停止应用程序时,您可以指定超时时间。基于超时时间,负载平衡器可使用以下策略停止应用程序:
如果超时尚未到期,负载平衡器不会将新请求转发到应用程序,而是将它们返回到 Web Server。但是,负载平衡器将会继续转发粘性请求,直至超时到期。
当超时到期时,负载平衡器将不接受此应用程序的任何请求,包括粘性请求。
当您从负载平衡器引用的每个服务器实例或群集中禁用应用程序时,则在再次启用该应用程序之前,已禁用的应用程序的用户将遭受服务损失。如果您从一个服务器实例或群集中禁用应用程序而使该应用程序在其他服务器实例或群集中保持启用状态,则用户仍可访问该应用程序。
使用 asadmin disable-http-lb-application 指定以下内容:
超时(以分钟为单位)。
要禁用的应用程序的名称。
要禁用此应用程序的目标群集或实例。
使用 asadmin export-http-lb-config 导出负载平衡器配置文件。
将导出的配置复制到 Web 服务器的 config 目录。
如果 HTTP/HTTPS 会话所连接的原始应用程序服务器实例变为不可用,负载平衡器插件会将这些会话故障转移到其他应用程序服务器实例上。本节介绍了如何配置负载平衡器插件以启用 HTTP/HTTPS 路由选择和会话故障转移。
本节包括以下主题:
加密的 HTTP (HTTP Secure, HTTPS) 协议使用安全套接字层 (Secure Socket Layer, SSL) 为 HTTP 请求的解密提供加密,以实现安全通信。要使用 HTTPS 路由选择,必须配置一个或多个 HTTPS 侦听器。
负载平衡器插件将收到的所有 HTTP 或 HTTPS 请求路由到应用程序服务器实例。但是,如果启用了 HTTPS 路由选择,则负载平衡器插件将仅把 HTTPS 请求转发给使用 HTTPS 端口的应用程序服务器。HTTPS 路由选择是针对新请求和粘性请求而执行的。
如果收到了 HTTPS 请求且没有正在进行的会话,负载平衡器插件将选择使用已配置的 HTTPS 端口的可用应用程序服务器实例,并将请求转发到该实例。
在正在进行的 HTTP 会话中,如果收到对同一个会话的新 HTTPS 请求,则将使用在 HTTP 会话期间保存的会话和粘性信息来路由 HTTPS 请求。新的 HTTPS 请求将被路由到处理上一个 HTTP 请求的同一服务器上,但是,是在 HTTPS 端口上进行。
create-http-lb-config 命令的 httpsrouting 选项用于控制是为正在参与负载平衡的所有应用程序服务器打开还是关闭 HTTPS 路由选择。如果此选项设置为 False,则所有 HTTP 和 HTTPS 请求都将作为 HTTP 请求进行转发。创建新的负载平衡器配置时,请将此选项设置为 true,或者以后使用 asadmin set 命令进行更改。
如果 https-routing 设置为 true,而新请求或粘性请求传入到没有正常 HTTPS 侦听器的群集中,该请求将生成一个错误。
负载平衡器对 HTTP/HTTPS 请求处理具有以下限制。
如果某个会话使用 HTTP 和 HTTPS 请求的组合,则第一个请求必须是 HTTP 请求。如果第一个请求是 HTTPS 请求,它后面将不能跟 HTTP 请求。这是因为与 HTTPS 会话关联的 Cookie 不是由浏览器返回的。浏览器将两个不同的协议解释为两个不同的服务器,并启动新的会话。
仅当 httpsrouting 设置为 true 时,此限制才有效。
如果某个会话具有 HTTP 和 HTTPS 请求的组合,则必须将应用程序服务器实例配置为同时具有 HTTP 和 HTTPS 侦听器。
仅当 httpsrouting 设置为 true 时,此限制才有效。
如果某个会话具有 HTTP 和 HTTPS 请求的组合,则必须将应用程序服务器实例配置为具有使用标准端口号(即,HTTP 为 80,HTTPS 为 443)的 HTTP 和 HTTPS 侦听器。不管为 httpsrouting 设置了何值,此限制都适用。
幂等请求是一种在重试时不会在应用程序中造成任何更改或不一致的请求。在 HTTP 中,某些方法(例如 GET)是幂等的,而其他方法(例如 POST)则不是。重试幂等 URL 不能导致服务器或数据库中的值发生更改。唯一的区别在于用户收到的响应会有所不同。
幂等请求的示例包括搜索引擎查询和数据库查询。基本原则是重试不会导致数据的更新或修改。
要增强已部署的应用程序的可用性,请这样配置环境:使其在由负载平衡器提供服务的所有应用程序服务器实例上重试失败的幂等 HTTP 请求。此选项用于只读请求(例如,重试搜索请求)。
请在 sun-web.xml 文件中配置幂等 URL。当您导出负载平衡器配置时,幂等 URL 信息将自动被添加到 loadbalancer.xml 文件中。
有关配置幂等 URL 的更多信息,请参见《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide》中的“Configuring Idempotent URL Requests”。