サポートされる Geo データ型
Geoデータ型は、関連情報を保存するために1つ以上のGitLab機能で必要とされるデータの特定のクラスです。
これらの機能によって生成されたデータをGeoで複製するために、私たちはいくつかの戦略を使ってアクセス、転送、検証を行います。
データタイプ
私たちは3つの異なるデータタイプを区別しています:
レプリケートする各機能やコンポーネント、対応するデータタイプ、レプリケーション、検証方法については、以下のリストをご覧ください:
種類 | 機能/コンポーネント | レプリケーション方法 | 検証方法 |
---|---|---|---|
データベース | PostgreSQLのアプリケーションデータ | ネイティブ | ネイティブ |
データベース | Redis | 該当なし(1) | 該当なし |
データベース | Elasticsearch | ネイティブ | ネイティブ |
データベース | SSH公開キー | PostgreSQLレプリケーション | PostgreSQLレプリケーション |
Git | プロジェクトリポジトリ | Geo with Gitaly | Gitalyチェックサム |
Git | プロジェクトWikiリポジトリ | Geo with Gitaly | Gitalyチェックサム |
Git | プロジェクトデザインリポジトリ | Geo with Gitaly | Gitalyチェックサム |
Git | プロジェクト・スニペット | Geo with Gitaly | Gitalyチェックサム |
Git | パーソナル・スニペット | Geo with Gitaly | Gitalyチェックサム |
Git | グループWikiリポジトリ | Geo with Gitaly | Gitalyチェックサム |
ブロブ | ユーザーアップロード_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | ユーザーアップロード_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | LFSオブジェクト_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | LFSオブジェクト_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | CIジョブのアーティファクト_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | CIジョブのアーティファクト_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | CIビルドトレースのアーカイブ_(ファイルシステム)_ | APIを使ったGeo | 未実装 |
ブロブ | CIビルドトレースのアーカイブ_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | コンテナレジストリ_(ファイルシステム)_ | API/DockerAPIを使用したGeo | SHA256チェックサム |
ブロブ | コンテナレジストリ_(オブジェクトストレージ)_ | API/Managed/Docker APIを使ったGeo(2) | SHA256チェックサム |
ブロブ | パッケージのレジストリ_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | パッケージレジストリ_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | Terraform モジュール レジストリ_(ファイルシステム_) | APIを使ったGeo | SHA256チェックサム |
ブロブ | Terraformモジュールレジストリ_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | バージョン管理されたTerraformの状態_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | バージョン管理されたTerraformステート_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | 外部マージリクエスト Diffs_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | 外部マージリクエスト差分_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | パイプラインのアーティファクト_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | パイプラインアーティファクト_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | ページ_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | Pages_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | CI セキュアファイル_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | CI セキュアファイル_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | インシデント メトリック イメージ(ファイルシステム) | API/管理下のGeo | SHA256チェックサム |
ブロブ | インシデント・メトリック・イメージ(オブジェクトストレージ) | API付きGeo/マネージド(2) | 未実装 |
ブロブ | アラートメトリック イメージ_(ファイルシステム)_ | APIを使ったGeo | SHA256チェックサム |
ブロブ | アラートメトリックイメージ_(オブジェクトストレージ)_ | API付きGeo/マネージド(2) | 未実装 |
ブロブ | 依存プロキシ画像_(ファイルシステム)_。 | APIを使ったGeo | SHA256チェックサム |
ブロブ | 依存プロキシイメージ_(オブジェクトストレージ)_ | 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)
機能 | 複製(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を参照してください。