Skip to main content

ノード適格性サービスを使用したクラスター ノードの正常性の監視

GitHub Enterprise Server クラスター内のノードが、Node Eligibility Service を使用して問題を引き起こすのに十分な時間オフラインになっている場合を監視できます。

この機能を使用できるユーザーについて

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 は Time To Live (TTL) 期間と比較されます。

各ノードには正常性状態と適格性の状態があります。

  • 正常性とは、クラスター内のノードのアクセシビリティを指し、 healthywarning、および critical の 3 つの状態が考えられます。
  • 適格性とは、ノードがクラスター内で動作する機能を指し、eligibleineligible の 2 つの状態が考えられます。

Node Eligibility Service には、 warnfail の 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 を有効にできます。

  1. お使いの GitHub Enterprise Server インスタンス に接続するには、クラスターのいずれかのノードに SSH 接続します。 ワークステーションから、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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. 構成を適用するには、次のコマンドを実行します。

    : 構成の実行中に、お使いの GitHub Enterprise Server インスタンス 上のサービスが再起動する可能性があり、これによりユーザーに短時間のダウンタイムが発生する場合があります。

    Shell
    ghe-config-apply
    
  5. 設定の実行が完了するのを待ってください。

  6. Node Eligibility Service が実行されていることを確認するには、任意のノードから次のコマンドを実行します。

    Shell
    nomad status nes
    

GitHub Copilot の TTL 設定を構成する

Node Eligibility Service がどのように通知するかを決定するには、fail および warn の状態の TTL 設定を構成できます。 fail ステートの TTL は、warn 状態スの TTL よりも大きくなければなりません。

  1. お使いの GitHub Enterprise Server インスタンス に接続するには、クラスターのいずれかのノードに SSH 接続します。 ワークステーションから、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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 は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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 を実行します。
  • [Management Console] の [状態] ページに移動します。 詳しくは、「管理コンソールへのアクセス」を参照してください。

不適格ノードを再び有効にしてクラスターに参加させる

Node Eligibility Service がノードが fail 状態の TTL を超えたことを検出した後、サービスがノードを ineligible としてマークすると、サービスはノードの正常性ステータスを更新しなくなります。 ノードを再度有効にしてクラスターに参加するには、ノードから ineligible 状態を削除します。

  1. お使いの GitHub Enterprise Server インスタンス に接続するには、クラスターのいずれかのノードに SSH 接続します。 ワークステーションから、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (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 Support へのデータの提供」を参照してください。

  1. お使いの GitHub Enterprise Server インスタンス に接続するには、クラスターのいずれかのノードに SSH 接続します。 ワークステーションから、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 詳しくは、「管理シェル (SSH) にアクセスする」を参照してください。

    Shell
    ssh -p 122 admin@HOSTNAME
    
  2. クラスター内の任意のノードから Node Eligibility Service のログを表示するには、次のコマンドを実行します。

    Shell
    nomad alloc logs -job nes
    
  3. または、サービスを実行するノード上の 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"
      
    • ノードのログを表示するには、SSH 経由でノードに接続し、次のコマンドを実行します。

      Shell
      journalctl -t nes
      

参考資料