Skip to main content
Skip to content

Elasticsearch スナップショットの構成

検索インデックス データをディスクから直接コピーするのではなく、ネイティブの Elasticsearch スナップショットと復元にカスタマー マネージド クラウド ストレージ プロバイダーを使用するように お使いの GitHub Enterprise Server インスタンス を構成できます。

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

Site administrators can configure Elasticsearch snapshot storage.

Elasticsearch スナップショットについて

既定では、GitHub Enterprise Server Backup Utilities と GitHub Enterprise Server Backup Service は、ディスクからファイルを直接コピーして検索インデックスデータをバックアップします。 この方法は、Elasticsearch 独自の推奨事項に従っず、大量のバックアップ アプライアンス ストレージを消費する可能性があり、バックアップされたインデックスが破損するリスクがあります。

オプトインの代替手段として、 お使いの GitHub Enterprise Server インスタンス は Elasticsearch の組み込みの増分スナップショットと復元機能をサポートします。 サポートされているクラウド ストレージ プロバイダーを構成し、スナップショット バックアップ戦略を有効にする場合:

  • ghe-backup は、構成済みのクラウド ストレージ アカウントに検索インデックス データの増分スナップショットを作成します。 増分スナップショットは、完全コピーよりも高速です(特に後続のバックアップの場合)。
  • ghe-restore は、ターゲット インスタンスの GitHub Enterprise Server バージョンと一致するスナップショットが存在する場合、検索インデックス データをクラウド ストレージ アカウントから復元します。
  • スナップショットは GitHub Enterprise Server パッチ バージョンごとに分離されるため、バージョン間のロールバックをより安全に行うことができます。

この機能はオプトインです。 スナップショット リポジトリを構成しない場合、 お使いの GitHub Enterprise Server インスタンス は既存のディスク ベースの方法を使用して検索インデックス データをバックアップし続けます。

前提条件

  • サポートされているクラウド ストレージ プロバイダー: Azure Blob Storage、Amazon S3、または Google Cloud Storage (またはこれらの API のいずれかと互換性のあるサービス)。
  • スナップショット リポジトリとして使用する予定のストレージ コンテナーまたはバケット。 このコンテナーまたはバケットは、自分で作成する必要があります。 GitHub Enterprise Server はそれを作成してくれないため、コンテナーまたはバケットが事前に存在していない場合、リポジトリの登録は失敗します。

スナップショット ストレージ プロバイダーの構成

SSH 経由で ghe-config を使用して、次の設定を構成します。 詳細については、「管理シェル (SSH) にアクセスする」を参照してください。

構成を適用して、スナップショット リポジトリを Elasticsearch に登録します。 リポジトリの名前は search_index_snapshots-VERSION で、 VERSION は現在の GitHub Enterprise Server リリース バージョンです。

Azure Blob ストレージ

  1. 次のシークレットを設定します。

    ghe-config secrets.elasticsearch.snapshot-provider azure
    ghe-config secrets.elasticsearch.snapshot.azure.container YOUR-CONTAINER
    ghe-config secrets.elasticsearch.snapshot.azure.account-name YOUR-STORAGE-ACCOUNT
    ghe-config secrets.elasticsearch.snapshot.azure.account-key YOUR-ACCOUNT-KEY
    

    必要に応じて、カスタム BLOB エンドポイント サフィックスを設定します (既定値は core.windows.net)。

    ghe-config secrets.elasticsearch.snapshot.azure.endpoint-suffix YOUR-ENDPOINT-SUFFIX
    
  2. 実行構成の適用

    ghe-config-apply
    

アマゾンS3

  1. 次のシークレットを設定します。

    ghe-config secrets.elasticsearch.snapshot-provider s3
    ghe-config secrets.elasticsearch.snapshot.bucket-name YOUR-BUCKET-NAME
    ghe-config secrets.elasticsearch.snapshot.service-url YOUR-SERVICE-URL
    ghe-config secrets.elasticsearch.snapshot.region YOUR-AWS-REGION
    ghe-config secrets.elasticsearch.snapshot.access-key-id YOUR-ACCESS-KEY-ID
    ghe-config secrets.elasticsearch.snapshot.access-secret YOUR-ACCESS-SECRET
    

    サービス URL には、 https://s3.us-east-1.amazonaws.comなど、S3 エンドポイントを使用します。

  2. 実行構成の適用

    ghe-config-apply
    

Google Cloud Storage

  1. バケットにアクセスできる JSON サービス アカウント キーを作成し、base64 としてエンコードします。

    base64 -w0 service-account.json
    
  2. 次のシークレットを設定します。

    ghe-config secrets.elasticsearch.snapshot-provider gcs
    ghe-config secrets.elasticsearch.snapshot.gcs.bucket YOUR-BUCKET-NAME
    ghe-config secrets.elasticsearch.snapshot.gcs.credentials YOUR-BASE64-ENCODED-CREDENTIALS
    
  3. 実行構成を適用

    ghe-config-apply
    

登録の確認

構成の適用が完了したら、スナップショット リポジトリが登録されたことを確認します。

curl -k "http://127.0.0.1:9200/_snapshot/search_index_snapshots-$(ghe-version -v)/_status"

必要なシークレットがない場合、リポジトリの登録中に構成の適用が失敗します。 シークレットを更新し、 ghe-config-apply 再実行して再試行します。

バックアップと復元中のスナップショットの有効化

ストレージ プロバイダーを構成するとスナップショット リポジトリが登録されますが、ghe-backupghe-restore がそれを自動的に使用するように、スナップショットバックアップ戦略も有効にする必要があります。

  • GitHub Enterprise Server Backup Service: アプライアンスの ghe-config を使用して戦略を設定します。

    ghe-config backup.es-backup-strategy snapshot
    
  • GitHub Enterprise Server Backup Utilities: バックアップ ホスト上の backup.config ファイルに戦略を設定します。

    GHE_ES_BACKUP_STRATEGY=snapshot
    

    既定値は rsync であり、既存のディスク ベースのバックアップ動作が保持されます。 GitHub Enterprise Server Backup Utilities スナップショット メタデータのみをローカルに格納します。スナップショットの内容は、構成済みのクラウド ストレージに残ります。

バックアップ戦略を設定しない場合でも、スナップショット リポジトリは手動で管理できますが、 ghe-backupghe-restore は引き続きディスク ベースの方法を使用します。

スナップショットを手動で管理する

Elasticsearch スナップショットは、次のコマンドを使用して直接管理できます。 使用情報の -h フラグを指定して任意のコマンドを実行します。

命令説明
ghe-es-create-snapshot構成されたリポジトリに新しいスナップショットを作成します。
ghe-es-list-snapshotsスナップショット リポジトリ、またはリポジトリ内のスナップショットを一覧表示します。
ghe-es-restore-snapshotスナップショットから検索インデックスを復元します。

ヒント

定期的なバックアップと復元の場合は、これらのコマンドを直接使用する代わりに、 GitHub Enterprise Server Backup Utilities または GitHub Enterprise Server Backup Service を使用します。 バックアップ ツールは、一貫性のあるバックアップまたは復元を確保するために、Elasticsearch スナップショットをインスタンスの残りのデータと調整します。 手動コマンドは、インスタンスの完全バックアップまたは復元とは別に検索インデックス スナップショットを管理する必要がある場合にのみ使用します。

以前のバージョンからのスナップショットの復元

以前の GitHub Enterprise Server バージョンによって作成されたスナップショットは、新しいバージョンに復元できます。 新しいバージョンから以前のバージョンにスナップショットを復元することはできません。

  1. 以前のバージョンで使用可能なスナップショットを一覧表示します。

    ghe-es-list-snapshots -v 3.14.0
    
  2. 目的のスナップショットを復元します。

    ghe-es-restore-snapshot -v 3.14.0 -s SNAPSHOT-NAME
    

Elasticsearch は、復元されたインデックスを現在のバージョンの形式に自動的にアップグレードします。

スナップショット ストレージの管理

Elasticsearch スナップショットは増分ですが、クラウド ストレージ アカウントは時間の経過と同時に古いスナップショットを蓄積できます。 無制限のストレージの増加を回避するには、保持要件よりも古いスナップショットを自動的に削除するようにストレージ プロバイダーでライフサイクル ポリシーを構成します。 詳細については、プロバイダーのドキュメントを参照してください。