Skip to main content

リポジトリ キャッシュの構成

GitHub Enterprise Server 用にリポジトリのキャッシュを構成するには、新しいインスタンスを作成し、リポジトリのキャッシュをプライマリ インスタンスに接続し、リポジトリのキャッシュに対するリポジトリ ネットワークのレプリケーションを構成します。

リポジトリ キャッシュの構成について

リポジトリ キャッシュと呼ばれる特殊な種類のレプリカを作成することで、リポジトリ キャッシュを構成できます。次に、リポジトリ キャッシュにレプリケートされるリポジトリ ネットワークを管理するデータの場所ポリシーを設定できます。

クラスタリングでは、リポジトリ キャッシュはサポートされていません。

リポジトリ キャッシュの DNS

プライマリ インスタンスとリポジトリ キャッシュの DNS 名は異なっている必要があります。 たとえば、プライマリ インスタンスが github.example.com にある場合は、キャッシュ名は europe-ci.github.example.comgithub.asia.example.com に決定できます。

CI マシンで、プライマリ インスタンスではなくリポジトリ キャッシュからフェッチするには、Git の url.<base>.insteadOf 構成設定を使用できます。 詳細については、Git ドキュメントにある「git-config」を参照してください。

たとえば、CI マシンのグローバル .gitconfig には、次の行が含まれます。

[url "https://europe-ci.github.example.com/"]
    insteadOf = https://github.example.com/

次に、https://github.example.com/myorg/myrepo をフェッチするように Git に要求すると、代わりに https://europe-ci.github.example.com/myorg/myrepo からフェッチされます。

リポジトリ キャッシュの構成

  1. 新しい GitHub Enterprise Server インスタンスを希望するプラットフォームにセットアップします。 このインスタンスがリポジトリ キャッシュになります。 詳しくは、「GitHub Enterprise Server インスタンスをセットアップする」をご覧ください。

  2. プライマリアプライアンス上のパスワードと一致する管理者パスワードを設定して続行します。

  3. [レプリカとして設定] をクリックします。

  4. "Add new SSH key(新しいSSH鍵の追加)"の下でSSH鍵を入力してください。

  5. [キーの追加] をクリックします。

  6. SSH を使用して、リポジトリ キャッシュの IP アドレスに接続します。

    ssh -p 122 admin@REPLICA-IP
    
  7. レプリケーション用のキーの組を生成するには、プライマリ アプライアンスの IP アドレスを指定して ghe-repl-setup コマンドを使用し、それが返す公開キーをコピーします。

    ghe-repl-setup PRIMARY_IP
    
  8. プライマリ アプライアンスの承認されたキーのリストに公開キーを追加するには、https://PRIMARY-HOSTNAME/setup/settings を参照して、レプリカからコピーしたキーをリストに追加します。

  9. プライマリへの接続を確認し、リポジトリ キャッシュに対してレプリカ モードを有効にするには、ghe-repl-setup をもう一度実行します。

    • リポジトリ キャッシュが唯一の追加ノードである場合、引数は必要ありません。

      ghe-repl-setup PRIMARY-IP
      
    • 1 つ以上の既存のレプリカに加えてリポジトリ キャッシュを構成する場合は、-a または --add 引数を使います。

      ghe-repl-setup -a PRIMARY-IP
      
  10. リポジトリ キャッシュを構成するには、ghe-repl-node コマンドを使用し、必要なパラメーターを含めます。

    • CACHE-LOCATION を、キャッシュがデプロイされているリージョンなどの英数字識別子に置き換えて、リポジトリ キャッシュに対して cache-location を設定します。 CACHE-LOCATION 値は、assetsmedia など、サブドメイン分離で使用するために予約されているサブドメインのいずれにもできません。 予約されている名前の一覧については、「Subdomain Isolationの有効化」をご覧ください。

    • リポジトリ キャッシュに cache-domain を設定し、EXTERNAL-CACHE-DOMAIN を Git クライアントがリポジトリ キャッシュへのアクセスに使用するホスト名に置き換えます。 cache-domain を指定しない場合、GitHub Enterprise Server により、インスタンス用に構成されたホスト名の前に、サブドメインとして CACHE-LOCATION 値が付加されます。 詳しくは、「インスタンスのホスト キーの構成」をご覧ください。

    • まだの場合は、DC-NAME をデータセンター名で置き換えて、プライマリと任意のレプリカ アプライアンスでデータセンター名を設定します。

      ghe-repl-node --datacenter DC-NAME
      
    • 新しいキャッシュでは、同じデータセンター内の別のキャッシュからシード処理を試みます。 リポジトリ キャッシュに datacenter を設定し、REPLICA-DC-NAME をノードをデプロイするデータセンターの名前に置き換えます。

    ghe-repl-node --cache CACHE-LOCATION --cache-domain EXTERNAL-CACHE-DOMAIN --datacenter REPLICA-DC-NAME
    
  11. データ ストアのレプリケーションを開始するには、ghe-repl-start コマンドを使います。

    ghe-repl-start
    

    Warning

    ghe-repl-start を実行すると、プライマリ サーバーを短時間使えなくなり、その間、ユーザーには内部サーバー エラーが表示されることがあります。 もっとわかりやすいメッセージを表示するには、ghe-repl-start をレプリカ ノードで実行する前にプライマリ ノード上で ghe-maintenance -s を実行し、アプライアンスをメンテナンス モードにします。 レプリケーションを開始したら、ghe-maintenance -u を使ってメンテナンス モードを無効にします。 プライマリ ノードがメンテナンス モードの間、Git レプリケーションは進行しません。

  12. 各データストアのレプリケーション チャネルの状態を確認するには、ghe-repl-status コマンドを使用します。

    ghe-repl-status
    
  13. リポジトリ キャッシュへのリポジトリ ネットワークのレプリケーションを有効にするには、データの場所ポリシーを設定します。 詳しくは、「データの場所ポリシー」をご覧ください。

データの場所ポリシー

spokesctl cache-policy コマンドでリポジトリのデータの場所ポリシーを構成して、データの局所性を制御できます。 データの場所ポリシーによって、どのリポジトリ ネットワークがどのリポジトリ キャッシュにレプリケートされているかが決まります。 既定では、データの場所ポリシーが構成されるまで、どのリポジトリ キャッシュにもリポジトリ ネットワークはレプリケートされません。

データの場所ポリシーは、Git コンテンツにのみ影響します。 Issue や pull request コメントなどのデータベース内のコンテンツは、ポリシーに関係なくすべてのノードにレプリケートされます。

Note

データの場所のポリシーは、アクセス制御と同じではありません。 リポジトリにアクセスできるユーザーを制御するには、リポジトリ ロールを使用する必要があります。 リポジトリのロールについて詳しくは、「Organizationのリポジトリロール」をご覧ください。

--default フラグを使用して、すべてのネットワークをレプリケートするようにポリシーを構成できます。 たとえば、次のコマンドでは、すべてのリポジトリ ネットワークの 1 つのコピーを、cache_location が "kansas" であるリポジトリ キャッシュのセットにレプリケートするポリシーが作成されます。

ghe-spokesctl cache-policy set --default 1 kansas

リポジトリ ネットワークのレプリケーションを構成するには、ネットワークのルートであるリポジトリを指定します。 リポジトリ ネットワークには、リポジトリとリポジトリのすべてのフォークが含まれます。 ネットワーク全体をレプリケートしないと、ネットワークの一部をレプリケートすることはできません。

ghe-spokesctl cache-policy set <owner/repository> 1 kansas

ネットワークのレプリカ数を 0 に指定すると、すべてのネットワークをレプリケートし、特定のネットワークを除外するポリシーをオーバーライドできます。 たとえば、次のコマンドでは、場所 "kansas" 内のリポジトリ キャッシュに、そのネットワークのコピーを含めることができないことが指定されます。

ghe-spokesctl cache-policy set <owner/repository> 0 kansas

特定のキャッシュの場所で、1 より大きいレプリカ数はサポートされていません。