7.2. 负载平衡

负载平衡可帮助您扩展以支持更多用户,使他们能够享受可靠的高性能服务且不会出现任何单故障点。

SGD 支持以下负载平衡机制:

7.2.1. 用户会话负载平衡

用户会话负载平衡与选择要登录到的 SGD 服务器有关。用户可以登录到阵列中的任何 SGD 服务器并访问相同的应用程序。

用户会话负载平衡发生在与 SGD 建立第一个连接之前。您可以使用一系列机制选择合适的 SGD 服务器,例如:

  • SGD Gateway

  • 循环或动态 DNS 机制

  • 外部硬件负载平衡器

  • SGD 负载平衡 JavaServer Pages (JSP) 技术页面

  • 将不同的 SGD 服务器分配给不同的部门并向每个部门提供一个 URL

对用户会话进行负载平衡时,最重要的因素是会话持久性。当用户登录到一台 SGD 服务器时,用户会话即开始,并且该会话由该服务器拥有。当用户与 SGD 进行交互时,进一步的请求将通过与 SGD 服务器的 HTTP 连接进行发送。如果网络连接是负载平衡的,HTTP 请求可能会被定向到阵列中的任何 SGD 服务器。如果 HTTP 请求转到未拥有用户会话的 SGD 服务器,可能会发生以下情况:

  • 用户会话将被转移到该 SGD 服务器,并且任何正在运行的应用程序的窗口可能会消失。这有时被称为会话抓取

  • 用户会话的可见状态不能正确显示。

要成功对用户会话进行负载平衡,HTTP 请求必须持久保持以便它们始终能够转至正确的 SGD 服务器。

在默认的 SGD 安装中,需要进行额外配置才能使 HTTP 连接成为持久连接。SGD 支持以下机制:

  • SGD Gateway。SGD Gateway 包含一个 Apache Web 服务器,该服务器管理与 SGD 的 HTTP 连接的负载平衡。

  • 负载平衡 JSP 技术页面。负载平衡 JSP 技术页面包含一个用来设置 cookie 的 JavaScript 技术脚本,该 cookie 用来将 HTTP 请求重定向到正确的服务器。

Gateway 提供了用于对用户会话进行负载平衡的最佳解决方案。负载平衡 JSP 技术页面在将来的 SGD 发行版中可能不可用。

有关如何安装、配置和使用 SGD Gateway 的说明,请参见《Oracle Secure Global Desktop Gateway 发行版 4.7 管理指南》。

只有浏览器配置如下时,才能使用负载平衡 JSP 技术页面:

  • 已启用 Cookie

  • 已启用 JavaScript 软件

  • 已启用 Java 技术

可以通过以下方式使用负载平衡 JSP 技术页面:

7.2.1.1. 使用负载平衡 JSP 技术页面分配用户会话

要使用负载平衡 JSP 技术页面分配用户会话,阵列的一个成员将充当负载分配服务器。通常,该成员是阵列中的主 SGD 服务器。在负载分配服务器上,您将为负载平衡 JSP 技术页面配置可以托管用户会话的 SGD 服务器列表。用户将连接到负载分配服务器,且负载平衡 JSP 技术页面将使用循环机制将其重定向到列表中的一台 SGD 服务器。

用户必须使用连接到负载平衡 JSP 技术页面的 URL 来连接负载分配服务器,通常该 URL 为 https://server.example.com/sgd,其中 server.example.com 是 SGD 服务器的名称。

要使用基于安全套接字层的 HTTP (HTTP over Secure Socket Layer, HTTPS) 连接,请按如下方式配置 SGD:

  • 使用与负载分配服务器的 HTTP 连接。

  • 在负载平衡 JSP 技术页面中配置 SGD 服务器的 HTTPS URL。

7.2.1.2. 如何配置负载平衡 JSP 技术页面以分配用户会话

选择阵列的一个成员来充当负载分配服务器。以下过程使用阵列中的主 SGD 服务器。

  1. 在阵列中的 SGD 服务器上以超级用户 (root) 身份登录。

  2. 将负载平衡 JSP 技术页面复制到 /sgd Web 应用程序目录。

    例如:

    # cd /opt/tarantella/webserver/tomcat/tomcat-version/webapps/sgd/
    # cp -rp admin/loaddist/ swcd/
    
    注意

    在复制文件时,请使用 -p 选项以保留文件权限。

  3. 编辑负载平衡 JSP 技术页面。

    负载平衡 JSP 技术页面为 swcd.jsp

    1. 添加要进行负载平衡的 SGD 服务器的外部 DNS 名称。

      有关详细信息,请参见第 1.2.1 节 “配置外部 DNS 名称”

      修改 hosts = new Array 部分,例如:

      hosts[0]="http://www1.example.com"
      hosts[1]="http://www2.example.com"
      ...
      hosts[4]="http://www5.example.com"

      如果您使用安全连接,请确保 URL 以 https:// 开头。

      如果您希望主服务器托管用户会话,请只在列表中包括主 SGD 服务器。

    2. 设置 LBHOST 变量。

      删除第一个注释标记 (//),如下所示:

      var LBHOST = null // Not in Load Balancer/Round Robin DNS mode
    3. 保存更改。

  4. 配置 SGD 入口点 JSP 技术页面以使用负载平衡 JSP 技术页面。

    入口点 JSP 技术页面为 index.jsp

    1. 将第一行更改为以下内容:

      <%@ include file="swcd/swcd.jsp" %>
    2. 保存更改。

7.2.1.3. 使用外部机制分配用户会话

当使用外部机制(如硬件负载平衡器或循环 DNS)对用户会话进行负载平衡时,以下因素很重要:

  • 外部 DNS 名称。阵列中的 SGD 服务器必须可通过其外部 DNS 名称直接访问。如果外部负载平衡器正在充当防火墙、交换机或路由器,则必须将其配置为允许使用外部 DNS 名称进行访问。请参见第 1.2.1 节 “配置外部 DNS 名称”

  • 自适应 Internet 协议 (Adaptive Internet Protocol, AIP) 连接。AIP 连接必须转至托管着应用程序会话的 SGD 服务器。外部负载平衡器不得将连接分配到阵列中的不同 SGD 服务器。

  • AIP 不是 HTTP。如果启用了 SGD 安全服务,则会使用安全套接字层 (Secure Sockets Layer, SSL) 对 AIP 连接进行加密。如果外部负载平衡器为 API 请求解密了 SSL,则它无法处理其余的内容。

  • URL 重写。可以将外部负载平衡器配置为重写 URL。如果连接 SGD 时使用的 URL 中包含与 SGD 服务器的外部 DNS 名称不匹配的主机名,则所造成的影响不明确。

  • 虚拟托管多个 HTTPS 连接。要使用与外部负载平衡器和 SGD Web 服务器的 HTTPS 连接,需要两个 SSL 证书:一个用于负载平衡器 DNS 名称,另一个用于 SGD 服务器的外部 DNS 名称。您只能通过使用虚拟托管在同一主机上创建两个 Web 服务器(具有不同的 DNS 名称)来执行此操作。不过,Web 服务器必须使用不同的 TCP 端口或不同的 IP 地址。

要使用外部机制分配用户会话,请在阵列中的每台 SGD 服务器上配置负载平衡 JSP 技术页面。

如果您使用硬件负载平衡器,则必须将负载平衡器配置为允许使用 SGD 服务器的外部 DNS 名称访问这些服务器。通常,负载平衡器同时还是 SSL 加速器。使用此配置时,将按如下方式处理与 SGD 的连接:

  1. 用户发出与负载平衡器 DNS 名称的 HTTPS 连接。

  2. 负载平衡器对 SSL 请求进行解密,并将其作为 HTTP 请求转发到所选 SGD 服务器的外部 DNS 名称。

  3. SGD 服务器上的负载平衡 JSP 技术页面检查负载平衡 cookie,并根据需要将 HTTP 请求重定向到正确的 SGD 服务器。

用户必须使用包含负载平衡器的 DNS 名称的 URL(例如 https://loadbalancer.example.com/sgd)连接到 SGD。

如果已启用了 SGD 安全服务,且已将外部负载平衡器配置为对 SSL 连接进行解密并将其作为未加密连接进行转发,则必须将阵列中的每台 SGD 服务器配置为接受安全端口上的纯文本连接。有关详细信息,请参见第 1.6.2 节 “使用外部 SSL 加速器”

要在负载平衡器与 SGD 服务器之间使用 HTTPS 连接,请确保负载平衡 JSP 技术页面中的 URL 以 https:// 开头。然后执行以下任一配置:

  • 将外部负载平衡器配置为终止已进行了负载平衡的 HTTPS 连接,然后将该连接重新生成为与 SGD 服务器的外部 DNS 名称的 HTTPS 连接。

  • 为 SGD 主机分配一个附加的 IP 地址,并将该主机配置为使用此地址。将 SGD Web 服务器配置为侦听附加 IP 地址,并将负载平衡器的 SSL 证书与此地址相关联。对 SGD Web 服务器进行配置以将 SGD 服务器的外部 DNS 名称与该服务器的原始 IP 地址相关联。将负载平衡器配置为使用附加 IP 地址。

在防火墙穿越模式下使用 SGD 还有助于简化在使用外部负载平衡器时所需的配置。使用防火墙穿越时,与 SGD 的 HTTP 和 AIP 连接是在单个端口(通常为 TCP 端口 443)上建立的。请参见第 1.5.2 节 “防火墙穿越”

7.2.1.4. 如何配置负载平衡 JSP 技术页面以用于“我的桌面”

有关“我的桌面”功能的详细信息,请参见第 4.5.8 节 “使用 My Desktop”

阵列中的所有 SGD 服务器必须以相同的方式进行配置。

  1. 在 SGD 主机上,以超级用户 (root) 身份登录。

  2. 将负载平衡 JSP 技术页面文件复制到 /sgd/mydesktop Web 应用程序目录。

    例如:

    # cd /opt/tarantella/webserver/tomcat/tomcat-version/webapps/sgd/
    # cp -rp admin/loaddist/ mydesktop/swcd/
    
    注意

    在复制文件时,请使用 -p 选项以保留文件权限。

  3. 对“我的桌面”进行配置以使用负载平衡 JSP 技术页面。

    1. 重命名“我的桌面”入口点 JSP 技术页面。

      入口点 JSP 技术页面为 mydesktop/index.jsp

      例如:

      # mv mydesktop/index.jsp mydesktop/mydesktop.jsp
    2. 为“我的桌面”创建新的入口点 JSP 技术页面。

      创建一个新的 JSP 技术页面文件 mydesktop/index.jsp,使其包含以下内容:

      <%@ include file="/mydesktop/swcd/swcd.jsp" %>
    3. 检查“我的桌面”JSP 技术页面文件的文件权限。

      # chmod root:ttaserv mydesktop/index.jsp mydesktop/mydesktop.jsp
  4. 编辑负载平衡 JSP 技术页面。

    负载平衡 JSP 技术页面为 mydesktop/swcd/swcd.jsp

    1. 添加要进行负载平衡的 SGD 服务器的外部 DNS 名称,并设置 LBHOST 变量。

    2. 设置 TARGET 变量。

      必须更改 TARGET 变量,以使其将用户重定向到“我的桌面”而不是 Webtop。

      var TARGET="/sgd/mydesktop/mydesktop.jsp"
    3. 保存更改。

7.2.1.5. 如何针对外部负载平衡机制配置负载平衡 JSP 技术页面

以下过程是当使用外部负载平衡机制时如何在 SGD 服务器上配置负载平衡 JSP 技术页面的示例。

阵列中的所有 SGD 服务器必须以相同的方式进行配置。

  1. 在 SGD 主机上,以超级用户 (root) 身份登录。

  2. 将负载平衡 JSP 技术页面文件复制到 /sgd Web 应用程序目录。

    例如:

    # cd /opt/tarantella/webserver/tomcat/tomcat-version/webapps/sgd/
    # cp -rp admin/loaddist/ swcd/
    
    注意

    在复制文件时,请使用 -p 选项以保留文件权限。

  3. 编辑负载平衡 JSP 技术页面。

    负载平衡 JSP 技术页面为 swcd.jsp

    1. 添加要进行负载平衡的 SGD 服务器的外部 DNS 名称。

      有关详细信息,请参见第 1.2.1 节 “配置外部 DNS 名称”

      修改 hosts = new Array 部分,例如:

      hosts[0]="http://www1.example.com"
      hosts[1]="http://www2.example.com"
      ...
      hosts[4]="http://www5.example.com"
    2. 设置 LBHOST 变量。

      删除第一个注释标记 (//),然后输入 SGD 服务器的外部 DNS 名称,例如:

      var LBHOST="http://www1.example.com" // LB mode
    3. 保存更改。

  4. 配置 SGD 入口点 JSP 技术页面以使用负载平衡 JSP 技术页面。

    入口点 JSP 技术页面为 index.jsp

    1. 将第一行更改为以下内容:

      <%@ include file="swcd/swcd.jsp" %>
    2. 保存更改。

7.2.1.6. 其他负载平衡 JSP 技术页面配置

本节介绍了可用于负载平衡 JSP 技术页面的其他配置。

7.2.1.6.1. 使用其他 Webtop

负载平衡 JSP 技术页面将用户连接到标准 Webtop。要使用其他 Webtop(例如某个定制 Webtop),请修改以下行:

var TARGET="/sgd/standard.jsp"
7.2.1.6.2. 本地化的过渡屏幕

负载平衡 JSP 技术页面使用 /sgd/swcd/ 目录中的图像以英文显示过渡屏幕。要显示本地化的过渡屏幕,请在以下行中更改过渡屏幕图像的默认位置:

// ** Location of gif files
<%
// If the gifs are located in the locale dependent resource use the Path below
String path = getContextPath(request) + "/resources/images/splash/locale=" +
getBestSupportedLocale(request) + "/";
// Default location
//String path="swcd/";
%>
7.2.1.6.3. 其他变量

以下是负载平衡 JSP 技术页面使用的其他变量:

  • SGDLDCOOKIE

    用于负载平衡用途的 cookie 的名称。

    默认为 SGD_SWCDCOOKIE

  • TIMEOUT

    负载平衡 JSP 技术页面等待来自所选主机上 SGD Web 服务器的响应的时间(以毫秒为单位)。如果超过了该超时期限,则会尝试列表中的下一台主机。

    默认为 10000 毫秒。

  • TESTGIF

    负载平衡 JSP 技术页面尝试从所选主机上的 SGD Web 服务器获取的文件。这用于检查主机是否可用。

    默认为 /sgd/resources/images/webtop/secure.gif

7.2.2. 应用程序会话负载平衡

应用程序会话负载平衡涉及选择 SGD 服务器来管理应用程序会话。

应用程序会话包含有关会话的数据集,例如,启动会话的用户的用户身份和一个协议引擎进程。协议引擎进程在 SGD 服务器上运行并执行以下任务:

  • 维护与应用服务器上的应用程序的连接

  • 为应用程序存储显示数据

  • 通过与客户端设备的 AIP 连接发送和接收数据

协议引擎进程可在阵列中的任何 SGD 服务器上运行。它不必是托管着用户会话的同一服务器(即用户登录到的 SGD 服务器)。

SGD 可以在阵列中的所有 SGD 服务器间对应用程序会话进行负载平衡。您拥有的服务器越多,每台服务器上的负载越少。在管理控制台中,可以在 "Global Settings"(全局设置)→ "Performance"(性能)选项卡上配置应用程序会话负载平衡。可以将 SGD 配置为使用以下方法之一选择 SGD 服务器来托管应用程序会话:

  • Server Hosting the User Session(用来托管用户会话的服务器)-托管着用户会话的 SGD 服务器。

  • Least CPU Usage(最小的 CPU 使用率)-中央处理器 (central processing unit, CPU) 空闲时间最多的 SGD 服务器

  • Fewest Application Sessions(最少的应用程序会话)-托管着最少应用程序会话的 SGD 服务器

默认情况下,SGD 使用托管着用户会话的服务器对应用程序会话进行负载平衡。

7.2.3. Application Load Balancing(应用程序负载平衡)

应用程序负载平衡涉及以下内容:

  • 选择应用服务器来运行应用程序,以便用户能够获得最佳性能

  • 分配应用程序将启动,以便各台应用服务器获得类似的按比例的工作负载

SGD 管理员通过定义可运行应用程序的应用服务器并选择要使用的负载平衡方法来管理应用程序负载平衡。

7.2.3.1. 定义要运行应用程序的应用服务器

您通过将应用服务器对象分配给应用程序对象来定义可运行应用程序的应用服务器。

在管理控制台中,可在应用程序的 "Hosting Application Servers"(托管应用服务器)选项卡上执行此操作。另外,您可以将应用程序分配给应用服务器。可在应用服务器对象的 "Hosted Applications"(托管的应用程序)选项卡上执行此操作。

您还可以将应用程序组分配给应用服务器,或者将应用服务器组分配给应用程序。这些组对创建应用服务器池(有时称为应用服务器场)或应用程序非常有用。

在管理控制台中,还可以在应用服务器对象的 "General"(常规)选项卡上选中和取消选中 "Application Start"(应用程序启动)复选框。这会将应用服务器标记为可用于或不可用于运行应用程序。例如,这可用于使服务器在维护工作期间暂时不可用。

7.2.3.2. 选择负载平衡方法

您可以选择 SGD 用于为用户确定最合适的应用服务器的负载平衡方法。

在管理控制台中,可以在 "Global Settings"(全局设置)→ "Performance"(性能)选项卡上配置默认的负载平衡方法。可以通过在应用程序对象的 "Performance"(性能)选项卡上选择不同的方法来为单个应用程序覆盖全局负载平衡方法。

默认情况下,SGD 通过以下方式使用对应用程序进行负载平衡的方法:计算每台服务器正通过 SGD 托管的应用程序会话数,然后选择会话最少的服务器。SGD 还提供了在用户启动应用程序时基于应用服务器的真正负载对应用程序进行负载平衡的方法。这称为“高级负载管理”。要使用“高级负载管理”,必须在每台应用服务器上安装 SGD 增强模块。

有关负载平衡方法和其他因素如何影响负载平衡的详细信息,请参见第 7.2.5 节 “应用程序负载平衡的工作方式”

7.2.4. Load Balancing Groups(负载平衡组)

SGD 使用负载平衡组确保 SGD 服务器与应用服务器通过高速链路进行连接。

SGD 的协议引擎将在应用服务器与 SGD 服务器之间使用的本机协议(如 X11)转换为在 SGD 服务器与客户端设备之间使用的 AIP。AIP 为降低带宽使用而进行了优化,但本机协议没有。

如果您的网络包括慢速链路,则可以通过使用负载平衡组来改善应用程序的性能。可使用负载平衡组将 SGD 服务器和应用服务器组合在一起。当用户运行应用程序时,SGD 会尝试确保协议引擎进程在与应用服务器同组的 SGD 服务器上运行。当同一个组中的所有应用服务器和 SGD 服务器都由高速链路连接时,工作性能最佳。

在管理控制台中,可在 SGD 服务器或应用服务器的 "Performance"(性能)选项卡上定义负载平衡组。负载平衡组名称可以只是一个字符串,也可以是以逗号分隔的字符串列表。该名称可以为任何内容,例如,地点位置或建筑物代码。

7.2.5. 应用程序负载平衡的工作方式

应用程序负载平衡的目的是针对特定应用程序选择可为用户提供最佳性能的应用服务器。当启动应用程序时,SGD 会使用应用程序对象的 "Hosting Application Servers"(托管应用服务器)选项卡上列出的应用服务器构建候选应用服务器列表。然后,SGD 必须确定哪台候选应用服务器最适合用户。该决策会考虑以下因素:

  • 动态应用服务器

  • 应用服务器可用性

  • 应用服务器过滤器

  • 负载平衡组

  • 服务器关联性

  • 应用服务器的相对能力

  • 负载最少的应用服务器

以下各节介绍了这些因素和 SGD 配置如何影响对应用服务器的选择。

7.2.5.1. 动态应用服务器和负载平衡

如果为应用程序配置了动态应用服务器,则可以覆盖应用程序负载平衡的正常 SGD 机制。这是因为某些虚拟服务器代理程序 (virtual server broker, VSB) 允许用户选择在何处运行应用程序。有关更多详细信息,请参见第 4.5.1 节 “动态应用服务器”

当使用动态应用服务器时,只有以下应用服务器属性会影响提供给用户的应用服务器列表。

7.2.5.2. 应用服务器可用性

当启动应用程序时,SGD 会检查其候选应用服务器列表中的任何服务器当前是否可用。如果某台应用服务器不可用,则会将其从列表中删除。

您可以使用应用服务器对象上的 "Application Start"(应用程序启动)(--available false) 属性将应用服务器标记为不可用。例如,您可以执行此操作,使某台应用服务器在维护工作期间不可用。

如果您在使用 SGD 高级负载管理,则负载平衡服务会定期向 SGD 发送保持连接 (keep alive) 包。如果这些包停止,则 SGD 会认为应用服务器“失去联系”且不可用,直到负载平衡服务再次与其取得联系。

7.2.5.3. 应用服务器过滤器

应用服务器对象具有 "Maximum Count"(最大计数)(--maxcount) 和 "User Assignment"(用户分配)(--userassign) 属性,这两个属性可用于过滤为用户运行应用程序的应用服务器。

"Maximum Count"(最大计数)属性用于限制可在应用服务器上运行的应用程序数。达到该限制后,SGD 不会选择应用服务器来运行任何更多应用程序。例如,如果您将一组应用服务器分配给某个应用程序,并且每个应用服务器对象的 "Maximum Count"(最大计数)设置是 1,则 SGD 会在不同应用服务器上运行每个应用程序实例,且每台应用服务器仅被使用一次。

"User Assignment"(用户分配)属性用于基于用户的用户身份(全限定用户名)过滤应用服务器。该属性将应用服务器的使用限定到特定用户或 LDAP 组成员。搜索过滤器可以是以下任一过滤器:

  • 符合 RFC2254 标准的 LDAP 搜索过滤器

  • 符合 RFC1959 标准的 LDAP URL

  • scottasessionowner= 过滤器

注意

SGD 应用基于 LDAP 的搜索过滤器,即使用户身份不是 LDAP 身份。

有关如何配置用户分配搜索过滤器的更多信息,请参见第 C.2.109 节 “User Assignment(用户分配)”

"Maximum Count"(最大计数)和 "User Assignment"(用户分配)属性可以单独使用或一起使用,从而控制可为用户运行应用程序的应用服务器。下表显示了使用这些属性对选择应用服务器的影响。

User Assignment(用户分配)

Maximum Count(最大计数)

影响

不设置

应用服务器可以为所有用户运行不限数目的应用程序。

设为 N

应用服务器只能为所有用户运行 N 个应用程序实例。

用户搜索过滤器

不设置

应用服务器只能为与搜索过滤器匹配的用户运行不限数目的应用程序。

用户搜索过滤器

设为 N

应用服务器只能为与搜索过滤器匹配的用户运行 N 个应用程序实例。

LDAP 组搜索过滤器

不设置

应用服务器只能为 LDAP 组成员运行不限数目的应用程序。

LDAP 组搜索过滤器

设为 N

应用服务器只能为 LDAP 组成员运行 N 个应用程序实例。

7.2.5.4. Load Balancing Groups(负载平衡组)

负载平衡组用于将 SGD 服务器和应用服务器组合在一起。当用户运行应用程序时,SGD 会尝试确保协议引擎进程在与应用服务器处于相同负载平衡组的 SGD 服务器上运行。当同一个组中的所有应用服务器和 SGD 服务器都由高速链路连接时,工作性能最佳。

有关更多详细信息,请参见第 7.2.4 节 “Load Balancing Groups(负载平衡组)”

7.2.5.5. 服务器关联性

当启动应用程序时,SGD 会考虑用户是否已在应用服务器上运行任何应用程序。这称为服务器关联性。服务器关联性是指,如果可能,SGD 在用户上次启动应用程序的同一台应用服务器上运行应用程序。

注意

要使服务器关联性高效工作,应用程序必须与同一组应用服务器相关联。

服务器关联性以百分比表示。当前仅允许以下两个值:

  • 0-任何正在运行的应用程序都不会影响对应用服务器的选择。

  • 100-如果任何现有应用服务器可以运行所选应用程序,则必须重新使用这些服务器。这是默认值。

可以通过运行以下命令来更改服务器关联性值:

$ tarantella config edit \
--tarantella-config-applaunch-appserveraffinity 0|100
小心

如果您在使用 Windows 应用程序,则最好不更改此值,因为使用多台应用服务器会导致问题,尤其是漫游配置文件的问题。还可能存在在不同服务器上运行一套应用程序中的不同应用程序的许可暗示。

7.2.5.6. 应用服务器的相对能力

SGD 允许您在决定在何处启动应用程序时将应用服务器的相对能力这一因素考虑在内。

相对能力用百分比表示,默认情况下,所有服务器的值都是 100。通过编辑服务器的 weighting 负载平衡属性,可以增大或减小这些权重,从而增大或减小 SGD 选择某台应用服务器的可能性。有关权重的更多详细信息,请参见第 7.2.7 节 “调整应用程序负载平衡”

可以使用应用服务器的相对能力实现以下目的:

  • 因为某些原因,减少在特定服务器上启动的应用程序会话数,例如,因为该服务器用于 SGD 外部的其他进程。

  • 因为某些原因,增加在特定服务器上启动的应用程序会话数,例如,尽管该服务器的 CPU 容量较小,但其输入/输出 (Input/Output, I/O) 能力较强。

有关如何使用权重的更多详细信息,请参见第 7.2.5.7 节 “负载最少的应用服务器”中的负载计算。

7.2.5.6.1. 相对能力计算示例 1

您有两台应用服务器(london 和 paris)。Paris 的权重为 50,london 的权重为 100。如果已满足启动应用程序的所有其他条件且这两台服务器当前的负载相同,则更有可能选择 london 来运行应用程序。

7.2.5.6.2. 相对能力计算示例 2

您有 100 台应用服务器且您希望仅使其中一台比其他台“更加强大”。将该服务器的权重增大到 200。

7.2.5.7. 负载最少的应用服务器

SGD 支持多种用于选择负载最少的应用服务器的方法。

可在管理控制台中的 "Global Settings"(全局设置)→ "Performance"(性能)选项卡上设置默认方法。可以通过在应用程序对象的 "Performance"(性能)选项卡上指定一种不同方法来覆盖默认方法。这将允许您以不同的方式对应用程序进行负载平衡。

以下是受支持的应用程序负载平衡方法:

  • 最少的应用程序会话

  • Least CPU Usage(最小的 CPU 使用率)

  • Most Free Memory(最多可用内存)

“最小的 CPU 使用率”和“最多可用内存”方法可在用户启动应用程序时计算应用服务器的真正负载。这称为“高级负载管理”。有关更多详细信息,请参见第 7.2.6 节 ““高级负载管理”的工作方式”

7.2.5.7.1. 最少的应用程序会话

使用“最少的应用程序会话”方法,SGD 可以选择当前正运行的应用程序会话最少的应用服务器。该方法基于对通过 SGD 托管的应用程序会话数的简单计数。

此方法为默认方法。

如果您使用“高级负载管理”,则在出现问题时(例如,如果在启动应用程序时应用服务器负载信息对阵列不可用)会使用“最少的应用程序会话”方法作为后备方法。例如,如果正在重新启动主 SGD 服务器,则可能会发生此情况。

应用服务器负载是使用以下公式计算的:

number of application sessions x 100 /server weighting
7.2.5.7.2. 使用“最少的应用程序会话”时的负载计算示例

下面是使用应用程序负载平衡的“最少的应用程序会话”方法时 SGD 如何计算负载的示例。

应用服务器 london 当前正托管着 10 个应用程序会话,其服务器权重值为 100。

应用服务器 paris 当前正托管着 12 个应用程序会话,其服务器权重值为 100。

london 的负载值为:

10 x 100/100 = 10

paris 的负载值为:

12 x 100/100 = 12

假定已满足启动应用程序的其他条件,则 SGD 会选择 london 来运行接下来的两个应用程序会话。如果将 london 的服务器权重值减小到 50,则 SGD 会选择 paris 来运行接下来的 8 个应用程序会话,因为 london 的负载现在为 20 (10 x 100/50)。

7.2.5.7.3. Least CPU Usage(最小的 CPU 使用率)

使用“最小的 CPU 使用率”方法,SGD 可以选择 CPU 最空闲的应用服务器,该方法适用于需要许多处理器周期的应用程序。

该方法根据应用服务器的 CPU 容量(以 BogoMips 度量)以及当前使用了其 CPU 容量的多少来度量应用服务器的负载。这些度量是由负载平衡服务执行的。

使用以下公式计算剩余容量:

(BogoMips x CPU idle %) x weighting /100
7.2.5.7.4. 使用“最小的 CPU 使用率”时的负载计算示例

下面是使用应用程序负载平衡的“最小的 CPU 使用率”方法时 SGD 如何计算负载的示例。

应用服务器 london 的 BogoMips 度量结果为 500,服务器权重值为 75,CPU 空闲率为 25%。

应用服务器 paris 的 BogoMips 度量结果为 100,服务器权重值为 100,CPU 空闲率为 50%。

london 的剩余容量为:

(500 x 25) x 75/100 = 9375

paris 的剩余容量为:

(100 x 50) x 100/100 = 5000

假定已满足启动应用程序的其他条件,则即使 paris 的 CPU 使用率较小且其服务器权重值较大,也会选择 london 作为应用服务器。

7.2.5.7.5. Most Free Memory(最多可用内存)

使用“最多可用内存”方法,SGD 可选择可用虚拟内存最多的应用服务器,该方法适用于需要大量内存的应用程序。

该方法通过比较应用服务器的实际虚拟内存与当前正使用的内存量来度量应用服务器的负载。这些度量是由负载平衡服务执行的。

使用以下公式计算剩余容量:

virtual memory free x weighting /100
7.2.5.7.6. 使用“最多可用内存”时的负载计算示例

下面是使用应用程序负载平衡的“最多可用内存”方法时 SGD 如何计算负载的示例。

应用服务器 london 的服务器权重值为 100,可用虚拟内存为 250 MB。

应用服务器 paris 的服务器权重值为 75,可用虚拟内存为 500 MB。

london 的剩余容量值为:

250 x 100/100 = 250

paris 的剩余容量值为:

500 x 75/100 = 375

假定已满足启动应用程序的其他条件,则 paris 为所选应用服务器。

7.2.6. “高级负载管理”的工作方式

“高级负载管理”使您能够在启动应用程序时基于应用服务器具有的可用内存量或可用 CPU 量对应用程序进行负载平衡。您只能使用这些方法对 X 应用程序、Windows 应用程序和字符应用程序进行负载平衡。

要使用“高级负载管理”,必须在每台应用服务器上安装 SGD 增强模块。这将安装一项负载平衡服务,该服务向 SGD 提供有关应用服务器的 CPU 和内存负载的实时信息。它还可帮助 SGD 检测应用服务器是否可用,例如,当应用服务器正在重新引导时。

下面是有关负载平衡服务工作方式的概述:

  1. 当主 SGD 服务器启动时,它会生成在进行负载平衡时需要考虑的应用服务器的列表。每当向应用程序分配了主机或从其删除了主机时,该列表都会更新。

  2. 主 SGD 服务器联系每台负载平衡的应用服务器并请求初始负载信息。它通过联系每台应用服务器上 TCP 端口 3579 上的负载平衡服务来执行此操作。建立联系还可以确认应用服务器可用来运行应用程序。

  3. 主 SGD 服务器将更新发送到阵列中的辅助服务器。该更新包含每个方法的容量值以及有关不可用的应用服务器的信息。

  4. 负载平衡服务在用户数据报协议 (User Datagram Protocol, UDP) 端口 3579 上向主 SGD 服务器发送定期更新。即使负载未发生更改,也会发生更新。缺少定期更新这一情况可帮助 SGD 检测应用服务器是否可用来运行应用程序。

  5. 主 SGD 服务器将定期更新发送到阵列中的辅助服务器。该更新包含每个方法的容量值以及有关不可用的应用服务器的信息。即使负载未发生更改,也会发生更新。

    注意

    负载平衡服务始终将应用服务器负载数据发送到主 SGD 服务器。如果主服务器不可用,则“高级负载管理”将不可用且辅助服务器将恢复到默认的基于会话的负载平衡。

  6. 主 SGD 服务器或辅助 SGD 服务器基于它们在更新中接收到的负载信息启动应用程序。

7.2.7. 调整应用程序负载平衡

SGD 管理员可以通过编辑应用程序负载平衡属性来调整应用程序负载平衡。这些属性会影响用于“高级负载管理”的负载平衡服务的运行方式以及 SGD 对应用服务器负载的计算方式。您可以全局调整应用程序负载平衡以及为各台应用服务器进行调整。有关如何编辑负载平衡属性的详细信息,请参见第 7.2.8 节 “编辑应用程序负载平衡属性”

在调整应用程序负载平衡之前,请确保您已阅读并理解了以下内容:

您可以调整应用程序负载平衡工作方式的以下方面:

  • 应用服务器的相对能力

  • 负载平衡侦听端口

  • SGD 服务器从应用服务器请求更新

  • 负载计算频率

  • 对主 SGD 服务器的更新频率

  • CPU 和内存数据的可靠性

  • 对阵列成员的更新频率

以下各节介绍了此调整。

小心

除调整应用服务器的相对能力之外,此调整仅在使用“高级负载管理”时适用。

7.2.7.1. 应用服务器的相对能力

weighting 属性允许您让 SGD 在决定在何处运行应用程序时将应用服务器的相对能力这一因素考虑在内。第 7.2.5.6 节 “应用服务器的相对能力”中讨论了此内容。

7.2.7.2. 负载平衡侦听端口

阵列中的主 SGD 服务器在 TCP 端口 3579 上联系应用服务器上的 SGD 负载平衡服务。这是由 listeningport 属性控制的。

负载平衡服务通过 UDP 端口 3579 向主 SGD 服务器发送更新。这是由 probe.listeningport 属性控制的。

这些端口已注册到 Internet 号码分配机构 (Internet Assigned Numbers Authority, IANA),并保留仅供 SGD 使用。仅当 Oracle 支持人员要求您更改这些属性时,才能进行更改。如果主 SGD 服务器与应用服务器之间存在防火墙,则必须打开这些端口。

7.2.7.3. SGD 从应用服务器请求更新

connectretries 属性是主 SGD 服务器尝试连接到应用服务器以请求负载更新的次数。两次尝试之间的时间间隔是由 shorttimeout 属性控制的。如果连接尝试失败,则重试之前 SGD 服务器将等待由 longtimeout 属性控制的时间段。

例如,为这些属性使用默认值时,主 SGD 服务器会尝试以 20 秒的时间间隔 (shorttimeout) 联系应用服务器 5 次 (connectretries)。如果 5 次尝试都失败,则 SGD 在再次以 20 秒的时间间隔进行 5 次尝试之前会等待 600 秒 (longtimeout)。

您可能希望更改超时属性,例如,如果应用服务器重新引导需要很长的时间。

scaninterval 属性控制在两次扫描 SGD 服务器的负载平衡应用服务器列表之间的时间间隔。扫描会检查需要与之联系以请求负载更新 (connectretries) 的应用服务器。

当没有数据可用时,sockettimeout 属性会通过尝试联系负载平衡服务来控制 SGD 服务器过多久将得到错误。

7.2.7.4. 负载计算频率

probe.samplerateprobe.windowsize 属性控制负载平衡服务对应用服务器平均负载进行度量的频率。

例如,probe.samplerate 为 10 秒,probe.windowsize 为 5 秒。在 50 秒 (5 x 10) 之后,已获取了计算平均值所需的 5 个度量值。再过 10 秒后,负载平衡服务会获取一个新的度量值,丢弃最旧的度量值,然后计算新的平均负载。

您可以根据您预计的应用服务器负载变化频率来增大和降低计算频率。例如,如果用户在一天开始时启动应用程序并且在一天结束时将其关闭,您可能希望降低负载计算频率。不过,如果用户重复启动和停止应用程序,您可能要增大负载计算频率。

7.2.7.5. 对主 SGD 服务器的更新频率

replyfrequency 属性控制负载平衡服务向主 SGD 服务器发送更新的时间间隔。

percentagechange 属性控制当 CPU 或内存使用量的百分比变化最少为多少时,必须将变化报告给主 SGD 服务器。当发生该百分比变化时,负载平衡服务会立即发送这些更新。例如,如果应用服务器正在运行且 CPU 负载为 30% 并且 percentchange 值为 10,则当负载为 20% 或 40% 时会发生更新。负载平衡服务会考虑突发的活动“峰值”并适当作出调整,例如当服务器达到 81% 的 CPU 负载且 percentagechange 值为 20% 时。

即使负载未变化并且已存在 percentagechange 更新,也会发送 replyfrequency 更新。每次发生 replyfrequency 更新时都将重置 percentage change 计算的基础。

如果有 updatelimit x replyfrequency 秒没有来自应用服务器的更新,SGD 将认为应用服务器“已失去联系”。这意味着应用服务器将被标记为不可用来运行应用程序,直到 SGD 服务器可与其重新建立联系。

7.2.7.6. CPU 和内存数据的可靠性

如果有 updatelimit x replyfrequency 秒没有来自应用服务器的更新,则 SGD 认为它接收的 CPU 和内存数据非常不可靠。

注意

即使负载未变化,负载平衡服务也将发送更新。

如果数据不可靠,则在决定在何处运行应用程序时会忽略该数据。由此引发的实际影响是使该应用服务器成为队列中的最后一台,以便仅当没有其他服务器可用或适用时才可使用它来运行应用程序。

7.2.7.7. 对阵列成员的更新频率

主 SGD 服务器每 maxmissedsamples x replyfrequency/2 秒会向阵列的其他成员发送 CPU 和内存负载更新。即使负载未发生变化,也会发生更新。

如果某台辅助 SGD 服务器错过某个更新,则它会认为它所具有的负载数据不可靠,并恢复到“最少应用程序会话”负载平衡方法。在收到新的更新之前它将使用此方法。

7.2.8. 编辑应用程序负载平衡属性

可以通过编辑应用服务器负载平衡属性来调整 SGD 应用程序负载平衡。属性存储在属性文件中,您可使用文本编辑器对其进行编辑。有三个属性文件,如下所述:

  • 全局属性文件-此文件包含阵列中所有 SGD 服务器的默认设置

  • 应用服务器属性文件-此文件允许您为特定的应用服务器覆盖全局属性文件中的某些默认设置

  • 负载平衡服务属性文件-此文件包含负载平衡服务在 UNIX 或 Linux 平台应用服务器上首次启动或重新启动时使用的设置

本节介绍了如何编辑属性文件以及有哪些属性可用。有关如何使用这些属性的详细信息,请参见第 7.2.7 节 “调整应用程序负载平衡”

小心

请谨慎编辑这些属性,因为这可能会导致应用程序无法启动。

7.2.8.1. 如何创建应用服务器负载平衡属性文件

确保没有用户登录到 SGD 服务器,并且 SGD 服务器上没有运行应用程序会话,包括暂停的应用程序会话。

  1. 在主 SGD 服务器上以超级用户 (root) 身份登录。

    小心

    请仅在阵列中的主 SGD 服务器上创建负载平衡属性文件。主服务器将文件复制到辅助服务器。

  2. 转到 /opt/tarantella/var/serverconfig/global/t3hostdata 目录。

  3. 创建负载平衡属性文件。

    template.properties 文件复制为同一目录中名为 hostname.properties 的一个文件,其中 hostname 是应用服务器的名称,例如 paris.example.com.properties

  4. 编辑负载平衡属性文件。

    1. 在文本编辑器中打开属性文件。

    2. 添加应用服务器的全限定名称。

      查找包含 tarantella.config.tier3hostdata.name 属性的行。

      = 之后,键入应用服务器的全限定名称。

      将名称括在引号中,并使用反斜杠对主机名的每个部分进行转义。例如:

      ".../_ens/o\=示例/cn\=paris"

    3. 配置特定于服务器的属性。

      通过删除 # 字符,取消注释包含要覆盖的属性的行。

      请仅取消注释您希望其不同于全局默认值的属性。

      更改您希望覆盖的属性的值。

      提示

      template.properties 文件包含可帮助您创建特定于服务器的文件的注释。

    4. 保存更改并关闭该文件。

  5. 对主 SGD 服务器执行热重新启动。

    # tarantella restart sgd --warm

7.2.8.2. 全局负载平衡属性文件

全局负载平衡属性文件包含阵列中所有 SGD 服务器的默认负载平衡属性。

该文件为 /opt/tarantella/var/serverconfig/global/tier3lb.properties

小心

请仅在阵列中的主 SGD 服务器上编辑这些属性。主服务器将经过修改的属性文件复制到辅助服务器。

tier3lb.properties 属性文件中,属性以 tarantella.config.tier3lb 为前缀,例如 tarantella.config.tier3lb.weighting

下表列出了您可以更改的属性,并给出了在首次安装 SGD 时属性的默认值。此表还说明了每个属性的用途。

属性

默认值

用途

connectretries

3

SGD 服务器尝试连接到应用服务器以请求 CPU 和内存使用情况更新的次数。

listeningport

3579

SGD 服务器用来侦听负载平衡服务发送的数据的 UDP 端口。

longtimeout

900

SGD 服务器要连接到应用服务器时执行的每组尝试之间的暂停(以秒为单位)。

maxmissedsamples

20

错过的样本数,用来计算应用服务器的 CPU 和内存数据是否太不可靠以至于无法使用。

probe.listeningport

3579

负载平衡服务侦听来自 SGD 服务器的请求(例如何时开始发送更新)时使用的 TCP 端口。

probe.percentchange

10

必须报告给 SGD 服务器的 CPU 和内存使用量最小增加或降低百分比。

probe.replyfrequency

30

负载平衡服务向 SGD 服务器发送 CPU 和内存度量值时的时间间隔(以秒为单位)。此属性的最小值为 2。

probe.samplerate

15

CPU 和内存度量值的时间间隔(以秒为单位)。此属性的最小值为 1。

probe.windowsize

3

用于计算 CPU 和内存平均值的 CPU 和内存度量值的数目。此属性的最小值为 1。

scaninterval

60

两次扫描 SGD 服务器的负载平衡应用服务器列表之间的时间间隔(以秒为单位)。

shorttimeout

60

SGD 服务器要连接到应用服务器时执行的尝试之间的时间间隔(以秒为单位)。

sockettimeout

5

套接字超时(以秒为单位)。

updatelimit

5

用于计算负载平衡服务已何时停止发送更新的限制。

weighting

100

负载度量值的权重,相对于其他应用服务器。

以下属性也出现在 tier3lb.properties 属性文件中,但不得对其进行更改:

tarantella.config.type=server
tarantella.config.name=tier3lb

7.2.8.3. 应用服务器负载平衡属性文件

您可以通过为特定应用服务器创建负载平衡属性文件来覆盖某些全局负载平衡属性。您必须手动创建此文件(如第 7.2.8.1 节 “如何创建应用服务器负载平衡属性文件”中所述)。

可以覆盖的全局属性包括:

  • probe.listeningport

  • probe.percentchange

  • probe.replyfrequency

  • probe.samplerate

  • probe.windowsize

  • weighting

在特定于服务器的属性文件中,属性以 tarantella.config.tier3hostdata 为前缀,例如 tarantella.config.tier3hostdata.weighting

7.2.8.4. 负载平衡服务属性文件

负载平衡服务属性文件包含负载平衡服务在 UNIX 或 Linux 平台应用服务器上首次启动或者每次重新启动时使用的设置。

小心

仅当 Oracle 支持人员要求您进行更改时,或者如果您更改了应用服务器的物理或虚拟内存但尚未重新安装 SGD 增强模块时,才能更改这些属性。

负载平衡服务属性文件为:/opt/tta_tem/var/serverconfig/local/tier3loadbalancing.properties

如果您更改了这些属性,必须手动停止并重新启动负载平衡服务。

可以覆盖的属性包括:

  • probe.listeningport

  • probe.percentchange

  • probe.replyfrequency

  • probe.samplerate

  • probe.windowsize

  • weighting

在负载平衡服务属性文件中,属性以 tarantella.config.tier3loadbalancing 为前缀,例如 tarantella.config.tier3loadbalancing.weighting