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です。 - ノードが
warningTTL を超えて健全であることが観察されなかった場合、健全性状態はeligible、適格性状態はwarnになります。 - ノードが
failTTL を超えて健全であることが観察されなかった場合、健全性状態は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 -
構成を適用するには、次のコマンドを実行します。
メモ
構成の実行中に、お使いの 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
-