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 ストレージ
-
次のシークレットを設定します。
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 -
実行構成の適用
ghe-config-apply
アマゾンS3
-
次のシークレットを設定します。
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 エンドポイントを使用します。 -
実行構成の適用
ghe-config-apply
Google Cloud Storage
-
バケットにアクセスできる JSON サービス アカウント キーを作成し、base64 としてエンコードします。
base64 -w0 service-account.json -
次のシークレットを設定します。
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 -
実行構成を適用
ghe-config-apply
登録の確認
構成の適用が完了したら、スナップショット リポジトリが登録されたことを確認します。
curl -k "http://127.0.0.1:9200/_snapshot/search_index_snapshots-$(ghe-version -v)/_status"
必要なシークレットがない場合、リポジトリの登録中に構成の適用が失敗します。 シークレットを更新し、 ghe-config-apply 再実行して再試行します。
バックアップと復元中のスナップショットの有効化
ストレージ プロバイダーを構成するとスナップショット リポジトリが登録されますが、ghe-backup と ghe-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-backup と ghe-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 バージョンによって作成されたスナップショットは、新しいバージョンに復元できます。 新しいバージョンから以前のバージョンにスナップショットを復元することはできません。
-
以前のバージョンで使用可能なスナップショットを一覧表示します。
ghe-es-list-snapshots -v 3.14.0 -
目的のスナップショットを復元します。
ghe-es-restore-snapshot -v 3.14.0 -s SNAPSHOT-NAME
Elasticsearch は、復元されたインデックスを現在のバージョンの形式に自動的にアップグレードします。
スナップショット ストレージの管理
Elasticsearch スナップショットは増分ですが、クラウド ストレージ アカウントは時間の経過と同時に古いスナップショットを蓄積できます。 無制限のストレージの増加を回避するには、保持要件よりも古いスナップショットを自動的に削除するようにストレージ プロバイダーでライフサイクル ポリシーを構成します。 詳細については、プロバイダーのドキュメントを参照してください。