サポートされる Geo データ型

Geoデータ型は、関連情報を保存するために1つ以上のGitLab機能で必要とされるデータの特定のクラスです。

これらの機能によって生成されたデータをGeoで複製するために、私たちはいくつかの戦略を使ってアクセス、転送、検証を行います。

データタイプ

私たちは3つの異なるデータタイプを区別しています:

レプリケートする各機能やコンポーネント、対応するデータタイプ、レプリケーション、検証方法については、以下のリストをご覧ください:

種類機能/コンポーネントレプリケーション方法検証方法
データベースPostgreSQLのアプリケーションデータネイティブネイティブ
データベースRedis該当なし(1)該当なし
データベースElasticsearchネイティブネイティブ
データベースSSH公開キーPostgreSQLレプリケーションPostgreSQLレプリケーション
GitプロジェクトリポジトリGeo with GitalyGitalyチェックサム
GitプロジェクトWikiリポジトリGeo with GitalyGitalyチェックサム
GitプロジェクトデザインリポジトリGeo with GitalyGitalyチェックサム
Gitプロジェクト・スニペットGeo with GitalyGitalyチェックサム
Gitパーソナル・スニペットGeo with GitalyGitalyチェックサム
GitグループWikiリポジトリGeo with GitalyGitalyチェックサム
ブロブユーザーアップロード_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブユーザーアップロード_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブLFSオブジェクト_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブLFSオブジェクト_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブCIジョブのアーティファクト_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブCIジョブのアーティファクト_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブCIビルドトレースのアーカイブ_(ファイルシステム)_APIを使ったGeo未実装
ブロブCIビルドトレースのアーカイブ_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブコンテナレジストリ_(ファイルシステム)_API/DockerAPIを使用したGeoSHA256チェックサム
ブロブコンテナレジストリ_(オブジェクトストレージ)_API/Managed/Docker APIを使ったGeo(2)SHA256チェックサム
ブロブパッケージのレジストリ_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブパッケージレジストリ_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブTerraform モジュール レジストリ_(ファイルシステム_)APIを使ったGeoSHA256チェックサム
ブロブTerraformモジュールレジストリ_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブバージョン管理されたTerraformの状態_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブバージョン管理されたTerraformステート_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブ外部マージリクエスト Diffs_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブ外部マージリクエスト差分_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブパイプラインのアーティファクト_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブパイプラインアーティファクト_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブページ_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブPages_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブCI セキュアファイル_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブCI セキュアファイル_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブインシデント メトリック イメージ(ファイルシステム) API/管理下のGeoSHA256チェックサム
ブロブインシデント・メトリック・イメージ(オブジェクトストレージ) API付きGeo/マネージド(2)未実装
ブロブアラートメトリック イメージ_(ファイルシステム)_APIを使ったGeoSHA256チェックサム
ブロブアラートメトリックイメージ_(オブジェクトストレージ)_API付きGeo/マネージド(2)未実装
ブロブ依存プロキシ画像_(ファイルシステム)_。APIを使ったGeoSHA256チェックサム
ブロブ依存プロキシイメージ_(オブジェクトストレージ)_API/管理されたGeo(2)未実装
  • (1):Redis レプリケーションは、Redis センチネルを使用した HA の一部として使用できます。Geoサイト間では使用されません。
  • (2):オブジェクトストレージのレプリケーションは、Geo またはオブジェクトストレージプロバイダー/アプライアンスのネイティブレプリケーション機能によって実行できます。

Gitリポジトリ

GitLabインスタンスは1つ以上のリポジトリシャードを持つことができます。それぞれのシャードにはGitalyインスタンスがあり、ローカルに保存されたGitリポジトリへのアクセスやオペレーションを担当します。それはマシン上で実行することができます:

  • シングルディスク
  • 複数のディスクを1つのマウントポイントとしてマウントした場合(RAIDアレイのように)。
  • LVMの使用。

GitLabは特別なファイルシステムを必要とせず、マウントされたストレージアプライアンスで動作します。しかし、リモートファイルシステムを使用する場合、パフォーマンスの制限や一貫性のイシューが発生する可能性があります。

GeoはGitalyのガベージコレクションをトリガーして、Geoのセカンダリサイトでフォークされたリポジトリを重複排除します。

Gitaly gRPC APIが通信を行い、3つの同期方法があります:

  • あるGeoサイトから別のGeoサイトへの通常のGit clone/fetchを使用します(特別な認証が必要です)。
  • リポジトリのスナップショットを使う(最初の方法が失敗したりリポジトリが壊れたりしたときのため)。
  • 管理エリアからの手動トリガー(上記の両方の組み合わせ)。

各プロジェクトは最大3つの異なるリポジトリを持つことができます:

  • プロジェクトリポジトリ:ソースコードが保存されます。
  • Wiki リポジトリ:Wiki コンテンツが保存されます。
  • デザインリポジトリ:デザインのアーティファクトがインデックス化されます(アセットは実際にはLFSにあります)。

これらはすべて同じシャードに存在し、Wikiとデザインリポジトリの場合は、-wiki-design のサフィックスを持つ同じベース名を共有します。

そのほかに、スニペットリポジトリがあります。これらはプロジェクトまたは特定のユーザーに接続することができます。どちらのタイプもセカンダリサイトに同期されます。

ブロブ

GitLabはファイルやイシューの添付ファイルやLFSオブジェクトのようなブロブをどちらかに保存します:

  • 特定の場所のファイルシステム。
  • オブジェクトストレージ・ソリューション。オブジェクトストレージ・ソリューションには次のようなものがあります:
    • Amazon S3やGoogle Cloud Storageのようなクラウドベース。
    • MinIOのような)お客様によるホスティング。
    • オブジェクトストレージ互換のAPIを公開するストレージアプライアンス。

オブジェクトストレージの代わりにファイルシステムストアを使用する場合、複数のノードを使用しているときは、ネットワークマウントされたファイルシステムを使用してGitLabを実行します。

レプリケーションと検証に関して:

  • 内部APIリクエストを使ってファイルやブロブを転送します。
  • オブジェクトストレージでは、以下のことが可能です:
    • クラウドプロバイダーのレプリケーション機能を使用します。
    • GitLabにレプリケーションしてもらいましょう。

データベース

GitLabは異なるユースケースのために、複数のデータベースに保存されたデータに依存しています。PostgreSQLは、イシューコンテンツやコメント、権限や認証情報のような、Webインターフェイスでユーザーが作成したコンテンツのための単一の真実のポイントです。

PostgreSQLは、HTMLレンダリングされたMarkdownやキャッシュされたマージリクエストの差分のような、ある程度のレベルのキャッシュデータを保持することもできます。これはオブジェクトストレージにオフロードする設定も可能です。

PostgreSQL独自のレプリケーション機能を使用して、プライマリサイトから セカンダリサイトへデータを複製します。

Redis はキャッシュストアとして、またバックグラウンドジョブシステム用の永続データを保持するために使用しています。どちらのユースケースでも同じGeoサイト専用のデータがあるため、サイト間でデータを複製することはありません。

Elasticsearch は高度な検索のためのオプションのデータベースです。ソースコードレベルと、イシュー、マージリクエスト、ディスカッションなどのユーザー生成コンテンツの両方で検索を改善することができます。Elasticsearch は Geo ではサポートされていません。

レプリケーション/検証の制限

次の表は、GitLabの機能とセカンダリサイトでのレプリケーションと検証のステータスの一覧です。

これらのエピック/イシューで、不足している項目の実装の進捗を把握することができます:

機能フラグの背後にあるレプリケートされたデータタイプ

いくつかのデータ型のレプリケーションは、対応する機能フラグの背後にあります:

  • これらは機能フラグの後ろにデプロイされ、デフォルトで有効になっています。
  • GitLab.comでは有効になっています。
  • プロジェクトごとに有効にしたり無効にしたりすることはできません。
  • 本番環境での使用を推奨します。
  • GitLabセルフマネージドインスタンスでは、GitLab管理者はこれらを無効にすることができます。

レプリケーションの有効化・無効化(データ型による)

いくつかのデータタイプのレプリケーションは、デフォルトで有効になっている機能フラグの後ろにリリースされています。GitLab RailsコンソールにアクセスできるGitLab管理者は、インスタンスに対してこれを無効にすることができます。これらのデータタイプの機能フラグ名は下の表の備考欄にあります。

パッケージファイルのレプリケーションなどを無効にする場合:

Feature.disable(:geo_package_file_replication)

パッケージファイルのレプリケーションなどを有効にします:

Feature.enable(:geo_package_file_replication)
caution
このリストにない機能、またはReplicated列にNoがある機能は、セカンダリサイトにレプリケートされません。これらの機能のデータを手動でレプリケートせずにフェイルオーバーすると、データが失われます。セカンダリサイトでこれらの機能を使用したり、フェイルオーバーを正常に実行したりするには、他の手段を使用してデータをレプリケートする必要があります。
機能複製(GitLabバージョンで追加)検証済み(GitLabバージョンで追加)GitLabが管理するオブジェクトストレージのレプリケーション(GitLabバージョンで追加されました。)GitLab管理オブジェクトストレージの検証(GitLabバージョンで追加されました。)備考 
PostgreSQLのアプリケーションデータ はい(10.2) はい(10.2)該当なし該当なし  
プロジェクトリポジトリ はい(10.2) はい(10.7)該当なし該当なし16.2 でセルフサービスフレームワークにマイグレーション。詳細は GitLab issue#367925を参照してください。

機能フラグの後ろgeo_project_repository_replication、(16.3) ではデフォルトで有効になっています。

アーカイブされたプロジェクトを含む全てのプロジェクトがレプリケートされます。
 
プロジェクト Wiki リポジトリ はい(10.2)2 はい(10.7)2 該当なし該当なし15.11 でセルフサービスフレームワークにマイグレーションされました。詳細は GitLab issue#367925を参照してください。

機能フラグの後ろgeo_project_wiki_repository_replication、(15.11) ではデフォルトで有効になっています。
 
グループWikiリポジトリはい(13.10)はい(16.3)該当なし該当なし機能フラグの後ろgeo_group_wiki_repository_replication、デフォルトで有効。 
アップロード はい(10.2) はい(14.6)はい(15.1)なしレプリケーションは機能フラグgeo_upload_replicationの背後にあり、デフォルトで有効。検証は機能フラグgeo_upload_verificationの背後にあり、14.8で削除されました。 
LFSオブジェクト はい(10.2) はい(14.6)はい(15.1)なしGitLabバージョン11.11.xと12.0.xは、新しいLFSオブジェクトのレプリケーションを妨げるバグの影響を受けます。

レプリケーションは機能フラグgeo_lfs_object_replicationの背後にあり、デフォルトで有効になっています。検証は機能フラグgeo_lfs_object_verificationの背後にあり、14.7 で削除されました。
 
個人的なスニペット はい(10.2) はい(10.2)該当なし該当なし  
プロジェクトスニペット はい(10.2) はい(10.2)該当なし該当なし  
CIジョブのアーティファクト はい(10.4) はい(14.10)はい(15.1)なし検証は機能フラグgeo_job_artifact_replicationの背後にあり、14.10ではデフォルトで有効になっています。 
CIパイプラインのアーティファクトはい(13.11)はい(13.11)はい(15.1)なしパイプライン完了後に追加のアーティファクトを永続化します。 
CI セキュアファイルはい(15.3)はい(15.3)はい(15.3)なし検証は機能フラグgeo_ci_secure_file_replicationの背後にあり、15.3 ではデフォルトで有効になっています。 
コンテナレジストリ はい(12.3)1 はい(15.10) はい(12.3)1 はい(15.10)コンテナレジストリレプリケーションを設定する手順を参照してください。 
Terraform モジュールレジストリ はい(14.0) はい(14.0)はい(15.1)なし機能フラグの後ろgeo_package_file_replication、デフォルトで有効。 
プロジェクトデザインリポジトリ はい(12.7) はい(16.1)該当なし該当なしデザインには、LFSオブジェクトとアップロードのレプリケーションも必要です。レプリケーションは機能フラグgeo_design_management_repository_replication、デフォルトで有効になっています。 
パッケージ・レジストリ はい(13.2) はい(13.10)はい(15.1)なし機能フラグの後ろgeo_package_file_replication、デフォルトで有効。 
バージョン管理されたTerraformの状態 はい(13.5) はい(13.12)はい(15.1)なしレプリケーションは機能フラグgeo_terraform_state_version_replication、デフォルトで有効。検証は、14.0で削除された機能フラグgeo_terraform_state_version_verification 
外部マージリクエストの差分 はい(13.5) はい(14.6)はい(15.1)なしレプリケーションは機能フラグgeo_merge_request_diff_replicationの背後にあり、デフォルトで有効。検証は機能フラグgeo_merge_request_diff_verificationの背後にあり、14.7で削除されました。 
バージョン管理スニペットはい(13.7)はい(14.2)該当なし該当なし検証は13.11で機能フラグgeo_snippet_repository_verification の後ろに実装され、14.2で機能フラグは削除されました。 
GitLab Pagesはい(14.3) はい(14.6)はい(15.1)なし機能フラグgeo_pages_deployment_replication の背後で、デフォルトで有効。検証は、14.7 で削除された機能フラグgeo_pages_deployment_verificationの後ろにありました。 
プロジェクトレベルのセキュアファイル はい(15.3) はい(15.3) はい(15.3)なし  
インシデントメトリック画像 あり(15.5) あり(15.5) あり(15.5)なしレプリケーション/検証は、Uploadsデータ型を介して処理されます。 
アラート・メトリック・イメージ あり(15.5) あり(15.5) あり(15.5)なしレプリケーション/検証は、Uploadsデータ型を介して処理されます。 
サーバー側の Git フック予定なしなし該当なし該当なし現在の導入の複雑さ、顧客の関心の低さ、フックに代わるものが利用可能であるため、予定なし。 
Elasticsearchインテグレーション予定なしなしなしなし製品ディスカバリーが必要であり、Elasticsearch(ES) クラスタの再構築が可能なため、予定はありません。セカンダリはプライマリと同じESクラスタを使用します。 
依存プロキシイメージあり(15.7)あり(15.7)あり(15.7)なし  
脆弱性エクスポート予定なしなしなしなし刹那的で機密性の高い情報であるため、計画されていません。必要に応じて再生可能。 

1 15.5 でセルフサービスフレームワークにマイグレーションされました。詳細は GitLab issue#337436を参照してください。

2 15.11 でセルフサービスフレームワークにマイグレーションされました。機能フラグgeo_project_wiki_repository_replicationの背後で、デフォルトで有効になっています。詳細は GitLab issue#367925を参照してください。