Skip to main content

此版本的 GitHub Enterprise Server 已于以下日期停止服务 2024-09-25. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

使用节点资格服务监视群集节点的运行状况

使用 Node Eligibility Service,可以监视 GitHub Enterprise Server 群集中因脱机时间过长而导致问题的节点。

谁可以使用此功能?

People with administrative SSH access to a GitHub Enterprise Server instance can monitor cluster nodes.

GitHub 确定聚类分析的资格,并且必须为实例的许可证启用配置。 聚类分析需要仔细规划和额外的管理开销。 有关详细信息,请参阅“关于集群”。

关于 Node Eligibility Service

在 GitHub Enterprise Server 群集中,由于硬件或软件故障,其他节点可能无法访问单个节点。 即使后来还原了节点的运行状况,后续数据同步也会对实例的性能产生负面影响。

可以使用 Node Eligibility Service 主动缓解节点可用性降低的影响。 此服务监视群集节点的状态,如果有节点脱机时间过长,则发出警告。 还可以阻止脱机节点重新加入群集。 (可选)可以允许 Node Eligibility Service 使不合格的节点脱机。

Node Eligibility Service 默认为禁用状态。 如果启用 Node Eligibility Service,实例将通过在 GitHub Enterprise Server 的管理 Web UI 中以及某些与群集相关的实用工具(如 ghe-config-applyghe-cluster-diagnostics)的 CLI 输出中显示横幅来提醒你节点运行不正常。

使用 Node Eligibility Service,可以监视各个节点的运行状况。 也可监视群集的整体运行状况。 有关详细信息,请参阅“监视群集的运行状况”。

关于群集节点的运行状况和资格

为了确定是发出警告还是自动调整群集配置,Node Eligibility Service 会持续监视每个节点的运行状况。 每个节点定期报告带时间戳的运行状况状态,将 Node Eligibility Service 与生存时间 (TTL) 持续时间进行比较。

每个节点都有一个运行状况状态和一个资格状态。

  • 运行状况是指群集中节点的可访问性,并具有三种可能的状态:healthywarningcritical
  • 资格是指节点在群集中工作的能力,并且有两种可能的状态:eligibleineligible

Node Eligibility Service 提供可配置为 warnfail 两种状态的 TTL 设置。

  • warn:节点已脱机一小段时间。 这可能表示节点出现问题,管理员应进行调查。 默认设置为 15 分钟。
  • fail:节点已脱机很长时间,重新引入群集可能会引起重新同步导致的性能问题。 默认设置为 60 分钟。

对于每个节点,Node Eligibility Service 通过以下方式确定运行状况和参与群集的资格。

  • 如果观察到节点是正常运行的,则运行状况状态为 healthy,资格状态为 eligible
  • 如果观察到节点没有正常运行且时间超过 warn TTL,则运行状况状态为 warning 且资格状态为 eligible
  • 如果观察到节点没有正常运行且时间超过 fail TTL,则运行状况状态为 critical 且资格状态为 ineligible

为群集启用 Node Eligibility Service

Node Eligibility Service 默认为禁用状态。 可以通过使用 ghe-config 设置 app.nes.enabled 值来启用 Node Eligibility Service。

  1. 若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. 若要验证当前是否已启用 Node Eligibility Service,请运行以下命令。

    Shell
    ghe-config app.nes.enabled
    
  3. 若要启用 Node Eligibility Service,请运行以下命令。

    Shell
    ghe-config app.nes.enabled true
    
  4. 若要应用配置,请运行以下命令。

    Note

    在配置运行过程中,你的 GitHub Enterprise Server 实例 上的服务可能会重启,这可能会导致用户短暂停机。

    Shell
    ghe-config-apply
    
  5. 等待配置运行完毕。

  6. 若要验证 Node Eligibility Service 是否正在运行,请从任一节点运行以下命令。

    Shell
    nomad status nes
    

配置 Node Eligibility Service 的 TTL 设置

若要确定 Node Eligibility Service 向你发出通知的方式,可以配置 failwarn 状态的 TTL 设置。 fail 状态的 TTL 必须大于 warn 状态的 TTL。

  1. 若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. 若要验证当前的 TTL 设置,请运行以下命令。

    Shell
    nes get-node-ttl all
    
  3. 若要设置 fail 状态的 TTL,请运行以下命令。 将 MINUTES 替换为用于失败状态的分钟数。

    Shell
    nes set-node-ttl fail MINUTES
    
  4. 若要设置 warn 状态的 TTL,请运行以下命令。 将 MINUTES 替换为用于警告状态的分钟数。

    Shell
    nes set-node-ttl warn MINUTES
    

管理 Node Eligibility Service 是否可以使节点脱机

默认情况下,Node Eligibility Service 会发出警报,以通知你群集节点的运行状况发生更改。 (可选)如果服务确定不正常的节点没有资格重新加入群集,则可以允许该服务使节点脱机。

当节点脱机时,实例会从节点中删除作业分配。 如果节点运行数据存储服务,Node Eligibility Service 会更新配置,以反映节点重新加入群集的资格。

若要管理 Node Eligibility Service 是否可以使节点及其服务脱机,可以配置节点的 adminaction 状态。 如果节点处于 approved 状态,Node Eligibility Service 可以将节点脱机。 如果节点处于 none 状态,Node Eligibility Service 不能将节点脱机。

  1. 若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. 若要配置 Node Eligibility Service 是否可以使节点脱机,请运行以下命令之一。

    • 若要允许服务在节点脱机时自动执行管理操作,请运行以下命令。 将 HOSTNAME 替换为节点的主机名。

      Shell
      nes set-node-adminaction approved HOSTNAME
      
    • 若要撤销 Node Eligibility Service 使节点脱机的能力,请运行以下命令。 将 HOSTNAME 替换为节点的主机名。

      Shell
      nes set-node-adminaction none HOSTNAME
      

查看节点运行状况概述

若要使用 Node Eligibility Service 查看节点运行状况的概述,请使用以下方法之一。

  • 通过 SSH 连接到群集中的任一节点,然后运行 nes get-cluster-health
  • 导航到 管理控制台 的“状态”页面。 有关详细信息,请参阅“访问管理控制台”。

重新启用不合格的节点以加入群集

在 Node Eligibility Service 检测到某个节点超过 fail 状态的 TTL 之后,以及服务将节点标记为 ineligible 之后,服务将不再更新该节点的运行状况状态。 若要重新启用节点以加入群集,可以删除节点中的 ineligible 状态。

  1. 若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. 若要检查节点的当前 adminaction 状态,请运行以下命令。 将 HOSTNAME 替换为不合格节点的主机名。

    Shell
    nes get-node-adminaction HOSTNAME
    
  3. 如果 adminaction 状态当前设置为 approved,请运行以下命令,将该状态更改为 none。 将 HOSTNAME 替换为不合格节点的主机名。

    Shell
    nes set-node-adminaction none HOSTNAME
    
  4. 若要确保节点处于正常运行状态,请运行以下命令并确认节点的状态为 ready

    Shell
    nomad node status
    
    • 如果节点的状态为 ineligible,则通过 SSH 连接到节点并运行以下命令可以使节点符合条件。

      Shell
      nomad node eligibility -enable -self
      
  5. 若要在 Node Eligibility Service 中更新节点的资格,请运行以下命令。 将 HOSTNAME 替换为节点的主机名。

    Shell
    nes set-node-eligibility eligible HOSTNAME
    
  6. 等待 30 秒,然后运行以下命令来检查群集的运行状况以确认目标节点是合格的。

    Shell
    nes get-cluster-health
    

查看 Node Eligibility Service 的日志

可以通过群集中的任何节点或运行服务的节点查看 Node Eligibility Service 的日志。 如果生成支持捆绑包,则会包含日志。 有关详细信息,请参阅“向 GitHub 支持提供数据”。

  1. 若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. 要通过群集中的任何节点查看 Node Eligibility Service 的日志,请运行以下命令。

    Shell
    nomad alloc logs -job nes
    
  3. 或者,可以在运行服务的节点上查看 Node Eligibility Service 的日志。 服务会将日志写入 systemd 日志。

    • 若要确定哪个节点运行 Node Eligibility Service,请运行以下命令。

      Shell
      nomad job status "nes" | grep running | grep "${nomad_node_id}" | awk 'NR==2{ print $1 }' | xargs nomad alloc status | grep "Node Name"
      
    • 若要查看节点上的日志,请通过 SSH 连接到节点,然后运行以下命令。

      Shell
      journalctl -t nes
      

延伸阅读