本节介绍了 HTTP 负载平衡器插件。其中包括以下主题:
负载平衡器尝试在多个 Application Server 实例(独立或群集)之间平均分配工作量,从而提高系统的整体吞吐量。
使用负载平衡器还可以启用从一个服务器实例故障转移到另一个服务器实例的请求。对于要保留的 HTTP 会话信息,请配置 HTTP 会话持久性。有关更多信息,请参见第 8 章,配置高可用性会话持久性和故障转移。
有关配置负载平衡的完整说明,请参见 Sun Java System Application Server 高可用性管理指南。
使用 asadmin 工具而不是管理控制台来配置 HTTP 负载平衡。
另请参见:
在某个请求首次从 HTTP 客户机传入负载平衡器时,此请求为新会话请求。新会话请求称为未指定的请求。负载平衡器会根据循环(共享)算法将此请求路由到群集中的应用程序服务器实例。
在某个应用程序服务器实例中创建会话后,负载平衡器会将此会话的所有后续请求都路由到该特定实例而且只路由到该实例。现有会话的请求称为指定的或粘性请求。
Sun Java System Application Server 负载平衡器使用粘性 Round Robin 算法对收到的 HTTP 和 HTTPS 请求进行负载平衡。给定会话的所有请求都将被发送到同一个应用程序服务器实例。使用粘性负载平衡器,会话数据将被高速缓存在单个应用程序服务器上,而不会被分布到群集中的所有实例。
因此,粘性 Round Robin 方案能够带来明显的性能优势,这些优势通常超过了使用纯 Round Robin 方案带来的更加平均分布负载的优势。
新的 HTTP 请求发送到负载平衡器插件时,系统将基于简单的 Round Robin 方案将该请求转发到某个应用程序服务器实例。随后,将通过使用 Cookie 或显式 URL 重写将该请求“粘”到此特定应用程序服务器实例上。
从粘性信息中,负载平衡器插件将首先确定请求先前被转发到的实例。如果发现该实例工作正常,负载平衡器插件会将请求转发至该特定应用程序服务器实例。因此,给定会话的所有请求都将被发送到同一个应用程序服务器实例。
负载平衡器插件使用以下方法来确定会话粘性:
Cookie 方法:负载平衡器插件使用一个单独的 Cookie 来记录路由信息。要使用基于 Cookie 的方法,HTTP 客户机必须支持 Cookie。
显式 URL 重写:粘性信息将被附加至 URL。即使 HTTP 客户机不支持 Cookie,也可以使用此方法。
以下目录包含了用于演示负载平衡和故障转移的样例应用程序:
install_dir/samples/ee-samples/highavailability install_dir/samples/ee-samples/failover
ee-samples 目录还包含有关设置运行样例的环境的信息。
本节介绍了如何设置负载平衡器插件,并且包含以下各节:
配置负载平衡器之前,您必须执行以下操作:
安装 Web Server。
安装负载平衡器插件。
有关安装过程的信息,请参见 Sun Java System Application Server 安装指南(如果使用独立的 Application Server)或 Sun Java Enterprise System 安装指南(如果使用 Java Enterprise System)。
配置 Web Server。有关更多信息,请参见配置 Web 服务器以实现负载平衡。
创建 Application Server 群集或服务器实例以参与负载平衡。
将应用程序部署到这些群集或实例。
根据您的目的和环境,可以使用不同方法配置负载平衡器,如以下各节所述:
部署负载平衡器最常用的方法是使用服务器实例的一个或多个群集。默认情况下,群集中的所有实例都具有相同的配置,并被部署了相同的应用程序。负载平衡器在服务器实例之间分配工作量并将请求从异常实例故障转移到正常实例。如果您已配置了 HTTP 会话持久性,则对请求进行故障转移时,会话信息将保留。
如果您具有多个群集,则仅在单个群集的实例之间对请求进行负载平衡和故障转移。在一个负载平衡器中使用多个群集可以轻易启用应用程序的滚动升级。有关更多信息,请参见升级应用程序而不使可用性受到损失。
您也可以将负载平衡器配置为使用独立的服务器实例而非群集。此配置可导致负载平衡器插件用作反向代理插件(有时称为传递插件)。当 Web Server 接收到在负载平衡器中启用的应用程序的请求时,会将该请求直接转发到 Application Server。
将负载平衡器配置为传递插件,步骤与将其配置为使用服务器实例的群集的相同。
您还可以将负载平衡器配置为使用多个独立实例,并在这些实例之间对请求进行负载平衡和故障转移。但是,在此配置中,您必须手动确保独立实例具有同构环境和部署到其上的相同的应用程序。由于群集自动维护同构环境,因此对于大多数情况,使用群集更好、更容易。
可以使用 asadmin 工具在您的环境中配置负载平衡。有关在这些步骤中使用的 asadmin 命令的更多信息,请参见配置负载平衡器。
使用 asadmin 命令 create-http-lb-config 创建负载平衡器配置。
使用 asadmin create-http-lb-ref 为要管理的负载平衡器添加对群集或独立服务器实例的引用。
如果您创建了具有目标的负载平衡器配置,并且该目标是负载平衡器引用的唯一群集或独立服务器实例,则请跳过此步骤。
使用 asadmin enable-http-lb-server 启用负载平衡器引用的群集或独立服务器实例。
使用 asadmin enable-http-lb-application 启用要用于负载平衡的应用程序。
这些应用程序必须已部署到负载平衡器所引用的群集或独立实例上,并且已启用,可以在群集或独立实例上使用。启用应用程序以用于负载平衡与启用以使用这些应用程序是两个独立的步骤。
使用 asadmin create-health-checker 创建运行状况检查器。
运行状况检查器监视工作异常的服务器实例,以便在这些服务器实例重新正常工作时,负载平衡器可以向它们发送新请求。
使用 asadmin export-http-lb-config 生成负载平衡器配置文件。
此命令将生成一个配置文件,该配置文件要与 Sun Java System Application Server 附带的负载平衡器插件一起使用。
将负载平衡器配置文件复制到 Web 服务器的 config 目录,此目录中存储了负载平衡器插件配置文件。
负载平衡器插件安装程序将对 Web 服务器的配置文件进行一些修改。所作的更改取决于该 Web 服务器。
在运行支持的 Web 服务器的计算机上,负载平衡器插件可随 Sun Java System Application Server Enterprise Edition 一起安装,也可单独安装。有关安装过程的完整信息,请参见《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Installation Guide》中的第 1 章 “Installing Application Server Software”(如果使用独立的 Application Server)或《Sun Java Enterprise System 2005Q5 Installation Guide》(如果使用 Java Enterprise System)。
安装程序将向 Sun Java System Web Server 的配置文件添加以下条目:
向 Web Server 实例的 magnus.conf 文件添加以下条目:
##EE lb-pluginInit fn="load-modules" shlib="web_server_install_dir/plugins/lbplugin/bin/libpassthrough.so" funcs="init-passthrough,service-passthrough,name-trans-passthrough" Thread="no" Init fn="init-passthrough" ##end addition for EE lb-plugin
向 Web Server 实例的 obj.conf 文件添加以下条目:
<Object name=default> NameTrans fn="name-trans-passthrough" name="lbplugin" config-file="web_server_install_dir/web_server_instance/config/loadbalancer.xml" <Object name="lbplugin"> ObjectType fn="force-type" type="magnus-internal/lbplugin" PathCheck fn="deny-existence" path="*/WEB-INF/*" Service type="magnus-internal/lbplugin" fn="service-passthrough" Error reason="Bad Gateway" fn="send-error" uri="$docroot/badgateway.html" </object>
在上述代码中,lbplugin 是唯一标识 Object 的名称;web_server_install_dir/web_server_instance/config/loadbalancer.xml 是负载平衡器要在其上运行的虚拟服务器的 XML 配置文件所在的位置。
安装后,请按照设置 HTTP 负载平衡中所述配置负载平衡器。
要使用 Apache Web Server,您必须在安装负载平衡器插件之前先执行某些配置步骤。负载平衡器插件安装也将对 Apache Web Server 进行其他修改。安装插件后,您必须执行其他配置步骤。
在 Apache 1.3 上,当多个 Apache 子进程运行时,每个进程都有自己的负载平衡 Round Robin 序列。例如,如果有两个 Apache 子进程正在运行,并且负载平衡器插件在两个应用程序服务器实例上进行负载平衡,则第一个请求和第二个请求将发送给实例 1,而第三个和第四个请求则将发送给实例 2。重复此模式(实例 1、实例 1、实例 2、实例 2 等)。此行为可能与您预期的行为(即,实例 1、实例 2、实例 1、实例 2 等)不同。在 Sun Java System Application Server 中,用于 Apache 的负载平衡器插件将为每个 Apache 进程实例化一个负载平衡器实例,从而创建独立的负载平衡序列。
如果使用 --with-mpm=worker 选项进行编译,则 Apache 2.0 将具有多线程行为。
对于 Apache Web Server,根据 Apache 的版本,您的安装必须满足最低要求。
使用 Apache 1.3 时,负载平衡器插件有以下要求:
openssl-0.9.7e(源代码)
mod_ssl-2.8.16-1.3.x(源代码),其中 x 代表 Apache 的版本。mod_ssl 版本必须与 Apache 版本匹配。
gcc-3.3-sol9-sparc-local 软件包(适用于 Solaris SPARC)
gcc-3.3-sol9-intel-local 软件包(适用于 Solaris x86)
flex-2.5.4a-sol9-sparc-local 软件包(适用于 Solaris SPARC)
flex-2.5.4a-sol9-intel-local 软件包(适用于 Solaris x86)
这些软件源可以从 http://www.sunfreeware.com 获得
此外,在编译 Apache 之前,请执行以下步骤:
在 Linux 平台上,在同一台计算机上安装 Sun Java System Application Server。
在 Solaris 操作系统上,确保 gcc 3.3 版和 make 位于 PATH 中,并且已安装 flex。
在 Solaris 10 操作系统上,运行 OpenSSL 的 make 之前,先运行位于 /usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.3/install-tools(在 Solaris SPARC 上)或 /usr/local/lib/gcc-lib/i386-pc-solaris2.9/3.3/install-tools(在 Solaris x86 上)中的 mkheaders。
如果您在 Red Hat Enterprise Linux Advanced Server 2.1 上使用 gcc,则 gcc 的版本必须在 3.0 以上。
要使用 gcc 以外的 C 编译器,请设置 C 编译器的路径并使实用程序位于 PATH 环境变量中。例如,使用 sh shell:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:appserver_installdir/lib
使用 Apache 2.0 时,负载平衡器插件有以下要求:
openssl-0.9.7e(源代码)
httpd-2.0.49(源代码)
gcc-3.3-sol9-sparc-local 软件包(适用于 Solaris SPARC)
gcc-3.3-sol9-intel-local 软件包(适用于 Solaris x86)
flex-2.5.4a-sol9-sparc-local 软件包(适用于 Solaris SPARC)
flex-2.5.4a-sol9-intel-local 软件包(适用于 Solaris x86)
这些软件源可以从 http://www.sunfreeware.com 获得
此外,在编译 Apache 之前,请执行以下步骤:
在 Linux 平台上,在同一台计算机上安装 Sun Java System Application Server。
在 Solaris 操作系统上,确保 gcc 3.3 版和 make 位于 PATH 中,并且已安装 flex。
在 Solaris 10 操作系统上,运行 OpenSSL 的 make 之前,先运行位于 /usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.3/install-tools(在 Solaris SPARC 上)或 /usr/local/lib/gcc-lib/i386-pc-solaris2.9/3.3/install-tools(在 Solaris x86 上)中的 mkheaders。
如果您在 Red Hat Enterprise Linux Advanced Server 2.1 上使用 gcc,则 gcc 的版本必须在 3.0 以上。
要使用 gcc 以外的 C 编译器,请设置 C 编译器的路径并使实用程序位于 PATH 环境变量中。例如,使用 sh shell:export LD_LIBRARY_PATH=app_server_install_dir/lib:$LD_LIBRARY_PATH。
安装用于 Apache 的负载平衡器插件前,请先安装 Apache Web Server。必须编译并生成 Apache 源代码以使用 SSL 运行。本节介绍成功编译 Apache Web Server 以运行负载平衡器插件所需的最低要求和高级步骤。这些要求和步骤仅适用于本软件的 Solaris 和 Linux 版本。有关 Apache 的 Windows 版本的信息,请参见 Apache Web 站点。
您必须已下载并解压缩 Apache 软件。
下载和解压缩 OpenSSL 源代码。
编译和生成 OpenSSL。
如果已安装了 OpenSSL 0.9.7.e,则在 Linux 平台上不需要执行此步骤。
输入以下命令:
cd openssl-0.9.7e make make install |
有关 OpenSSL 的更多信息,请参见 http://www.openssl.org/。
根据 Apache 的版本,请相应执行以下步骤:
对于 Apache 1.3,请使用以下步骤将 Apache 配置为与 mod_ssl 一起使用:
解压缩 mod_ssl 源代码。
cd mod_ssl-2.8.14–1.3.x
./configure –with-apache=../apache_1.3. x --with-ssl=../openssl-0.9.7e --prefix=install_path --enable-module=ssl --enable-shared=ssl --enable-rule=SHARED_CORE --enable-module=so
在以上命令中,x 是 Apache 的版本号,install_path 是安装 Apache 的目录。
有关 mod_ssl 的更多信息,请参见 http://www.modssl.org。
对于 Apache 2.0,请配置源代码树:
对于 Linux 2.1 上的 Apache,编译之前请执行以下操作:
打开 src/MakeFile 并找到自动生成部分的结尾处。
在自动生成部分后的前四行之后添加以下行:
LIBS+= -licuuc -licui18n -lnspr4 -lpthread -lxerces-c -lsupport -lnsprwrap -lns-httpd40 LDFLAGS+= -L/appserver_installdir/lib -L/opt/sun/private/lib
请注意,仅在 Application Server 作为 Java Enterprise System 的一部分进行安装时,-L/opt/sun/private/lib 才是必需的。
例如:
## (End of automatically generated section) ## CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS) LIBS=$(EXTRA_LIBS) $(LIBS1) INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES) LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS) "LIBS+= -licuuc -licui18n -lnspr4 -lpthread -lxerces-c -lsupport -lnsprwrap -lns-httpd40 LDFLAGS+= -L/appserver_installdir /lib -L/opt/sun/private/lib
设置环境变量 LD_LIBRARY_PATH。
对于所有安装,请将此变量设置为:appserver_install_dir/lib
对于 Java Enterprise System 安装,请将此变量设置为 appserver_install_dir/lib:opt/sun/private/lib。
按照您所用版本的安装说明编译 Apache。
有关更多信息,请参见 http://httpd.apache.org/
通常,步骤如下:
配置适合您的环境的 Apache。
负载平衡器插件安装程序将必要文件解压缩至 Web Server 根目录下的以下目录中:
对于 Apache 1.3,此目录为 libexec。
对于 Apache 2.0,此目录为 modules。
它将以下条目添加到 Web Server 实例的 httpd.conf 文件中:
<VirtualHost machine_name:443> ##Addition for EE lb-plugin LoadFile /usr/lib/libCstd.so.1 LoadModule apachelbplugin_module libexec/mod_loadbalancer.so #AddModule mod_apachelbplugin.cpp <IfModule mod_apachelbplugin.cpp> config-file webserver_instance/conf/loadbalancer.xml locale en </IfModule> <VirtualHost machine_ip_address> DocumentRoot "webserver_instance/htdocs" ServerName server_name </VirtualHost> ##END EE LB Plugin ParametersVersion 7
Apache Web Server 必须具有正确的安全性文件才能很好地与负载平衡器插件一起使用。
在 apache_install_dir 下创建一个名为 sec_db_files 的目录。
将 application_server_domain_dir/config/*.db 复制到 apache_install_dir/sec_db_files 中。
根据所使用的平台,请执行其他配置。
要配置 Microsoft Internet Information 服务 (Microsoft Internet Information Services, IIS) 以使用负载平衡器插件,请修改 Windows Internet 服务管理器中的某些属性。Internet 服务管理器位于“控制面板”文件夹的“管理工具”文件夹中。
安装 Sun Java System Application Server 之后,请进行以下修改。
打开 Internet 服务管理器。
选择要为其启用此插件的 Web 站点。
此 Web 站点通常名为“默认 Web 站点”。
在此 Web 站点上单击鼠标右键,并选择“属性”以打开“属性”记事本。
按照以下步骤,添加一个新的 ISAPI 过滤器:
创建并配置新的虚拟目录:
将 sun-passthrough.dll 文件的路径和 application_server_install_dir/bin 添加到系统的 PATH 环境变量中。
重新启动计算机。
停止然后启动 Web 服务器以使新设置生效。
要停止 Web 服务器,请在此 Web 站点上单击鼠标右键,然后选择“停止”。要启动 Web 服务器,请在此 Web 站点上单击鼠标右键,然后选择“启动”。
检验 Web 服务器、负载平衡器插件和 Application Server 是否运行正常。
在 Web 浏览器中键入以下地址,以访问此 Web 应用程序的上下文根:http://webserver_name/web_application,其中 webserver_name 是 Web Server 的主机名或 IP 地址,web_application 是在 C:\Inetpub\wwwroot\sun-passthrough\sun-passthrough.properties 文件中列出的上下文根。
安装程序将自动配置 sun-passthrough.properties 中的下列属性。您可以更改默认值。
属性 |
定义 |
默认值 |
---|---|---|
lb-config-file |
负载平衡器配置文件的路径 |
IIS_www_root\sun-passthrough \loadbalancer.xml |
log-file |
负载平衡器日志文件的路径 |
IIS_www_root\sun-passthrough\lb.log |
log-level |
Web 服务器的日志级别 |
INFO |
Sun Java System Application Server 安装程序不允许在单个计算机上安装多个负载平衡器插件。要在单个群集或多个群集中的单个计算机上安装多个带有负载平衡器插件的 Web 服务器,需要手动执行一些步骤来配置负载平衡器插件。
配置新的 Web Server 实例以使用负载平衡器插件。
请按照对 Sun Java System Web Server 的修改、使用 Apache Web Server或安装中的步骤进行操作
复制 DTD 文件。
将 sun-loadbalancer_1_1.dtd 从现有 Web 服务器实例的 config 目录复制到新实例的 config 目录中。
设置负载平衡器配置文件。执行以下操作之一:
复制现有负载平衡器配置。
使用现有负载平衡器配置,将 loadbalancer.xml 文件从现有 Web 服务器实例的 config 目录复制到新实例的 config 目录中。
创建新的负载平衡器配置:
使用 asadmin create-http-lb-config 创建新的负载平衡器配置。
使用 asadmin export http-lb-config 将新配置导出到 loadbalancer.xml 文件中。
将此 loadbalancer.xml 文件复制到新 Web 服务器的 config 目录中。
有关创建负载平衡器配置并将其导出到 loadbalancer.xml 文件的信息,请参见创建 HTTP 负载平衡器配置。
负载平衡器配置是 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”。
将应用程序升级到新版本而不会给用户造成任何可用性损失,这样的升级称为滚动升级。管理好应用程序升级前后的两个版本可以确保应用程序的当前用户能够不中断地完成任务,同时新用户可以透明地获得应用程序的新版本。执行滚动升级时,用户不会察觉在进行升级。
根据应用程序两个版本间变更的大小,滚动升级的难度将有所不同。
如果变更很小(例如静态文本和图像的变更),则此应用程序的两个版本可以兼容,并且可同时在同一群集中运行。兼容的应用程序必须满足以下条件:
使用相同的会话信息
使用兼容的数据库模式
通常具有兼容的应用程序级业务逻辑
使用相同的物理数据源
您可以对单个群集或多个群集中兼容的应用程序执行滚动升级。有关更多信息,请参见在单个群集中升级。
如果应用程序的两个版本不满足上述所有条件,则应用程序被视为不兼容。在一个群集中执行不兼容的应用程序版本将破坏应用程序数据并导致会话故障转移功能失常。问题取决于不兼容的类型和程度。好的做法是通过创建要在其上部署新版本的“阴影群集”来升级不兼容的应用程序,然后再慢慢停止旧的群集和应用程序。有关更多信息,请参见升级不兼容的应用程序。
应用程序开发者和管理员是确定应用程序版本是否兼容的最佳人员。如果不确定,请假定版本不兼容,因为这是最安全的方法。
假如单个群集的配置未与其他任何群集共享,则您可以对部署到此群集的应用程序执行滚动升级。
保存旧版本的应用程序或备份域。
要备份域,请使用 asadmin backup-domain 命令。
关闭群集的动态重新配置(如果已启用)。
从管理控制台执行此操作:
或者,使用以下命令:
asadmin set --user user --passwordfile password_file cluster_name -config.dynamic-reconfiguration-enabled=false
将已升级的应用程序重新部署到目标 domain 中。
如果使用管理控制台进行重新部署,域将自动成为目标。如果您使用 asadmin,请指定目标域。由于已禁用动态重新配置,因此旧应用程序将继续在群集上运行。
使用 asadmin enable-http-lb-application 为实例启用已重新部署的应用程序。
从负载平衡器停止群集中的一个服务器实例。
请执行以下步骤:
使用 asadmin disable-http-lb-server 禁用服务器实例。
使用 asadmin export-http-lb-config 导出负载平衡器配置文件。
将已导出的配置文件复制到 Web 服务器实例的配置目录。
例如,对于 Sun Java System Web Server,其位置为 web_server_install_dir/https-host-name/config/loadbalancer.xml。为确保负载平衡器能够装入新的配置文件,请通过在负载平衡器配置中设置 reloadinterval 来确保启用动态重新配置。
请等待,直至超时到期。
监视负载平衡器的日志文件以确保实例已脱机。如果用户看到重试 URL,将跳过停止时间并立即重新启动服务器。
在群集中的其他实例仍处于运行状态的情况下,重新启动已禁用的服务器实例。
重新启动操作将使服务器与域同步,并更新应用程序。
测试重新启动的服务器上的应用程序,以确保应用程序运行正常。
重新启用负载平衡器中的服务器实例。
请执行以下步骤:
对群集中的每个实例重复步骤 5 至步骤 8。
当所有服务器实例都包含新的应用程序并且处于运行状态时,便可以再次为群集重新启用动态重新配置。
保存旧版本的应用程序或备份域。
要备份域,请使用 asadmin backup-domain 命令。
关闭所有群集的动态重新配置(如果已启用)。
从管理控制台执行此操作:
或者,使用以下命令:
asadmin set --user user --passwordfile password_file cluster_name-config.dynamic-reconfiguration-enabled=false
将已升级的应用程序重新部署到目标 domain 中。
如果使用管理控制台进行重新部署,域将自动成为目标。如果您使用 asadmin,请指定目标域。由于已禁用动态重新配置,因此旧应用程序将继续在群集上运行。
使用 asadmin enable-http-lb-application 为群集启用已重新部署的应用程序。
从负载平衡器停止一个群集
使用 asadmin disable-http-lb-server 禁用此群集。
使用 asadmin export-http-lb-config 导出负载平衡器配置文件。
将已导出的配置文件复制到 Web 服务器实例的配置目录。
例如,对于 Sun Java System Web Server,其位置为 web_server_install_dir/https-host-name/config/loadbalancer.xml。必须为负载平衡器启用动态重新配置(通过在负载平衡器配置中设置 reloadinterval),以便自动装入新的负载平衡器配置文件。
请等待,直至超时到期。
监视负载平衡器的日志文件以确保实例已脱机。如果用户看到重试 URL,将跳过停止时间并立即重新启动服务器。
在其他群集仍处于运行状态的情况下,重新启动已禁用的群集。
重新启动操作将使群集与域同步,并更新应用程序。
测试重新启动的群集上的应用程序,以确保应用程序运行正常。
在负载平衡器中重新启用此群集:
对其他群集重复步骤 5 至步骤 8。
当所有服务器实例都包含新的应用程序并且处于运行状态时,便可以再次为所有群集重新启用动态重新配置。
有关应用程序兼容条件的信息,请参见应用程序兼容性,应用程序的新版本与旧版本不兼容。此外,您必须在两个或更多群集中升级不兼容的应用程序。如果您只有一个群集,则请为升级创建“阴影群集”,如下所述。
升级不兼容的应用程序时,请执行以下操作:
赋予应用程序新版本一个名称,此名称应与旧版本的名称不同。以下步骤假定已重新命名此应用程序。
如果数据模式不兼容,请在规划数据迁移后使用不同的物理数据源。
将应用程序的新版本部署到与旧版本所部署到的群集不同的群集上。
在使运行旧应用程序的群集脱机前,请为其设置一个适当长的超时,因为此应用程序的请求无法故障转移到新的群集。这些用户会话将只会失败。
保存旧版本的应用程序或备份域。
要备份域,请使用 asadmin backup-domain 命令。
在与现有群集相同或不同组的计算机上创建“阴影群集”。
使用管理控制台创建新的群集并引用现有群集的命名配置。
为每台计算机上的新实例自定义端口,以避免与现有的活动端口冲突。
对于所有与群集相关联的资源,请使用 asadmin create-resource-ref 将资源引用添加到新创建的群集。
使用 asadmin create-application-ref 从新创建的群集创建对部署到此群集的所有其他应用程序(当前已重新部署的应用程序除外)的引用。
使用 asadmin configure-ha-cluster 将群集配置为高可用性群集。
使用 asadmin create-http-lb-ref 创建对负载平衡器配置文件中新创建的群集的引用。
赋予应用程序新版本一个名称,此名称应与旧版本的名称不同。
将新群集作为目标来部署新的应用程序。使用一个或多个不同的上下文根。
使用 asadmin enable-http-lb-application 为群集启用已部署的新应用程序。
在另一个群集仍处于运行状态的情况下,启动新群集。
启动操作将导致群集与域同步,并使用新应用程序进行更新。
测试新群集上的应用程序,以确保应用程序运行正常。
使用 asadmin disable-http-lb-server 从负载平衡器上禁用旧群集。
为延迟会话存在的时间设置超时值。
使用 asadmin enable-http-lb-server 从负载平衡器上启用新群集。
使用 asadmin export-http-lb-config 导出负载平衡器配置文件。
将已导出的配置文件复制到 Web 服务器实例的配置目录。
例如,对于 Sun Java System Web Server,该位置为 web_server_install_dir/https-host-name/config/loadbalancer.xml。必须为负载平衡器启用动态重新配置(通过在负载平衡器配置中设置 reloadinterval),以便自动装入新的负载平衡器配置文件。
在超时时间到期或旧应用程序的所有用户都退出后,停止旧的群集并删除旧的应用程序。
负载平衡器插件使用 Web Server 的日志记录机制来写入日志消息。Application Server 上的默认日志级别被设置为 Sun Java System Web Server (INFO)、Apache Web Server (WARN) 和 Microsoft IIS (INFO) 上的默认日志级别。应用程序服务器日志级别(FINE、FINER 和 FINEST)映射到 Web 服务器上的 DEBUG 级别。
这些日志消息将被写入 Web 服务器日志文件,其形式为可使用脚本进行解析或可被导入电子表格以计算所需的衡量标准的原始数据。
负载平衡器插件生成以下类型的日志消息:
使用幂等 URL 和错误页面设置时,将记录这些消息。
幂等 URL 模式配置的输出包含以下信息:
当日志级别被设置为详细时:
CONFxxxx: IdempotentUrlPattern configured <url-pattern> <no-of-retries> for web-module : <web-module>
当日志级别被设置为严重时:
CONFxxxx: Duplicate entry of Idempotent URL element <url-pattern> for webModule <web-module> in loadbalancer.xml."
当日志级别被设置为警告时:
CONFxxxx: Invalid IdempotentUrlPatternData <url-pattern> for web-module <web-module>
错误页面 URL 配置的输出包含以下信息(日志级别设置为警告):
CONFxxxx: Invalid error-url for web-module <web-module>
在对请求进行负载平衡和分发时,将生成这些日志消息。
每个方法开始的标准日志的输出均包含以下信息(日志级别设置为详细):
ROUTxxxx: Executing Router method <method_name>
每个方法开始的路由器日志的输出均包含以下信息(日志级别设置为信息):
ROUTxxxx: Successfully Selected another ServerInstance for idempotent request <Request-URL>
运行时日志的输出包含以下信息(日志级别设置为信息):
RNTMxxxx: Retrying Idempotent <GET/POST/HEAD> Request <Request-URL>
如果存在配置问题(例如,缺少引用的自定义错误页面),将显示这些错误消息。
日志级别设置为信息:
ROUTxxxx: Non Idempotent Request <Request-URL> cannot be retried
例如:ROUTxxxx: Non Idempotent Request http://sun.com/addToDB?x=11&abc=2 cannot be retried
日志级别设置为详细:
RNTMxxxx: Invalid / Missing Custom error-url / page: <error-url> for web-module: <web-module>
例如:RNTMxxxx: Invalid / Missing Custom error-url / page: myerror1xyz for web-module: test
负载平衡器插件记录以下信息:
每个请求的请求开始/停止信息。
当请求从异常实例故障转移到正常实例时的故障转移请求信息。
每个运行状况检查周期结束时的异常实例列表。
启用负载平衡器日志记录后,如果将 Web 服务器日志级别设置为 DEBUG 或设置为打印详细消息,负载平衡器会将 HTTP 会话 ID 写入 Web 服务器日志文件中。因此,如果托管负载平衡器插件的 Web 服务器位于 DMZ 中,请不要在生产环境中使用 DEBUG 或类似的日志级别。
如果必须使用 DEBUG 日志级别,请在 loadbalancer.xml 中将 require-monitor-data 属性设置为 false,以关闭负载平衡器日志记录。
设置 Web 服务器中的日志选项。此过程将取决于 Web Server:
将负载平衡器配置的 monitor 选项设置为 true。
使用 asadmin create-http-lb-config 命令在最初创建负载平衡器配置时将监视设置为 true,也可以在以后使用 asadmin set 命令将其设置为 true。默认情况下,监视处于禁用状态。
负载平衡器插件日志消息的格式如下所示:
HTTP 请求的开头处包含以下信息:
RequestStart Sticky(New) <req-id> <time-stamp> <URL>
时间戳值是从 1970 年 1 月 1 日开始的毫秒数。例如:
RequestStart New 123456 602983 http://austen.sun.com/Webapps-simple/servlet/Example1
HTTP 请求的结尾包含 RequestExit 消息,如下所示:
RequestExit Sticky(New) <req-id> <time-stamp> <URL> <listener-id> <response-time> Failure-<reason for error>(incase of a failure)
例如:
RequestExit New 123456 603001 http://austen.sun.com/Webapps-simple/servlet/Example1 http://austen:2222 18
在 RequestExit 消息中,<response-time> 表示从负载平衡器插件方面,请求的往返总时间(以毫秒为单位)。
异常实例列表,如下所示:
UnhealthyInstances <cluster-id> <time-stamp> <listener-id>, <listener-id>...
例如:
UnhealthyInstances cluster1 701923 http://austen:2210, http://austen:3010
故障转移请求列表,如下所示:
FailedoverRequest <req-id> <time-stamp> <URL> <session-id> <failed-over-listener-id> <unhealthy-listener-id>
例如:
FailedoverRequest 239496 705623 http://austen.sun.com/Apps/servlet/SessionTest 16dfdac3c7e80a40 http://austen:4044 http://austen:4045