Geo検証テスト

Geoチームは、GitLabのマイナーバージョンとPostgreSQLデータベースのメジャーバージョンの間でアップグレードする際にGeoが動作することを確認するために、一般的なデプロイ設定に対して手動テストと検証を行っています。

このセクションには、検証テストのジャーナルと関連するイシューへのリンクが含まれています。

GitLabのアップグレード

以下は、私たちが行った GitLab アップグレードの検証テストです。

2020年7月

Geo マルチノードインストールのアップグレード

Geo プライマリサイトの repmgr から Patroni への切り替え

  • 説明マルチノードのGeoプライマリサイトでrepmgrからPatroniへの切り替えをテストしました。オーケストレータツールを使用して、repmgrによって管理される3つのデータベースノードを持つGeoインストールをデプロイしました。このアプローチにより、PatroniとPostgreSQL 11を使用したGeoインストールの検証に関する関連イシューにも対応することができました。
  • 結果:部分的に成功しました。プライマリサイトでPatroniを有効にし、セカンダリサイトでデータベースのレプリケーションを設定しました。しかしながら、Patroniが再起動するたびにセカンダリサイトのレプリケーションスロットを削除してしまうことがわかりました。もう1つのイシューは、Patroniがクラスター内で新しいリーダーを選出した際に、セカンダリサイトが自動的に新しいリーダーに従わないことです。これらのイシューが解決されるまで、Geoインストール用のPatroniを公式にサポート、推奨することはできません。
  • フォローアップのイシュー/アクション:

2020年6月

Geo マルチノードインストールのアップグレード

Geo マルチノードインストールのアップグレード

2020年2月

Geo マルチノードインストールのアップグレード

  • 説明マルチノード設定でGitLab 12.7.5から最新のGitLab 12.8パッケージへのアップグレードをテストしました。
  • 結果ダウンタイムを監視するためのループパイプラインをデモ中に実行しなかったため、部分的に成功。

2020年1月

Geo マルチノードインストールのアップグレード

Geo マルチノードインストールのアップグレード

Geo マルチノードインストールのアップグレード

2019年10月

Geo マルチノードインストールのアップグレード

  • 説明マルチノード設定で GitLab 12.3.5 から GitLab 12.4.1 へのアップグレードをテストしました。
  • 結果アップグレードテストは成功。

Geo マルチノードインストールのアップグレード

  • 説明GitLab 12.2.8 から GitLab 12.3.5 へのアップグレードをテストしました。
  • 結果アップグレードテストは成功。

Geo マルチノードインストールのアップグレード

  • 説明GitLab 12.1.9 から GitLab 12.2.8 へのアップグレードをテストしました。
  • 結果設定ミスの可能性があるため、部分的に成功。

PostgreSQLのアップグレード

PostgreSQLのアップグレード検証テストを以下に示します。

2021年9月

PostgreSQL 13 で Geo インストールを検証

  • 説明PostgreSQL 13がGitLab 14.1のopt-inバージョンとして利用できるようになったので、Geoを使ったGitLabの新規インストールでPostgreSQL 13が有効になっているかテストしてみました。
  • 結果GitLab Environment Toolkitを使ってGeoとPostgreSQL 13の環境構築に成功し、その環境に対してGeoのQAテストを失敗することなく実施しました。

2020年9月

Geo インストールの PostgreSQL 12 アップグレードの検証

  • 説明GitLab 13.3でPostgreSQL 12がopt-inバージョンとして利用可能になったため、既存のGeoインストールをPostgreSQL 11から12にアップグレードするテストを行いました。また、PostgreSQL 12をサポートするための修正が行われた後、Geoを使ったGitLabの新規インストールも再テストしました。これらのテストはGitLab 13.4のナイトリービルドを使って行われました。
  • 結果プライマリとセカンダリに単一のデータベースノードを使用した Geo デプロイのテストは成功しました。Geoのプライマリ上でrepmgrとPatroniが管理するPostgreSQLクラスタで既知の問題が発生しました。このイシューが解決されるまで、プライマリ上のデータベースクラスタで PostgreSQL 12 を使用することは推奨されません。
  • PostgreSQL クラスタの既知のイシュー:

2020年8月

PostgreSQL 12でのGeoインストールの検証

2020年4月

Geo インストールの PostgreSQL 11 アップグレード手順

PostgreSQL 11 での Geo インストールを確認してください:

  • 説明GitLab 12.10でPostgreSQL 11をデフォルトのバージョンにする前に、GeoをPostgreSQL 11でインストールしたGitLab 12.9の新規インストールをテストしました。
  • 結果インストールテストは成功しました。

2019年9月

Geo の PostgreSQL 10.0 アップグレードのテストと検証

オブジェクトストレージのレプリケーションテスト

以下は、追加で実施した検証テストです。

2022年4月

AWSベースのオブジェクトストレージを使用したオブジェクトストレージレプリケーションの検証

  • 説明AWSベースのオブジェクトストレージレプリケーションとGitLabベースのオブジェクトストレージレプリケーションを使用した場合に、プライマリのオブジェクトストレージからセカンダリに単一のイメージをレプリケートするのにかかる平均時間をテストしました。このテストは、プライマリサイトのプロジェクトに毎秒1MBのイメージを60秒間アップロードすることで行いました。そして、セカンダリサイトでイメージが利用可能になるまでの時間を計測しました。これにはRubyスクリプトを使用しました。
  • 結果AWSマネージドレプリケーションを使用した場合、サイト間でイメージがレプリケートされるまでの平均時間は約49秒でした。同じリージョンでGeoマネージドレプリケーションを使用した場合、レプリケーションにかかる平均時間はわずか5秒でしたが、リージョンをまたいでレプリケーションを行った場合、平均時間は33秒に増加しました。

GCPベースのオブジェクトストレージを使用して、オブジェクトストレージのレプリケーションを検証します:

  • 説明GCPベースのオブジェクトストレージレプリケーションとGitLabベースのオブジェクトストレージレプリケーションを使用した場合に、1つのイメージがプライマリのオブジェクトストレージからセカンダリにレプリケートされるまでの平均時間をテストしました。このテストは、プライマリサイトのプロジェクトに1MBのイメージを1秒ごとに60秒間アップロードすることで行いました。そして、セカンダリサイトでイメージが利用可能になるまでの時間を計測しました。これにはRubyスクリプトを使用しました。
  • 結果GCPは他のクラウドプロバイダーとは異なるレプリケーションを扱います。GCPでは、マルチリージョン、デュアルリージョン、シングルリージョンのいずれかのバケットを作成します。これは、選択されたオプションに基づいて、バケットが自動的にリージョンにレプリカを保存することを意味します。マルチリージョンを使用した場合でも、アメリカ、ヨーロッパ、アジアといった単一の大陸にのみレプリケートされます。現在のところ、GCPベースのレプリケーションを使用して大陸間でオブジェクトをレプリケートする方法はないようです。Geoマネージドレプリケーションの場合、同じリージョン内でレプリケートする場合の平均時間は6秒で、リージョンをまたいでレプリケートする場合はわずか9秒でした。

2022年1月

Azureベースのオブジェクトストレージを使用したオブジェクトストレージレプリケーションの検証

  • 説明AzureベースのオブジェクトストレージレプリケーションとGitLabベースのオブジェクトストレージレプリケーションを使用した場合に、1つのイメージがプライマリのオブジェクトストレージからセカンダリにレプリケートされるまでの平均時間をテストしました。これは、プライマリサイトのプロジェクトに1MBのイメージを1秒ごとに60秒間アップロードしてテストしました。そして、セカンダリサイトでイメージが利用可能になるまでの時間を計測しました。これにはRubyスクリプトを使用しました。
  • 結果Azureベースのレプリケーションを使用した場合、プライマリオブジェクトストレージからセカンダリへのイメージのレプリケーションにかかる平均時間は40秒、レプリケーションにかかる最長時間は70秒、最短時間は11秒でした。GitLabベースのレプリケーションを使用した場合、レプリケーションが完了するまでの平均時間は5秒、最長のレプリケーション時間は10秒、最速は3秒でした。
  • 続いてのイシューです:

2021年5月

オブジェクトストレージレプリケーションを有効にしてフェイルオーバーをテストします:

  • 説明テスト当時、Geo のオブジェクトストレージレプリケーション機能はベータ版でした。オブジェクトストレージレプリケーションが意図したとおりに動作し、フェイルオーバー後にデータが新しいプライマリに存在することをテストしました。
  • 結果テストは成功しました。オブジェクトストレージのデータはレプリケートされ、フェイルオーバー後に存在しました。
  • フォローアップのイシュー:

その他のテスト

2020年8月

GeoデプロイメントでGitalyクラスターをテスト

  • 説明プライマリおよびセカンダリ Geo サイトの両方で設定された Gitaly クラスターで Geo デプロイをテストしました。プライマリ Geo サイトで自動 Gitaly クラスター フェイルオーバーをトリガーし、エンドツーエンドの Geo テストを実行しました。その後、セカンダリ Geo サイトで Gitaly クラスターのフェイルオーバーをトリガーし、エンドツーエンドの Geo テストを再実行しました。
  • 結果:プライマリサイトの Gitaly クラスターフェイルオーバーの前後、およびセカンダリサイトの Gitaly クラスターフェイルオーバーの前後で、エンドツーエンドのテストに成功。