4.15. 配置代理健康检查


您可以使用启动、存活度和就绪度探测在 AMQ Broker 上配置健康检查。

  • 启动探测(startup probe)指示容器内的应用程序是否启动。
  • 存活度探测决定容器是否仍然在运行。
  • 就绪度探测(Readiness probe)决定容器是否准备好接受服务请求

如果启动探测或存活度探测检查 Pod 失败,则探测会重启 Pod。

AMQ Broker 包括默认的就绪度和存活度探测。默认存活度探测通过 ping 代理的 HTTP 端口来检查代理是否在运行。默认就绪度探测通过打开到为代理配置的每个 acceptor 端口的连接来检查代理是否可以接受网络流量。

使用默认存活度和就绪度探测的一个限制是它们无法识别底层问题,例如代理的文件系统出现问题。您可以创建自定义存活度和就绪度探测,这些探测使用代理的命令行实用程序 artemis 来运行更全面的健康检查。

AMQ Broker 不包括默认启动探测。您可以在 ActiveMQArtemis 自定义资源(CR)中配置启动探测。

4.15.1. 配置启动探测

您可以配置启动探测来检查代理容器中的 AMQ Broker 应用程序是否已启动。

流程

  1. 编辑代理部署的 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift Container Platform。
      2. 编辑部署的 CR。

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift Container Platform。
      2. 在左侧窗格中,单击 menu: administration Resource Definitions]。
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 点代理部署的实例。
      6. YAML 标签。

        在控制台中,会打开 YAML 编辑器,允许您编辑 CR 实例。

  2. 在 CR 的 deploymentPlan 部分中,添加一个 startupProbe 部分。例如:

    spec:
      deploymentPlan:
        startupProbe:
          exec:
            command:
              - /bin/bash
              - '-c'
              - /opt/amq/bin/artemis
              - 'check'
              - 'node'
              - '--up'
              - '--url'
              - 'tcp://$HOSTNAME:61616'
          initialDelaySeconds: 5
          periodSeconds: 10
          timeoutSeconds: 3
          failureThreshold: 30
    命令
    要在容器中运行的启动探测命令。在示例中,启动探测使用 artemis check node 命令来验证 AMQ Broker 是否已在容器中为代理 Pod 启动。
    initialDelaySeconds
    探测在容器启动后运行前的延迟(以秒为单位)。默认值为 0
    periodSeconds
    探测运行的时间间隔(以秒为单位)。默认值为 10
    timeoutSeconds
    启动 probe 命令等待代理回复的时间(以秒为单位)。如果未收到对 命令的响应,则命令将终止。默认值为 1
    failureThreshold

    连续的最小失败(包括超时)后探测被认为是失败的启动探测。当探测被认为有失败时,它会重启 Pod。默认值为 3

    根据集群的资源和代理日志大小,您可能需要增加故障阈值,以允许代理有足够的时间启动并通过探测检查。否则,代理会进入一个循环条件,在一个循环条件中重复达到失败阈值,并且代理在每次启动探测时都会重启。例如,如果您将 failureThreshold 设置为 30,且探测以默认间隔 10 秒运行,代理有 300 秒才能启动并传递探测检查。

  3. 保存 CR。

4.15.2. 配置存活度和就绪度探测

以下示例演示了如何为代理部署配置主自定义资源(CR)实例,以使用存活度和就绪度探测运行健康检查。

先决条件

流程

  1. 编辑代理部署的 CR 实例。

    1. 使用 OpenShift 命令行界面:

      1. 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift Container Platform。
      2. 编辑部署的 CR。

         oc edit ActiveMQArtemis <CR instance name> -n <namespace>
    2. 使用 OpenShift Container Platform Web 控制台:

      1. 以有权在代理部署的项目中部署 CR 的用户身份登录 OpenShift Container Platform。
      2. 在左侧窗格中,单击 menu: administration Resource Definitions]。
      3. 单击 ActiveMQArtemis CRD。
      4. 实例 选项卡。
      5. 点代理部署的实例。
      6. YAML 标签。
  2. 要配置存活度探测,请在 CR 的 deploymentPlan 部分中添加 livenessProbe 部分。例如:

    spec:
      deploymentPlan:
        livenessProbe:
          initialDelaySeconds: 5
          periodSeconds: 5
          failureThreshold: 30
    initialDelaySeconds

    探测在容器启动后运行前的延迟(以秒为单位)。默认值为 5

    注意

    如果部署也配置了启动探测,您可以将存活度和就绪度探测的延迟设置为 0。这两个探测仅在启动探测通过后运行。如果启动探测已通过,它会确认代理已成功启动,因此不需要运行存活度和就绪度探测时出现延迟。

    periodSeconds
    探测运行的时间间隔(以秒为单位)。默认值为 5
    failureThreshold

    表示探测的存活度探测的最小连续故障(包括超时)失败。当探测失败时,它会重启 Pod。默认值为 3。

    如果您的部署没有配置启动探测,它会验证代理应用程序是否在存活度探测运行前启动,您可能需要提高故障阈值,以允许代理启动并传递存活度探测检查。否则,代理可以进入一个循环条件,在一个循环条件中重复达到失败阈值,并且代理 Pod 在每次存活度探测时都会重启。

    代理启动和传递存活度探测检查所需的时间取决于集群的资源以及代理日志的大小。例如,如果您将 failureThreshold 设置为 30,并且探测以默认间隔 5 秒运行,代理有 150 秒才能启动并传递存活度探测检查。

    注意

    如果您没有配置存活度探测,或者如果配置的探测中没有处理器,AMQ Broker Operator 会创建一个具有以下配置的默认 TCP 探测。默认 TCP 探测尝试向指定端口上代理容器打开一个套接字。

    spec:
      deploymentPlan:
        livenessProbe:
          tcpSocket:
            port: 8181
          initialDelaySeconds: 30
          timeoutSeconds: 5
  3. 要配置就绪度探测,请在 CR 的 deploymentPlan 部分中添加一个 readinessProbe 部分。例如:

    spec:
      deploymentPlan:
        readinessProbe:
          initialDelaySeconds: 5
          periodSeconds: 5

    如果您没有配置就绪度探测,则内置 脚本会 检查所有接受者是否可以接受连接。

  4. 如果要配置更全面的健康检查,请将 artemis check 命令行工具添加到存活度或就绪度探测配置中。

    1. 如果要配置健康检查来创建与代理的完整客户端连接,请在 livenessProbereadinessProbe 部分中添加 exec 部分。在 exec 部分中,添加一个 command 部分。在 command 部分中,添加 artemis check node 命令语法。例如:

      spec:
        deploymentPlan:
          readinessProbe:
            exec:
              command:
                - bash
                - '-c'
                - /home/jboss/amq-broker/bin/artemis
                - check
                - node
                - '--silent'
                - '--acceptor'
                - <acceptor name>
                - '--user'
                - $AMQ_USER
                - '--password'
                - $AMQ_PASSWORD
            initialDelaySeconds: 30
            timeoutSeconds: 5

      默认情况下,artemis check node 命令使用名为 artemis 的 acceptor 的 URI。如果代理具有名为 artemis 的接收器,您可以从命令中排除 the- acceptor <acceptor name& gt; 选项。

      注意

      $AMQ_USER$AMQ_PASSWORD 是 AMQ Operator 配置的环境变量。

    2. 如果要配置生成和使用消息的健康检查,这也会在 livenessProbereadinessProbe 部分中验证代理文件系统的健康状况,请添加 exec 部分。在 exec 部分中,添加一个 command 部分。在 command 部分中,添加 artemis check queue 命令语法。例如:

      spec:
        deploymentPlan:
          readinessProbe:
            exec:
              command:
                - bash
                - '-c'
                - /home/jboss/amq-broker/bin/artemis
                - check
                - queue
                - '--name'
                - livenessqueue
                - '--produce'
                - "1"
                - '--consume'
                - "1"
                - '--silent'
                - '--user'
                - $AMQ_USER
                - '--password'
                - $AMQ_PASSWORD
            initialDelaySeconds: 30
            timeoutSeconds: 5
      注意

      您指定的队列名称必须在代理上配置,且 anycastroutingType。例如:

      apiVersion: broker.amq.io/v1beta1
      kind: ActiveMQArtemisAddress
      metadata:
        name: livenessqueue
        namespace: activemq-artemis-operator
      spec:
        addressName: livenessqueue
        queueConfiguration:
          purgeOnNoConsumers: false
          maxConsumers: -1
          durable: true
          enabled: true
        queueName: livenessqueue
        routingType: anycast
  5. 保存 CR。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部