自動バックグラウンド検証

自動バックグラウンド検証は、転送されたデータが計算されたチェックサムと一致することを保証します。プライマリサイトのデータのチェックサムとセカンダリサイトのデータのチェックサムが一致すれば、データは正常に転送されます。計画的なフェイルオーバーの後、破損の程度によっては、破損したデータが失われることがあります。

プライマリサイトで検証が失敗した場合、Geo が破損したオブジェクトをレプリケートしていることを示します。バックアップから復元するか、プライマリサイトから削除することでイシューを解決できます。

プライマリサイトで検証が成功し、セカンダリサイトで失敗した場合、レプリケーション プロセス中にオブジェクトが破損したことを示しています。Geo は、バックオフ期間を設けて再同期するリポジトリをマークし、検証失敗の修正をアクティビティで試みます。これらの失敗に対して検証をリセットしたい場合は、以下の手順に従ってください。

検証がレプリケーションより大幅に遅れている場合は、計画的なフェイルオーバーをスケジュールする前に、サイトにもっと時間を与えることを検討してください。

自動バックグラウンド検証の無効化または有効化

プライマリサイトのRailsノードの Railsコンソールで以下のコマンドを実行します。

自動バックグラウンド検証が有効になっているかどうかを確認するには

Gitlab::Geo.repository_verification_enabled?

自動バックグラウンド検証を無効にするには

Feature.disable('geo_repository_verification')

自動バックグラウンド検証を有効にする手順

Feature.enable('geo_repository_verification')

リポジトリの検証

プライマリサイトで

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーでGeo > Sites を選択します。
  4. リポジトリと Wiki の自動チェックサムステータスを表示するには、そのサイトの検証情報タブを展開します。成功した場合は緑色、保留中の場合は灰色、失敗した場合は赤色で表示されます。

    Verification status

セカンダリサイトで

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーでGeo > Sites を選択します。
  4. リポジトリと Wiki の自動チェックサムステータスを表示するには、そのサイトの検証情報タブを展開します。成功した場合は緑色、保留中の場合は灰色、失敗した場合は赤色で表示されます。

    Verification status

チェックサムを使ったGeoサイトの比較

Geoセカンダリサイトの健全性をチェックするために、Git参照とその値のリストに対するチェックサムを使います。チェックサムには、HEADheadstagsnotes、そしてGitLab固有の参照が含まれ、真の一貫性を保証します。2つのサイトのチェックサムが同じなら、間違いなく同じ参照を保持しています。更新のたびにチェックサムを計算し、すべてのサイトが同期していることを確認します。

リポジトリの再検証

バグや一時的なインフラ障害のために、Git リポジトリが検証のためにマークされることなく予期せず変更されることがあります。Geoは常にリポジトリの再検証を行い、データのインテグレーションを確保しています。デフォルトで推奨される再検証間隔は7日ですが、1日という短い間隔を設定することもできます。間隔を短くするとリスクは軽減されますが、負荷は増加します。

プライマリサイトで

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーでGeo > Sites を選択します。
  4. プライマリ・サイトの[編集] を選択して、最小再検証間隔をカスタマイズします:

    Re-verification interval

バックグラウンドでの自動再検証はデフォルトで有効になっていますが、必要に応じて無効にすることもできます。プライマリサイトのRailsノードの Railsコンソールで次のコマンドを実行します:

自動バックグラウンド再検証を無効にするには

Feature.disable('geo_repository_reverification')

自動バックグラウンド再検証を有効にする手順

Feature.enable('geo_repository_reverification')

検証に失敗したプロジェクトの検証をリセットします。

Geo は、リポジトリの再同期がバックオフ期間付きで行われるよう、検証の失敗を積極的に修正しようとします。手動でリセットしたい場合、この Rake タスクは、検証に失敗したプロジェクトやチェックサム不一致のプロジェクトを、バックオフ期間なしで再同期するようマークします:

セカンダリサイトのRailsノードで適切なコマンドを実行します。

リポジトリ用:

sudo gitlab-rake geo:verification:repository:reset

Wikiの場合:

sudo gitlab-rake geo:verification:wiki:reset

チェックサムの不一致による相違の修正

プライマリ・サイトと セカンダリ・サイトにチェックサム検証の不一致がある場合、その原因が明らかでないことがあります。チェックサムの不一致の原因を見つけるには、以下の手順に従います:

  1. プライマリサイトで
    1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
    2. Admin Areaを選択します。
    3. 左サイドバーで、「概要」>「プロジェクト」を選択します。
    4. チェックサムの差分をチェックしたいプロジェクトを探し、その名前を選択します。
    5. プロジェクト管理ページで、Storage nameRelative pathフィールドの Pages を取得します。
  2. プライマリサイトのGitalyノードと セカンダリサイトのGitalyノードで、プロジェクトのリポジトリディレクトリに移動します。Gitaly Clusterを使用している場合は、これらのコマンドを実行する前に、GitalyClusterが健全な状態であることを確認してください。

    デフォルトのパスは/var/opt/gitlab/git-data/repositoriesです。git_data_dirs がカスタマイズされている場合は、念のためサーバー上のディレクトリ・レイアウトを確認してください:

    cd /var/opt/gitlab/git-data/repositories
    
    1. プライマリ・サイトで以下のコマンドを実行し、出力をファイルにリダイレクトします:

      git show-ref --head | grep -E "HEAD|(refs/(heads|tags|keep-around|merge-requests|environments|notes)/)" > primary-site-refs
      
    2. セカンダリー・サイトで以下のコマンドを実行し、出力をファイルにリダイレクトします:

      git show-ref --head | grep -E "HEAD|(refs/(heads|tags|keep-around|merge-requests|environments|notes)/)" > secondary-site-refs
      
    3. 同じシステム上で前のステップのファイルをコピーし、内容のdiffを実行します:

      diff primary-site-refs secondary-site-refs
      

現在の制限

サポートされているレプリケーションと検証方法の詳細については、サポートされている Geo データ型を参照してください。