2.3. 正常暂停和关闭 JBoss EAP


JBoss EAP 可以安全暂停或关闭。这允许活动请求正常完成,而无需接受任何新请求。超时值指定挂起或关闭操作将等待活跃请求完成的时间。在服务器暂停期间,管理请求仍然被处理。

暂停和正常关闭在服务器范围内协调,专注于进入服务器的入口点。以下子系统支持挂起和安全关闭:

Undertow
undertow 子系统将等待所有请求完成。
mod_cluster
modcluster 子系统将通知负载均衡器,服务器在 PRE_SUSPEND 阶段暂停。
Jakarta Enterprise Beans
ejb3 子系统将等待所有远程会话 Bean 请求,以及要完成的 MDB 消息发送者。在 PRE_SUSPEND 阶段停止到 MDB。Jakarta Enterprise Bean 计时器被暂停,服务器恢复时将激活丢失的计时器。
Transactions

暂停后,服务器将不会接受新的请求,但动态事务和请求可以继续,直到它们完成或超时期限到期。例如,服务器将在暂停服务器上接受与活动事务相关的传入远程调用。

这也适用于与 XTS 事务关联的 Web 服务请求。

如果您在安全关闭前启动事务,且失败(例如,必要的数据库不可用),则事务不会自动恢复,因为安全关闭操作可能无法正常恢复。您需要恢复 JBoss EAP 实例,以使用恢复管理器并完成失败的事务。

默认情况下,ejb3 子系统禁用事务安全关闭。如果您希望服务器在暂停前等待 Jakarta Enterprise Beans 相关事务完成,则必须启用事务安全关闭。例如:

/subsystem=ejb3:write-attribute(name=enable-graceful-txn-shutdown,value=true)

默认情况下禁用此行为,因为它可在安全关闭期间导致 Jakarta Enterprise Beans 客户端调用集群节点。在集群环境中,在事务 完成后 服务器会通知远程客户端,该节点不再可用于远程调用。如果客户端在此时间窗口(完成事务前)期间发送一个新请求,则该节点将拒绝请求。

jakarta Concurrency

服务器将等待所有活动作业完成。将跳过所有排队的作业。由于 Jakarta Concurrency 没有持久性,所有跳过的作业都会丢失。

当服务器处于暂停状态时,调度的任务将继续在其计划的时间执行,但会抛出 java.lang.IllegalStateException。服务器恢复后,调度的任务将继续正常执行,在大多数情况下,任务不需要重新排期。

batch
服务器将在超时时间内停止所有运行的作业,并延迟所有调度的作业。
注意

安全关闭目前不会拒绝新的入站 Jakarta 消息传递消息。目前,允许由动态活动调度的 Jakarta Batch 作业和 Jakarta Concurrency 任务进行;但是,在执行时提交的 Jakarta Concurrency 任务会传递超时窗口当前错误。

请求由 request-controller 子系统跟踪。如果没有此子系统,暂停和恢复功能会有限,服务器不会在挂起或关闭前等待请求完成。如果不需要此功能,您可以删除 request-controller 子系统以提高性能。

2.3.1. 挂起服务器

JBoss EAP 8.0 提供了一个 挂起 模式,可以安全地暂停服务器操作。这允许所有活跃的请求正常完成,但不接受任何新请求。服务器暂停后,可以将其关闭、返回到运行状态,或者处于暂停状态来执行维护。

注意

通过挂起服务器,管理接口不会受到影响。

可以使用管理控制台或管理 CLI 暂停服务器并恢复。

检查服务器挂起状态

可使用以下管理 CLI 命令查看服务器暂停状态:生成的值将是 RUNNINGPRE_SUSPENDSUSPENDINGSUSPENDED 之一。

  • 检查单机服务器的挂起状态。

    :read-attribute(name=suspend-state)
  • 检查受管域中服务器的挂起状态。

    /host=primary/server=server-one:read-attribute(name=suspend-state)

suspend

使用以下管理 CLI 命令暂停服务器,指定超时值(以秒为单位),以便服务器等待活动请求完成。默认值为 0, 它将立即暂停。值 -1 将导致服务器无限期等待所有活动请求完成。

在暂停前,每个示例最多等待 60 秒以便请求完成。

  • 暂停单机服务器。

    :suspend(suspend-timeout=60)
  • 暂停受管域中的所有服务器。

    :suspend-servers(suspend-timeout=60)
  • 在受管域中暂停单个服务器。

    /host=primary/server-config=server-one:suspend(suspend-timeout=60)
  • 暂停服务器组中的所有服务器。

    /server-group=main-server-group:suspend-servers(suspend-timeout=60)
  • 挂起由特定主机控制器管理的所有服务器。

    /host=primary:suspend-servers(suspend-timeout=60)

resume

resume 命令将服务器返回到正常的运行状态,以接受新请求。您可以在主机、服务器、服务器组或域级别上启动该命令。例如:

:resume

以 Suspended 状态启动服务器

您可以以暂停状态启动服务器,以便服务器不会接受任何请求,直到恢复为止。

  • 若要以暂停状态启动单机服务器,可在启动 JBoss EAP 实例时使用 --start-mode=suspend 运行时参数。

    $ EAP_HOME/bin/standalone.sh --start-mode=suspend
  • 要以暂停状态启动受管域服务器,请将 start-mode=suspend 参数传递给管理 CLI 命令的 start 操作。

    /host=HOST_NAME/server-config=SERVER_NAME:start(start-mode=suspend)
    注意

    您还可以将 start-mode 参数传递给服务器的 重新加载 和重启操作。

  • 要启动受管域服务器组中处于暂停状态的所有服务器,请将 start-mode=suspend 参数传递给管理 CLI 命令的 start-servers 操作。

    /server-group=SERVER_GROUP_NAME:start-servers(start-mode=suspend)
    注意

    您还可以将 start-mode 参数传递给服务器组的 reload-serversrestart-servers 操作。

2.3.2. 使用管理 CLI 安全地关闭服务器

如果在停止服务器时指定了适当的超时值,则服务器将正常关闭。发出命令后,服务器将暂停,并在关闭前等待所有请求结束的指定超时。

使用以下管理 CLI 命令,安全地关闭服务器:指定超时值(以秒为单位)用于等待活跃请求完成。默认值为 0, 它会立即关闭服务器。值 -1 将导致服务器在关闭前无限期等待所有活动请求完成。

在关闭前,每个示例最多等待 60 秒才能完成请求。

  • 正常关闭单机服务器。

    shutdown --suspend-timeout=60
  • 正常停止受管域中的所有服务器。

    :stop-servers(suspend-timeout=60)
  • 安全地停止受管域中的单个服务器。

    /host=primary/server-config=server-one:stop(suspend-timeout=60)
  • 正常停止服务器组中的所有服务器。

    /server-group=main-server-group:stop-servers(suspend-timeout=60)
  • 关闭主机控制器及其管理的所有服务器。

    /host=primary:shutdown(suspend-timeout=60)

suspend-timeout 属性仅应用到由主机控制器管理的服务器,而非主机控制器本身。

使用操作系统信号安全地关闭服务器

可以通过设置 org.wildfly.sigterm.suspend.timeout 系统属性,然后发送 OS TERM 信号(如 kill -15 PID )来安全地关闭服务器。默认情况下,此行为与管理 CLI 的 shutdown --suspend-timeout=0 命令相同,从而立即终止任何当前处理请求。超时可由 org.wildfly.sigterm.suspend.timeout 系统属性配置,指示在服务器关闭前等待请求完成的最大秒数。值 -1 表示服务器将无限期等待。

重要

在受管域中,不应使用 OS 信号来关闭服务器。相反,服务器应使用 管理 CLI 或管理控制台,通过管理主机控制器来关闭

如果 JVM 配置为禁用信号处理,如将 -Xrs java 参数传递给 JVM 选项,或者发送信号不是进程可以响应的信号,如如果发送了 KILL 信号,则使用 OS 信号进行正常关闭将不起作用,例如如果发送了 KILL 信号。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.