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 は Time To Live (TTL) 期間と比較されます。
各ノードには正常性状態と適格性の状態があります。
- 正常性とは、クラスター内のノードのアクセシビリティを指し、
healthy
、warning
、およびcritical
の 3 つの状態が考えられます。 - 適格性とは、ノードがクラスター内で動作する機能を指し、
eligible
とineligible
の 2 つの状態が考えられます。
Node Eligibility Service には、 warn
と fail
の 2 つの状態に対して構成可能な TTL 設定が用意されています。
warn
: ノードが短時間オフラインになっています。 これは、ノードに問題があり、管理者が調査する必要があることを示している可能性があります。 既定値は 15 分です。fail
: ノードが長時間オフラインになっており、クラスターに再導入すると、再同期が原因でパフォーマンスの問題が発生する可能性があります。 既定値は 60 分です。
各ノードについて、Node Eligibility Service は次の方法でクラスターへの参加についての正常性と適格性を決定します。
- ノードが正常であることが確認された場合、正常性状態は
healthy
、適格性の状態はeligible
です。 - ノードが
warning
TTL を超えて健全であることが観察されなかった場合、健全性状態はeligible
、適格性状態はwarn
になります。 - ノードが
fail
TTL を超えて健全であることが観察されなかった場合、健全性状態はcritical
で、その適格性状態はineligible
になります。
クラスターの Node Eligibility Service を有効にする
既定では、Node Eligibility Service は無効になっています。 ghe-config
を使用して app.nes.enabled
の値を設定することで、Node Eligibility Service を有効にできます。
-
お使いの GitHub Enterprise Server インスタンス に接続するには、クラスターのいずれかのノードに SSH 接続します。 ワークステーションから、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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
-
構成を適用するには、次のコマンドを実行します。
Note
構成の実行中に、お使いの GitHub Enterprise Server インスタンス 上のサービスが再起動する可能性があり、これによりユーザーに短時間のダウンタイムが発生する場合があります。
Shell ghe-config-apply
ghe-config-apply
-
設定の実行が完了するのを待ってください。
-
Node Eligibility Service が実行されていることを確認するには、任意のノードから次のコマンドを実行します。
Shell nomad status nes
nomad status nes
GitHub Copilot の TTL 設定を構成する
Node Eligibility Service がどのように通知するかを決定するには、fail
および warn
の状態の TTL 設定を構成できます。 fail
ステートの TTL は、warn
状態スの TTL よりも大きくなければなりません。
-
お使いの GitHub Enterprise Server インスタンス に接続するには、クラスターのいずれかのノードに SSH 接続します。 ワークステーションから、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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 は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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
を実行します。 - [Management Console] の [状態] ページに移動します。 詳しくは、「管理コンソールへのアクセス」をご覧ください。
不適格ノードを再び有効にしてクラスターに参加させる
Node Eligibility Service がノードが fail
状態の TTL を超えたことを検出した後、サービスがノードを ineligible
としてマークすると、サービスはノードの正常性ステータスを更新しなくなります。 ノードを再度有効にしてクラスターに参加するには、ノードから ineligible
状態を削除します。
-
お使いの GitHub Enterprise Server インスタンス に接続するには、クラスターのいずれかのノードに SSH 接続します。 ワークステーションから、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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 Support へのデータの提供」をご覧ください。
-
お使いの GitHub Enterprise Server インスタンス に接続するには、クラスターのいずれかのノードに SSH 接続します。 ワークステーションから、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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 のログを表示することもできます。 このサービスは、システムジャーナルにログを書き込みます。
-
どのノードが 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
-