Help us understand the problem. What is going on with this article?

OmnibusインストールされたGitLabのPostgreSQLを9.6.14から10.9にアップグレードした話

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

Omnibus GitLabでバージョンGitLab 11.11より前にインストールされた方は、恐らくPostgreSQLが9.6.14であるかと思います。

image.png

しかし、以下のリリースノートを見て気がつきました。

GitLab 12.5 with EKS Cluster Creation & Environments Dashboard | GitLab
https://about.gitlab.com/blog/2019/11/22/gitlab-12-5-released/#planned-deprecation-of-postgresql-9.6-and-10.x-in-gitlab-13.0

GitLab 13では、PostgreSQL 9.6とPostgreSQL 10.xがサポートされなくなります!!!

image.png

これによると何やら、PostgreSQL 11のパーティショニングの性能がいいからGitLab 13.xではPostgreSQL11または12にバージョンアップすることを計画中で、GitLab 13からは、PostgreSQL 11が必須になる予定なんだそうです。ちなみに、GitLab 13は2020年05月22日にリリース予定です。

おやおや大変です。自前管理のGitLabを見て見てみましたが、上記のようにPostgreSQL 9.6.14です。

Database settings | GitLab
https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server
によると「バージョン12以降は、明示的に指定しないと自動的にアップグレードされる」とあります。
image.png

の筈なのですが、移行はされていないようです。
なので手動で移行してみます。

1. Postgresqlをバージョン10に移行する

1-1. ドキュメントをよく読む

まずは、ドキュメントをよく読みましょう。
Database settings | GitLab
https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server

Note:

  • アップグレードする前にコマンドを確認する
  • アップグレードするときのダウンタイムを考慮する
  • バックアップを取る

アップグレード前に以下のことをチェックすることが推奨です。
1. 最新版のGitLabがちゃんと動いていること
2. sudo gitlab-ctl reconfigureが実行してもエラーが出ないこと
3. 移行できるだけのデータ領域が確保されていること

ダウンタイムが発生するというのは注意ポイントですね。
年末年始とかにやるとよいかもしれません。

1-2. 最新版のGitLabになっているか確認します。

再掲
image.png
大丈夫そうです。

1-3. reconfigureして問題ないことを確認

xxxx:/var/opt/gitlab/postgresql$ sudo gitlab-ctl reconfigure
Starting Chef Client, version 14.13.11
resolving cookbooks for run list: ["gitlab"]
   ---- <中略> ---
Running handlers:
Running handlers complete
Chef Client finished, 3/813 resources updated in 09 seconds
gitlab Reconfigured!

reconfigureできました。

1-4. Postgresql 10のバイナリが入っているか確認する

大丈夫だと思いますが、念のためPostgreSQL 10のバイナリがあるかどうか確認します。

~$ sudo ls -la /opt/gitlab/embedded/postgresql/
total 16
drwxr-xr-x  4 root root 4096 Jun 12 02:44 .
drwxr-xr-x 16 root root 4096 Dec 10 14:17 ..
drwxr-xr-x  5 root root 4096 May 23  2019 10
drwxr-xr-x  5 root root 4096 Dec 23  2018 9.6
~$ sudo ls -la /opt/gitlab/embedded/postgresql/10/bin/
total 11480
drwxr-xr-x 2 root root    4096 Dec  4 02:44 .
drwxr-xr-x 5 root root    4096 May 23  2019 ..
-rwxr-xr-x 1 root root   64056 Dec  3 21:07 clusterdb
-rwxr-xr-x 1 root root   63840 Dec  3 21:07 createdb
-rwxr-xr-x 1 root root   68616 Dec  3 21:07 createuser
-rwxr-xr-x 1 root root   59184 Dec  3 21:07 dropdb
-rwxr-xr-x 1 root root   59152 Dec  3 21:07 dropuser
-rwxr-xr-x 1 root root  941952 Dec  3 21:07 ecpg
-rwxr-xr-x 1 root root  132568 Dec  3 21:07 initdb
-rwxr-xr-x 1 root root   34128 Dec  3 21:07 oid2name
-rwxr-xr-x 1 root root   30640 Dec  3 21:07 pg_archivecleanup
-rwxr-xr-x 1 root root  116216 Dec  3 21:07 pg_basebackup
-rwxr-xr-x 1 root root  141112 Dec  3 21:07 pgbench
-rwxr-xr-x 1 root root   34152 Dec  3 21:07 pg_config
-rwxr-xr-x 1 root root   42952 Dec  3 21:07 pg_controldata
   ---- <中略> ---

/opt/gitlab/embedded/postgresql/10/bin/というPostgresql 10のディレクトリがあって、その下にバイナリが入っています。
問題なさそうです。

1-5. 移行できる容量があるか確認

※理由:古いデータを残したまま新しいDBを作るので2倍容量が必要になるから。

既存DBはこれぐらいですね。

~$ sudo du -sh /var/opt/gitlab/postgresql/data
310M    /var/opt/gitlab/postgresql/data

Disk使用率はこんなものなので大丈夫でしょう。

~$ sudo df -h 
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdb        20G   15G  5.8G  72% /var/opt/gitlab

1-6. バックアップ

何かあった時に戻せるようにバックアップをとりましょう。DB以外はスキップしていいので、以下のようにするとバックアップが楽にできるでしょう。

sudo gitlab-backup create SKIP=uploads,repositories,builds,artifacts,lfs,registry,pages

※注: GitLab 12.1以降

1-7. アップグレードコマンドを実行する

~$ sudo gitlab-ctl pg-upgrade
Checking for an omnibus managed postgresql: OK
Checking for a newer version of PostgreSQL to install
Upgrading PostgreSQL to 10.9
Checking if we already upgraded: NOT OK
Checking if PostgreSQL bin files are symlinked to the expected location: OK
Checking if postgresql['version'] is set: OK
Waiting 30 seconds to ensure tasks complete before PostgreSQL upgrade.
See https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server for details
If you do not want to upgrade the PostgreSQL server at this time, enter Ctrl-C and see the documentation for details

Please hit Ctrl-C now if you want to cancel the operation.

実行猶予が30秒与えられます。
あ~、バックアップ忘れてた、という場合にはCtrl-Cでキャンセルしましょう。

続きは以下です。

Toggling deploy page:cp /opt/gitlab/embedded/service/gitlab-rails/public/deploy.html /opt/gitlab/embedded/service/gitlab-rails/public/index.html
Toggling deploy page: OK
Toggling services:ok: down: alertmanager: 1s, normally up
ok: down: gitaly: 0s, normally up
ok: down: gitlab-exporter: 0s, normally up
ok: down: grafana: 0s, normally up
ok: down: logrotate: 1s, normally up
ok: down: mattermost: 0s, normally up
ok: down: node-exporter: 1s, normally up
ok: down: postgres-exporter: 0s, normally up
ok: down: prometheus: 0s, normally up
ok: down: redis-exporter: 1s, normally up
ok: down: registry: 0s, normally up
ok: down: sidekiq: 1s, normally up
Toggling services: OK
Running stop on postgresql:ok: down: postgresql: 0s, normally up
Running stop on postgresql: OK
Symlink correct version of binaries: OK
Creating temporary data directory: OK
Initializing the new database: OK
Upgrading the data: OK
Move the old data directory out of the way: OK
Rename the new data directory: OK
Configuring PostgreSQL
Starting Chef Client, version 14.13.11
resolving cookbooks for run list: ["gitlab::config", "postgresql::enable"]

これ以下は、通常のsudo gitlab-ctl reconfigureと同じなので省略します。
通常のsudo gitlab-ctl reconfigureと違うのは、
/var/opt/gitlab/postgresql/data/postgresql.conf が書き換わるのでDiffが盛大に出ます。
しかし、/etc/gitlab/gitlab.rbを元に再設定されるので気にしなくてOKです。

最後にこんなメッセージが出ます。

Running handlers:
Running handlers complete
Chef Client finished, 5/813 resources updated in 09 seconds
Running reconfigure: OK
Waiting for Database to be running.
Database upgrade is complete, running analyze_new_cluster.sh
Toggling deploy page:rm -f /opt/gitlab/embedded/service/gitlab-rails/public/index.html
Toggling deploy page: OK
Toggling services:ok: run: alertmanager: (pid 15506) 1s
ok: run: gitaly: (pid 15518) 0s
ok: run: gitlab-exporter: (pid 15538) 1s
ok: run: grafana: (pid 15547) 0s
ok: run: logrotate: (pid 15560) 0s
ok: run: mattermost: (pid 15567) 1s
ok: run: node-exporter: (pid 15575) 0s
ok: run: postgres-exporter: (pid 15585) 1s
ok: run: prometheus: (pid 15594) 0s
ok: run: redis-exporter: (pid 15678) 0s
ok: run: registry: (pid 15688) 1s
ok: run: sidekiq: (pid 15696) 0s
Toggling services: OK
==== Upgrade has completed ====
Please verify everything is working and run the following if so
sudo rm -rf /var/opt/gitlab/postgresql/data.9.6

動作に問題がなければ、/var/opt/gitlab/postgresql/data.9.6は消しても問題ないようです。

1-8. データ確認

以下のディレクトリがどうなっているか確認しましょう。
/var/opt/gitlab/postgresql/

~$ sudo ls -la /var/opt/gitlab/postgresql/
total 28
drwxr-xr-x  4 gitlab-psql root         156 Dec 10 14:17 .
drwxr-xr-x 23 root        root        4096 Dec 10 14:17 ..
-rwx------  1 gitlab-psql gitlab-psql  795 Dec 10 14:17 analyze_new_cluster.sh
drwx------ 19 gitlab-psql gitlab-psql 4096 Dec 10 14:17 data
drwx------ 19 gitlab-psql root        4096 Dec 10 14:17 data.9.6
-rwx------  1 gitlab-psql gitlab-psql   52 Dec 10 14:17 delete_old_cluster.sh
-rw-------  1 gitlab-psql root          52 Jul 23  2017 .profile
srwxrwxrwx  1 gitlab-psql gitlab-psql    0 Dec 10 14:17 .s.PGSQL.5432
-rw-------  1 gitlab-psql gitlab-psql   81 Dec 10 14:17 .s.PGSQL.5432.lock

dataとdata.9.6があります。
data.9.6が古いファイルです。

2. 動作確認

一通り挙動を確認しましょう。

3. 再起動してComponentsを確認

動作を確認したら、再起動してみます。
(ComponentsがPostgreSQL10にならなかったからです)

image.png

無事、PostgreSQL 10.9になりました。

4. 古いデータを削除

あとは古いデータを削除するだけなのですが、根っから小心者なので移動だけしておきます。

sudo mv /var/opt/gitlab/postgresql/data.9.6 /root/backup
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした