Skip to main content

データ サービスを実行しているクラスター ノードの退避

GitHub Enterprise Serverクラスター内のノードが分散データを格納するサービスを実行している場合は、ノードのデータを退避させてノードを置き換える準備をするときに冗長性を確保できます。

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

GitHub はクラスタリングの適格性を決定し、インスタンスのライセンスの構成を有効にする必要があります。 クラスタリングには、慎重な計画と追加の管理オーバーヘッドが必要です。 詳しくは、「クラスタリングについて」を参照してください。

データ サービスを実行しているクラスター ノードの退避について

GitHub Enterprise Server のクラスター構成では、個々のノードをオフラインにする必要がある場合があります。 たとえば、ノードの仮想マシン (VM) を置き換える必要がある場合があります。 置き換えるノードがストレージ層で動作している場合、GitHub では、最初にノードのデータ サービスを退避させることをお勧めします。 退避により、残りのノードに予想されるデータの最小コピーが含まれるようにします。

GitHub Enterprise Server のノードとサービス レベルについて詳しくは、「クラスタノードについて」をご覧ください。

Warning

  • ノードの置き換え中にデータが失われるのを防ぐために、GitHub では、ノードをオフラインにする前に、ノード上の該当するデータ サービスを退避させることを強くお勧めします。
  • クラスター上のデータ サービスの冗長性を確保するには、少なくとも 3 つのノードにデータのコピーが存在する必要があります。 たとえば、4 つ以上のノードで Git データが格納される場合、退避中に、退避させたリポジトリ データは、退避中のノードから他の 3 つのノードに移動します。 1 つのサービスのデータを格納するノードが 3 つだけの場合、1 つのノードの避難が失敗し、レプリケートされるデータが不足する可能性があります。

データ サービスを実行しているクラスター ノードの退避

ノードをオフラインにする予定で、ノードが次のいずれかの役割を実行している場合は、ノードをオフラインにする前に、該当する各サービスを退避させます。

サービスデータ
git-serverリポジトリ
pages-serverGitHub Pages のサイトのビルド
storage-server
  • Git Large File Storage を使用してリポジトリに格納されたデータ
  • アバター画像
  • Web UI のコメントからの添付ファイル
  • リリース アーカイブ
  1. クラスタ内のいずれかのノードにSSHで接続してください。 詳しくは、「管理シェル (SSH) にアクセスする」を参照してください。

  2. 待避するノードの UUID を見つけるには、次のコマンドを実行します。 HOSTNAME は、ノードのホスト名に置き換えます。 以降のコマンドでは UUID を使用します。

    ghe-config cluster.HOSTNAME.uuid
    
  3. ノード上の適用可能なサービスごとに、初期データ数を決定するには、次のコマンドを実行します。 コマンドごとに、UUID を前の手順の UUID に置き換えます。

    • git-server:

      • コマンド:

        ghe-spokesctl server status git-server-UUID
        
      • 関連する出力: NETWORKSGISTS

    • pages-server:

      • コマンド:

        echo "select count(*) from pages_replicas where host = 'pages-server-UUID'" | ghe-dbconsole -y
        
    • storage-server:

      • コマンド:

        ghe-storage evacuation-status storage-server-UUID
        
      • 関連する出力: Remaining item(s)

  4. ノード上の該当するサービスを退避させるには、次のコマンドを実行します。 コマンドごとに、UUID を前の手順の UUID に置き換えます。

    • git-server:

      • コマンド (REASON FOR EVACUATION を退避の理由に置き換えます):

        ghe-spokesctl server set evacuating git-server-UUID 'REASON FOR EVACUATION'
        
    • pages-server:

      • コマンド:

        ghe-dpages evacuate pages-server-UUID
        
    • storage-server:

      1. 次のコマンドを実行してノードのサービスをオフラインにします。

        ghe-storage offline storage-server-UUID
        
      2. 次のコマンドを実行して、ノードを退避させます。

        ghe-storage evacuate storage-server-UUID
        
  5. GitHub Enterprise Server がデータをコピーしている間にサービスの退避を監視するには、次のコマンドを実行します。 コマンドごとに、UUID を前の手順の UUID に置き換えます。

    Warning

    退避が完了するまで、ノードをシャットダウンしないでください。 退避は、データ数が 0 に達すると完了します。つまり、すべてのデータが他のノードに安全に格納されます。

    • git-server:

      ghe-spokesctl server evac-status git-server-UUID
      
    • pages-server:

      echo "select count(*) from pages_replicas where host = 'pages-server-UUID'" | ghe-dbconsole -y
      
    • storage-server:

      ghe-storage evacuation-status storage-server-UUID
      
  6. サービスの退避が完了したら、ノードをシャットダウンします。