Geo よくある質問

Geo を実行するための最小要件は何ですか?

必要条件はインデックスページに記載されています。

Geo は同期するプロジェクトをどうやって知るのですか?

各セカンダリサイトにはGitLab データベースの読み取り専用の複製があります。セカンダリサイトには、同期済みのプロジェクトを保存する追跡データベースもあります。Geo は二つのデータベースを比較して、まだ追跡されていないプロジェクトを見つけます。

最初はこのトラッキングデータベースは空なので、GeoはGitLabデータベースで確認できるすべてのプロジェクトから更新しようとします。

同期するプロジェクトごとに

  1. Geo はgit fetch geo --mirror を発行し、プライマリサイトから最新情報を取得します。変更がなければ、同期は高速です。そうでない場合は、最新のコミットをプルする必要があります。
  2. セカンダリサイトはトラッキングデータベースを更新し、プロジェクト名で同期したことを保存します。
  3. すべてのプロジェクトが同期されるまで繰り返します。

誰かがプライマリサイトにコミットをプッシュすると、GitLab データベースにリポジトリが変更されたというイベントが発生します。セカンダリサイトはこのイベントを見て、該当のプロジェクトをダーティとしてマークし、再同期のスケジュールを立てます。

パイプラインの問題(たとえば同期が何度も失敗したりジョブが失われたり)によってプロジェクトの同期が永久に停止しないように、Geo はダーティとマークされたプロジェクトがないか追跡データベースを定期的にチェックします。このチェックは、同時同期数がrepos_max_capacity を下回り、同期待ちの新しいプロジェクトがない場合に行われます。

Geo にはチェックサム機能もあり、すべての Git 参照の SHA 値を SHA256 で合計します。プライマリサイトと セカンダリサイトの間で参照が一致しない場合、セカンダリサイトはそのプロジェクトをダーティとしてマークし、再同期を試みます。ですから、たとえ古い追跡データベースがあったとしても、検証は有効になってリポジトリの状態の不一致が見つかり、再同期されるはずです。

ディザスタリカバリ状況で Geo を使用できますか?

はい。ただし、レプリケートされるデータには制限があります(「セカンダリサイトにレプリケートされるデータとは?)

ディザスタリカバリのドキュメントをお読みください。

セカンダリサイトにレプリケートされるデータは何ですか?

現在、プロジェクトリポジトリ、LFSオブジェクト、生成された添付ファイルやアバター、データベース全体を複製しています。つまり、ユーザーアカウント、イシュー、マージリクエスト、グループ、プロジェクトデータなどの情報がクエリ可能です。

詳細については、サポートされている Geo データ型をご覧ください。

セカンダリサイトに git push を送ることはできますか?

セカンダリサイトへの直接のプッシュ(Git LFS を含む HTTP と SSH の両方)はサポートされています。

コミットがセカンダリサイトにレプリケートされるまでにはどれくらい時間がかかりますか?

すべてのレプリケーションオペレーションは非同期で、ディスパッチされるためにキューに入れられます。したがって、トラフィック量、コミットの大きさ、サイト間の接続性、ハードウェアなど、多くの要因に依存します。

SSHサーバーが別のポートで動作している場合はどうなりますか?

まったく問題ありません。私たちはプライマリサイトからすべてのセカンダリサイトにリポジトリの変更をフェッチするためにHTTP(s)を使用しています。

セカンダリサイトのコンテナレジストリを、プライマリサイトのものをミラーするように設定することは可能ですか?

セカンダリサイトのコンテナレジストリを参照してください。

セカンダリサイトにサインインできますか?

はい。しかし、セカンダリサイトはプライマリインスタンスからすべての認証データ(ユーザーアカウントやログインなど)を受け取ります。つまり、認証のためにプライマリにリダイレクトされ、その後ルーティングバックされます。