关于 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-apply
和 ghe-cluster-diagnostics
)的 CLI 输出中显示横幅来提醒你节点运行不正常。
使用 Node Eligibility Service,可以监视各个节点的运行状况。 也可监视群集的整体运行状况。 有关详细信息,请参阅“监视群集的运行状况”。
关于群集节点的运行状况和资格
为了确定是发出警告还是自动调整群集配置,Node Eligibility Service 会持续监视每个节点的运行状况。 每个节点定期报告带时间戳的运行状况状态,将 Node Eligibility Service 与生存时间 (TTL) 持续时间进行比较。
每个节点都有一个运行状况状态和一个资格状态。
- 运行状况是指群集中节点的可访问性,并具有三种可能的状态:
healthy
、warning
或critical
。 - 资格是指节点在群集中工作的能力,并且有两种可能的状态:
eligible
或ineligible
。
Node Eligibility Service 提供可配置为 warn
和 fail
两种状态的 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。
-
若要连接到 你的 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
配置 Node Eligibility Service 的 TTL 设置
若要确定 Node Eligibility Service 向你发出通知的方式,可以配置 fail
和 warn
状态的 TTL 设置。 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
。 - 导航到 管理控制台 的“状态”页面。 有关详细信息,请参阅“访问管理控制台”。
重新启用不合格的节点以加入群集
在 Node Eligibility Service 检测到某个节点超过 fail
状态的 TTL 之后,以及服务将节点标记为 ineligible
之后,服务将不再更新该节点的运行状况状态。 若要重新启用节点以加入群集,可以删除节点中的 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
查看 Node Eligibility Service 的日志
可以通过群集中的任何节点或运行服务的节点查看 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
-
延伸阅读
- “命令行实用程序”