关于 Node Eligibility Service
GitHub Enterprise Server在群集中,由于硬件或软件故障,其他节点可能无法访问单个节点。 即使后来还原了节点的运行状况,后续数据同步也会对实例的性能产生负面影响。
可以通过使用 Node Eligibility Service来主动缓解节点可用性降低的影响。 此服务监视群集节点的状态,如果有节点脱机时间过长,则发出警告。 还可以阻止脱机节点重新加入群集。 (可选)可以允许 Node Eligibility Service 使不符合资格的节点脱机。
默认情况下, Node Eligibility Service 处于禁用状态。 如果启用Node Eligibility Service,实例将通过在管理 Web UI GitHub Enterprise Server中显示横幅以及某些群集相关实用工具的 CLI 输出(例如和ghe-cluster-diagnostics)ghe-config-apply来提醒不正常的节点。
Node Eligibility Service 允许监视单个节点的运行状况。 也可监视群集的整体运行状况。 有关详细信息,请参阅“监视群集的健康状况”。
关于群集节点的运行状况和可用性
若要确定是发出警告还是自动调整群集的配置, Node Eligibility Service 请持续监视每个节点的运行状况。 每个节点定期报告时间戳运行状况状态,与 Node Eligibility Service 生存时间(TTL)持续时间进行比较。
每个节点都有一个健康状态和一个资格状态。
- 健康状态是指群集中节点的可访问性,并具有三种可能的状态:
healthy、warning或critical。 - 资格是指节点在群集中工作的能力,并且有两种可能的状态:
eligible或ineligible。
Node Eligibility Service为两种状态提供可配置的 TTL 设置, warn``fail
warn:节点已脱机一小段时间。 这可能表示节点出现问题,管理员应进行调查。 默认设置为 15 分钟。fail:节点已脱机很长时间,重新引入群集可能会引起重新同步导致的性能问题。 默认设置为 60 分钟。
对于每个节点, Node Eligibility Service 可通过以下方式确定参与群集的运行状况和资格。
- 如果观察到节点是正常运行的,则运行状况状态为
healthy,资格状态为eligible。 - 如果某节点在超过
warnTTL 的时间内没有被观察到是健康的,则健康状态为warning且资格状态为eligible。 - 如果观察到节点没有正常运行且时间超过
failTTL,则运行状况状态为critical且资格状态为ineligible。
Node Eligibility Service为群集启用
默认情况下, Node Eligibility Service 处于禁用状态。 可以通过设置使用ghe-config的值来app.nes.enabled启用 Node Eligibility Service 。
-
若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME -
若要验证当前是否 Node Eligibility Service 已启用,请运行以下命令。
Shell ghe-config app.nes.enabled
ghe-config app.nes.enabled -
若要启用 Node Eligibility Service,请运行以下命令。
Shell ghe-config app.nes.enabled true
ghe-config app.nes.enabled true -
若要应用配置,请运行以下命令。
注意
在配置运行过程中,你的 GitHub Enterprise Server 实例 上的服务可能会重启,这可能会导致用户短暂停机。
Shell ghe-config-apply
ghe-config-apply -
等待配置运行完毕。
-
若要验证是否 Node Eligibility Service 正在运行,请从任何节点运行以下命令。
Shell nomad status nes
nomad status nes
为 配置 TTL 设置 Node Eligibility Service
若要确定如何 Node Eligibility Service 通知你,可以配置 fail TTL 设置和 warn 状态。
fail 状态的 TTL 必须大于 warn 状态的 TTL。
-
若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME -
若要验证当前的 TTL 设置,请运行以下命令。
Shell nes get-node-ttl all
nes get-node-ttl all -
若要设置
fail状态的 TTL,请运行以下命令。 将 MINUTES 替换为用于失败状态的分钟数。Shell nes set-node-ttl fail MINUTES
nes set-node-ttl fail MINUTES -
若要设置
warn状态的 TTL,请运行以下命令。 将 MINUTES 替换为用于警告状态的分钟数。Shell nes set-node-ttl warn MINUTES
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 则无法使节点脱机。
-
若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME -
若要配置是否可以 Node Eligibility Service 使节点脱机,请运行以下命令之一。
-
若要允许服务在节点脱机时自动执行管理操作,请运行以下命令。 将 HOSTNAME 替换为节点的主机名。
Shell nes set-node-adminaction approved HOSTNAME
nes set-node-adminaction approved HOSTNAME -
若要撤销 Node Eligibility Service使节点脱机的能力,请运行以下命令。 将 HOSTNAME 替换为节点的主机名。
Shell nes set-node-adminaction none HOSTNAME
nes set-node-adminaction none HOSTNAME
-
查看节点运行状况概述
若要查看节点运行状况 Node Eligibility Service的概述,请使用以下方法之一。
- 通过 SSH 连接到群集中的任一节点,然后运行
nes get-cluster-health。 - 导航到 管理控制台“状态”页。 有关详细信息,请参阅“访问管理控制台”。
重新启用不合格的节点以加入群集
检测到某个节点已超出状态的 TTL,服务将节点ineligible标记为“TTLfail”后Node Eligibility Service,服务将不再更新节点的运行状况。 若要重新启用节点以加入群集,可以删除节点中的 ineligible 状态。
-
若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME -
若要检查节点的当前
adminaction状态,请运行以下命令。 将 HOSTNAME 替换为不合格节点的主机名。Shell nes get-node-adminaction HOSTNAME
nes get-node-adminaction HOSTNAME -
如果
adminaction状态当前设置为approved,请运行以下命令,将该状态更改为none。 将 HOSTNAME 替换为不合格节点的主机名。Shell nes set-node-adminaction none HOSTNAME
nes set-node-adminaction none HOSTNAME -
若要确保节点处于正常运行状态,请运行以下命令并确认节点的状态为
ready。Shell nomad node status
nomad node status-
如果节点的状态为
ineligible,则通过 SSH 连接到节点并运行以下命令可以使节点符合条件。Shell nomad node eligibility -enable -self
nomad node eligibility -enable -self
-
-
若要更新节点的资格 Node Eligibility Service,请运行以下命令。 将 HOSTNAME 替换为节点的主机名。
Shell nes set-node-eligibility eligible HOSTNAME
nes set-node-eligibility eligible HOSTNAME -
等待 30 秒,然后运行以下命令来检查群集的运行状况以确认目标节点是合格的。
Shell nes get-cluster-health
nes get-cluster-health
查看 <a0/&a0> 的日志
可以从群集中的任何节点或运行服务的节点查看日志 Node Eligibility Service 。 如果生成支持包,则会包含这些日志。 有关详细信息,请参阅“向GitHub支持提供数据”。
-
若要连接到 你的 GitHub Enterprise Server 实例,请通过 SSH 连接到群集的任何节点。 在工作站中运行以下命令。 将 HOSTNAME 替换为节点的主机名。 有关详细信息,请参阅“访问管理 shell (SSH)”。
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME -
若要查看群集中任何节点的日志 Node Eligibility Service ,请运行以下命令。
Shell nomad alloc logs -job nes
nomad alloc logs -job nes -
或者,可以查看运行服务的节点上的日志 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"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
journalctl -t nes
-