0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitLab 19.0 アップグレード事前準備 手順書 (PostgreSQL 17 移行)

0
Posted at

0. 前提条件の確認

  • 構成: Docker + Linuxパッケージ(Omnibus)内蔵DB
  • コンテナ名: コンテナ名
  • 空き容量: / (DBディレクトリ) に現在のDBサイズ以上の空きがあること(目安: 1.5GB以上)

1. 事前バックアップ(重要)

作業前に必ず設定とデータの両方をバックアップし、ホストOS外にコピーしてください。

# 設定ファイルのバックアップ (デフォルト: /etc/gitlab/config_backup/)
docker exec -it コンテナ名 gitlab-ctl backup-etc

# アプリケーションデータのバックアップ (デフォルト: /var/opt/gitlab/backups/)
docker exec -it コンテナ名 gitlab-rake gitlab:backup:create

2. Maintenance Mode の有効化

ユーザーの書き込み操作・新規ログインをブロックし、安全にメンテナンスを開始します。

注意: 既存のログインセッションは維持されます。実行中のCIジョブは完了まで継続します。

Maintenance Mode を有効化する

docker exec -it コンテナ名 gitlab-rails console

コンソール内で以下を実行:

::Gitlab::CurrentSettings.update!(
  maintenance_mode: true,
  maintenance_mode_message: "現在メンテナンス中です。作業完了までしばらくお待ちください。"
)
exit

実行中のジョブ・マージ処理の完了待ち

Maintenance Mode 有効化後、進行中の処理が完了するまで待機します。

# Sidekiq キューが空になったことを確認(処理中ジョブが 0 になるまで待つ)
docker exec -it コンテナ名 gitlab-ctl status sidekiq

Admin Area からも確認できます:
Admin Area > Monitoring > Background Jobs (Sidekiq)Busy(実行中)と Enqueued(待機中)が両方 0 であること


3. PostgreSQL 17 へのアップグレード

データベースのメジャーバージョンを 17 に更新します。実行中、GitLab サービスは停止します。

# アップグレードコマンドの実行
docker exec -it コンテナ名 gitlab-ctl pg-upgrade -V 17

完了確認

# バージョンが 17.8 等になっているか確認
docker exec -it コンテナ名 /opt/gitlab/embedded/bin/psql --version

# 全サービスが run 状態か確認
docker exec -it コンテナ名 gitlab-ctl status

DB統計情報の再生成

pg-upgrade はデータ統計情報を引き継がないため、アップグレード後に再生成します。
DBサイズによっては数分〜十数分かかります。サービスを上げる前に実施してください。

docker exec -it コンテナ名 gitlab-psql \
  -d gitlabhq_production \
  -c "ANALYZE VERBOSE;"

DBメンテナンス(VACUUM ANALYZE)

デッド行の回収と統計情報の更新を同時に行います。ANALYZE完了後に実施してください。

docker exec -it コンテナ名 gitlab-psql \
  -d gitlabhq_production \
  -c "VACUUM ANALYZE;" >> /var/log/gitlab-vacuum.log 2>&1

4. 不要な旧DBデータの削除

アップグレード成功後、ディスク容量を解放するために古いデータディレクトリを削除します。

# 旧バージョンデータの削除
docker exec -it コンテナ名 rm -rf /var/opt/gitlab/postgresql/data.16
docker exec -it コンテナ名 rm -f /var/opt/gitlab/postgresql-version.old

5. バックグラウンドマイグレーションの正常化

19.0 への更新前に、すべてのマイグレーションを Finished にする必要があります。

失敗ジョブの確認

  1. Admin Area > Monitoring > Background Migrations を確認。
  2. ステータスが Failed になっているジョブがないか確認。

失敗ジョブの手動完了処理 (Rails Console)

BackfillUserDetailsFields など、クラスが見つからないエラーで失敗している場合に実施します。★こちらは、作業状態にあわせて適宜実施して下さい。★

# Railsコンソールの起動
docker exec -it コンテナ名 gitlab-rails console

コンソール内で以下のコードを順次実行:

# 1. 対象の特定
m = Gitlab::Database::BackgroundMigration::BatchedMigration.find_by(job_class_name: 'BackfillUserDetailsFields')

if m
  # 2. 未完了の子ジョブをすべて成功(3)に書き換え
  m.batched_jobs.where.not(status: 3).update_all(status: 3)
  
  # 3. 親ジョブを成功(3)に書き換え
  m.update!(status: 3)
  
  puts "Successfully marked 'BackfillUserDetailsFields' as Finished."
end

# 4. 終了
exit

6. Maintenance Mode の無効化

すべての作業完了後、Maintenance Mode を解除してサービスを通常状態に戻します。

docker exec -it コンテナ名 gitlab-rails console

コンソール内で以下を実行:

::Gitlab::CurrentSettings.update!(maintenance_mode: false)
exit

7. 最終確認

  • Maintenance Mode が無効化されていること。
  • サービスが正常に動作し、ブラウザからアクセス可能か。
  • Admin Area で Background Migrations の Failed が 0 であること。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?