7.7. 对阵列和负载平衡进行故障排除

本节介绍了使用 SGD 服务器时会遇到的一些典型问题以及修复方法。

其中包括以下故障排除主题:

7.7.1. 对阵列回弹进行故障排除

要在使用阵列回弹时帮助诊断和修复问题,您可以执行以下操作:

  • 显示 SGD 阵列的状态信息

  • 启用阵列回弹日志记录

7.7.1.1. 显示 SGD 阵列的状态信息

在 SGD 服务器上使用 tarantella status 命令来显示该服务器的状态信息。

本节包括阵列中的主服务器发生故障时使用 tarantella status 显示 SGD 阵列的状态信息的一些示例。第 7.1.6.2.1 节 “主服务器发生故障”包括此阵列回弹情况的详细说明。

示例使用的原始网络配置是由 example.com 域中的 SGD 服务器组成的一个三节点阵列,如下所述:

  • 主服务器-boston

  • 辅助服务器- newyorkdetroit

当主服务器 boston 发生故障时,在 newyork 上运行 tarantella status 将指出与 SGD 阵列之间存在连接问题,如下所述:

$ tarantella status
Array members (3):
 - newyork.example.com (secondary): Accepting standard connections.
 - boston.example.com (primary): NOT ACCEPTING CONNECTIONS.
 - detroit.example.com (secondary): Accepting standard connections.
...

如果阵列中的 SGD 服务器未就阵列成员关系达成一致,tarantella status 会显示阵列中的每台 SGD 服务器都了解的阵列配置。例如,在故障转移阶段在 newyork 上运行 tarantella status 可能会显示以下信息:

$ tarantella status
	Inconsistent array: the servers report different array membership.
...
boston.example.com reports an error:
 - Host is unavailable
 
newyork.example.com reports 3 members as:
 - newyork.example.com
 - boston.example.com
 - detroit.example.com
 
detroit.example.com reports 1 member as:
 - detroit.example.com

tarantella status 命令指示阵列是否处于已修复状态。例如,在故障转移阶段完成后从 detroit 运行 tarantella status 可能会显示以下信息:

$ tarantella status
Array members (2):
 - newyork.example.com (primary)
 - detroit.example.com (secondary)
...
This node is in a repaired array. Any alterations to array state will prevent recovery
of the original array.
Use the tarantella status --originalstate command to see the original array state.

您可以使用 --originalstate 选项列出阵列在被修复前的成员。例如,在阵列中的任何服务器上使用 --originalstate 选项会显示原始阵列成员,如下所示:

$ tarantella status --originalstate
Original array members (3):
 - boston.example.com (primary)
 - newyork.example.com (secondary)
 - detroit.example.com (secondary)
...

在恢复阶段之后,您可以使用 tarantella status 命令验证是否已重新创建了原始阵列结构。例如,在 newyork 上运行 tarantella status 可能会显示以下信息:

$ tarantella status
Array members (3):
 - newyork.example.com (secondary): Accepting standard connections.
 - boston.example.com (primary): Accepting standard connections.
 - detroit.example.com (secondary): Accepting standard connections.
...

7.7.1.2. 启用阵列回弹日志记录

要为阵列回弹启用日志记录,请在管理控制台中 "Global Settings"(全局设置)→ "Monitoring"(监视)选项卡上的 "Log Filter"(日志过滤器)字段中添加以下日志过滤器:

server/failover/*:failover%%PID%%.log
server/failover/*:failover%%PID%%.jsl

有关配置和使用 SGD 日志过滤器的更多信息,请参见第 7.4.3 节 “使用日志过滤器对 SGD 服务器问题进行故障排除”

7.7.2. 对时钟同步问题进行故障排除

如果阵列中的各台 SGD 服务器上的时钟不同步,则会出现问题。如果可能,请使用 NTP 软件或 rdate 命令确保所有 SGD 主机上的时钟保持同步。

在主 SGD 服务器上运行 tarantella status 命令可显示阵列的任何时钟同步问题。以下示例指出辅助服务器 newyork.example.com 上的时钟不同步。

$ tarantella status
Array members (3):
 - boston.example.com (primary): Accepting standard connections.
 - newyork.example.com (secondary): Accepting standard connections.
 - detroit.example.com (secondary): Accepting standard connections.
 
WARNING: The clocks on the array nodes are not synchronized.
The following array members disagree with the primary:
 - newyork.example.com

如果时钟不同步,则管理控制台的 "Secure Global Desktop Servers"(Secure Global Desktop 服务器)选项卡上也会显示一条警告消息。

使用 tarantella status--byserver 选项可显示阵列中每台 SGD 服务器的时钟设置,如下所示:

$ tarantella status --byserver
 
boston.example.com:
 - Array member (primary): Accepting standard connections.
 ...
 - Current time reported: Wed Apr 28 09:36:16 BST 2010
 
newyork.example.com:
 - Array member (secondary): Accepting standard connections.
 ...
 - Current time reported: Wed Apr 28 09:38:02 BST 2010
 
detroit.example.com:
 - Array member (secondary): Accepting standard connections.
 ...
 - Current time reported: Wed Apr 28 09:36:16 BST 2010
 
WARNING: The clocks on the array nodes are not synchronized.

7.7.3. 对“高级负载管理”进行故障排除

如果您遇到与应用程序负载平衡的“最小的 CPU 使用率”和“最多可用内存”方法有关的问题,可从以下位置获取信息以帮助您了解所发生的情况:

  • SGD 服务器日志文件

    将以下过滤器添加到管理控制台中 "Global Settings"(全局设置)→ "Monitoring"(监视)选项卡上的 "Log Filters"(日志过滤器)字段:

    server/tier3loadbalancing/*:t3loadbal%%PID%%.log
    server/tier3loadbalancing/*:t3loadbal%%PID%%.jsl

    这提供了有关运行应用程序的决策,以及由应用服务器发送的数据的详细信息。

    有关配置和使用 SGD 日志过滤器的更多信息,请参见第 7.4.3 节 “使用日志过滤器对 SGD 服务器问题进行故障排除”

  • SGD 增强模块日志

    对于 UNIX 或 Linux 平台应用服务器,这些日志位于 /opt/tta_tem/var/log/tier3loadprobePID_error.log 文件中。

    对于 Windows 应用服务器,该信息显示在事件查看器中。

  • 负载平衡服务连接通用网关接口 (Common Gateway Interface, CGI) 程序

    转至 https://applicationserver:3579?get&ttalbinfo URL。

您可以使用该信息对以下常见问题进行故障排除:

7.7.3.1. 负载平衡服务未工作

如果您觉得负载平衡服务未工作,请检查以下各项。

Questions

Questions and Answers

7.7.3.1.1: SGD 增强模块是否已安装并在运行?

在 Microsoft Windows 应用服务器上,使用 "Control Panel"(控制面板)→ "Administrative Tools"(管理工具)→ "Services"(服务)来检查 Tarantella 负载平衡服务是否已列出并启动。

在 UNIX 和 Linux 平台应用服务器上,以超级用户 (root) 身份运行以下命令来检查负载平衡进程是否正在运行:

# /opt/tta_tem/bin/tem status

7.7.3.1.2: 主 SGD 服务器是否正在运行?

应用服务器上的负载平衡服务会将负载信息发送到主 SGD 服务器。如果主服务器不可用,SGD 将使用“最少的应用程序会话”作为负载平衡应用服务器的方法。

7.7.3.1.3: 您的防火墙是否阻止负载平衡服务?

要使负载平衡服务工作,防火墙必须允许以下连接:

  • SGD 服务器和应用服务器之间端口 3579 上 的 TCP 连接。

  • 应用服务器和 SGD 服务器之间端口 3579 上的 UDP 连接。

注意

这些连接不需要进行验证。

7.7.3.1.4: 日志文件显示了什么内容?

可检查日志文件以了解进一步的信息,有关详细信息,请参见第 7.7.3 节 “对“高级负载管理”进行故障排除”

7.7.3.2. SGD 忽略了应用服务器负载平衡属性文件

为应用服务器创建负载平衡属性文件后,必须对主 SGD 服务器执行热重新启动。以超级用户 (root) 身份运行以下命令:

# tarantella restart sgd --warm

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

7.7.3.3. 从未选取某台应用服务器

如果从未选取某台应用服务器来运行应用程序,请检查以下各项:

Questions

  • 7.7.3.3.1: 应用服务器上是否在运行负载平衡服务?

  • 7.7.3.3.2: 应用服务器是否可用来运行应用程序?

  • 7.7.3.3.3: 日志文件显示了什么内容?

Questions and Answers

7.7.3.3.1: 应用服务器上是否在运行负载平衡服务?

请参见第 7.7.3.1 节 “负载平衡服务未工作”

7.7.3.3.2: 应用服务器是否可用来运行应用程序?

在管理控制台中检查应用服务器对象。确保在应用服务器对象的 "General"(常规)选项卡上选中 "Application Start"(应用程序启动)复选框。

检查应用服务器是否已启动。

7.7.3.3.3: 日志文件显示了什么内容?

可检查日志文件以了解进一步的信息,有关详细信息,请参见第 7.7.3 节 “对“高级负载管理”进行故障排除”

7.7.3.4. 始终选取某台应用服务器

如果始终选取某台应用服务器来运行应用程序,而不管其负载情况如何,请检查以下各项:

Questions

  • 7.7.3.4.1: 是否配置了多台应用服务器来运行应用程序?

  • 7.7.3.4.2: 其他应用服务器是否可用来运行应用程序?

  • 7.7.3.4.3: 是否选择了正确的负载平衡方法?

  • 7.7.3.4.4: 是否在使用服务器关联性?

  • 7.7.3.4.5: 应用服务器上是否在运行负载平衡服务?

  • 7.7.3.4.6: 日志文件显示了什么内容?

Questions and Answers

7.7.3.4.1: 是否配置了多台应用服务器来运行应用程序?

检查应用程序对象的 "Hosting Application Servers"(托管应用服务器)选项卡。

7.7.3.4.2: 其他应用服务器是否可用来运行应用程序?

在管理控制台中检查应用服务器对象。确保在 "General"(常规)选项卡上选中 "Application Start"(应用程序启动)复选框。

检查所有应用服务器是否都已启动。

7.7.3.4.3: 是否选择了正确的负载平衡方法?

在管理控制台中,检查是否在应用程序对象的 "Performance"(性能)选项卡或 "Global Settings"(全局设置)→ "Performance"(性能)选项卡上选择了 "Most Free Memory"(最多可用内存)或 "Least CPU Usage"(最小的 CPU 使用率)作为负载平衡方法。

7.7.3.4.4: 是否在使用服务器关联性?

服务器关联性是指,如果可能,SGD 在用户上次启动应用程序的同一台应用服务器上启动应用程序。服务器关联性默认情况下处于启用状态,请参见第 7.2.5.5 节 “服务器关联性”

7.7.3.4.5: 应用服务器上是否在运行负载平衡服务?

请参见第 7.7.3.1 节 “负载平衡服务未工作”

7.7.3.4.6: 日志文件显示了什么内容?

可检查日志文件以了解进一步的信息,有关详细信息,请参见第 7.7.3 节 “对“高级负载管理”进行故障排除”

7.7.3.5. 两台完全相同的应用服务器,但其中一台运行的应用程序多于另一台

检查服务器的服务器权重值是否相同。请参见第 7.2.7.1 节 “应用服务器的相对能力”

7.7.3.6. SGD 服务器日志文件表明为未知 ID 接收了更新

SGD 服务器日志文件可能会显示包含以下文本的信息性消息:

Got an update for unknown id from machine applicationserver

可忽略该消息。仅在主 SGD 服务器重新启动时才会出现该消息。

7.7.4. SGD 使用了过多的网络带宽

如果 SGD 使用了大量网络带宽,请为用户配置文件设置 "Bandwidth Limit"(带宽限制)属性,从而减少用户可以使用的最大允许带宽。

注意

减少可用带宽可能会影响应用程序可用性。

在管理控制台中,转至 "User Profiles"(用户配置文件)选项卡,然后选择要配置的用户配置文件对象。转至 "Performance"(性能)选项卡,然后从 "Bandwidth Limit"(带宽限制)列表中选择一个值。

或者,也可以使用以下命令:

$ tarantella object edit --name obj --bandwidth bandwidth

以下是可用的带宽:

管理控制台

命令行

2400 bps

2400

4800 bps

4800

9600 bps

9600

14.4 Kbps

14400

19.2 Kbps

19200

28.8 Kbps

28800

33.6 Kbps

33600

38.8 Kbps

38800

57.6 Kbps

57600

64 Kbps

64000

128 Kbps

128000

256 Kbps

256000

512 Kbps

512000

768 Kbps

768000

1 Mbps

1000000

1.5 Mbps

1500000

10 Mbps

10000000

None(无)

0

注意

默认值是 "None"(无)。这表示对带宽使用没有限制。

7.7.5. 用户无法连接到处于防火墙穿越模式的 SGD 服务器

如果用户无法连接到处于防火墙穿越模式的 SGD 服务器,这通常是因为在 SGD Web 服务器之前启动 SGD 服务器而导致的。

在防火墙穿越模式中,SGD 服务器侦听端口 443 并将任何 Web 连接转发到配置为侦听 localhost 端口 443 (127.0.0.1:443) 的 SGD Web 服务器。

如果在 SGD Web 服务器之前启动 SGD 服务器,SGD 服务器将绑定到所有可用的接口,这意味着 SGD 服务器会无限循环地将任何 Web 连接转发到自身。

一种解决方法是始终在 SGD 服务器之前启动 SGD Web 服务器。如果使用 tarantella start 命令,SGD 服务器和 Web 服务器将始终会以正确的顺序启动。

另一种解决方法是对 SGD 进行配置,以使其永远不会绑定到 localhost 接口。要执行此操作,请使用以下命令:

$ tarantella config edit \
--tarantella-config-server-bindaddresses-external "!127.0.0.1"
注意

在某些 shell 上,您无法使用直引号 "!127.0.0.1",因为 !127 可能会被替代。请改用单直引号 '!127.0.0.1'

另外,还可以使用此命令确切指定 SGD 要绑定到的接口。可通过键入以逗号分隔的 DNS 名称或 IP 地址列表来执行此操作。

有关在防火墙穿越模式下运行 SGD 的更多详细信息,请参见第 1.5.2 节 “防火墙穿越”

7.7.6. 用户无法重新定位其会话

用户未从一台 SGD 服务器注销就登录到另一台时,用户会话通常会重新定位到新服务器。这有时称为会话转移或会话抓取。

如果阵列中所有 SGD 服务器上的时钟不同步,则用户会话的重新定位可能不会成功。

SGD 使用用户会话上的时间戳来确定哪个会话较新。较新的用户会话被视为当前会话。如果时钟不同步,时间戳可能会提供误导性信息。

由于时间同步非常重要,因此请使用网络时间协议 (Network Time Protocol, NTP) 软件来同步时钟。或者,使用 rdate 命令。

有关 SGD 中用户会话的更多信息,另请参见第 7.4.2 节 “用户会话和应用程序会话”